Skip to content
Snippets Groups Projects
Commit b8dc95d6 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

unnecessary method getByNames removed

parent d9d0f09c
No related branches found
No related tags found
1 merge request!156Resolve "search by chemical names"
...@@ -18,18 +18,6 @@ import lcsb.mapviewer.model.map.species.Element; ...@@ -18,18 +18,6 @@ import lcsb.mapviewer.model.map.species.Element;
*/ */
public interface IDbSearchService<T> { public interface IDbSearchService<T> {
/**
* Returns list of objects found by list of names.
*
* @param names
* list of object names
* @param searchCriteria
* set of {@link DbSearchCriteria} used for searching (like:
* {@link lcsb.mapviewer.model.map.model.Model Model})
* @return list of objects for given list of names
*/
List<T> getByNames(List<String> names, DbSearchCriteria searchCriteria);
/** /**
* Returns the drugs found by drug name. * Returns the drugs found by drug name.
* *
......
...@@ -31,8 +31,6 @@ import lcsb.mapviewer.model.map.species.Element; ...@@ -31,8 +31,6 @@ import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.model.map.species.Gene; import lcsb.mapviewer.model.map.species.Gene;
import lcsb.mapviewer.model.map.species.Protein; import lcsb.mapviewer.model.map.species.Protein;
import lcsb.mapviewer.model.map.species.Rna; import lcsb.mapviewer.model.map.species.Rna;
import lcsb.mapviewer.model.map.statistics.SearchType;
import lcsb.mapviewer.services.interfaces.ISearchHistoryService;
import lcsb.mapviewer.services.search.db.DbSearchCriteria; import lcsb.mapviewer.services.search.db.DbSearchCriteria;
import lcsb.mapviewer.services.search.db.DbSearchService; import lcsb.mapviewer.services.search.db.DbSearchService;
...@@ -45,272 +43,252 @@ import lcsb.mapviewer.services.search.db.DbSearchService; ...@@ -45,272 +43,252 @@ import lcsb.mapviewer.services.search.db.DbSearchService;
@Transactional(value = "txManager") @Transactional(value = "txManager")
public class ChemicalService extends DbSearchService implements IChemicalService { public class ChemicalService extends DbSearchService implements IChemicalService {
/** /**
* Default class logger. * Default class logger.
*/ */
private Logger logger = Logger.getLogger(ChemicalService.class); private Logger logger = Logger.getLogger(ChemicalService.class);
/** /**
* List of chemicals pairs of id and name. * List of chemicals pairs of id and name.
*/ */
private Map<MiriamData, Map<MiriamData, String>> diseases = new HashMap<>(); private Map<MiriamData, Map<MiriamData, String>> diseases = new HashMap<>();
/** /**
* Access point and parser for the online ctd database. * Access point and parser for the online ctd database.
*/ */
@Autowired @Autowired
private ChemicalParser chemicalParser; private ChemicalParser chemicalParser;
/** /**
* Object used to perform operations on {@link MiriamType#HGNC} annotations. * Object used to perform operations on {@link MiriamType#HGNC} annotations.
*/ */
@Autowired @Autowired
private HgncAnnotator hgncAnnotator; private HgncAnnotator hgncAnnotator;
/** /**
* Service that manages search history. * Default constructor.
*/ */
@Autowired public ChemicalService() {
private ISearchHistoryService searchHistoryService; super();
}
/** /**
* Default constructor. * Returns list of {@link Chemical chemicals} for a given disease and list of
*/ * names.
public ChemicalService() { *
super(); * @param diseaseID
} * {@link MiriamData} identifying disease; it should be a
* {@link MiriamType#MESH_2012} identifier
* @param names
* list of drug names that we are looking for
* @return list of {@link Chemical chemicals} that were found
*/
protected List<Chemical> getChemicalByName(MiriamData diseaseID, List<String> names) {
if (diseaseID == null || names == null) {
throw new InvalidArgumentException("diseaseID cannot be null");
}
names.removeAll(Collections.singleton(null));
@Override // Create a map with the each search string and chemical id.
public List<Chemical> getByNames(List<String> names, DbSearchCriteria criteria) { // Remove empty string and special characters.
if (names == null) { Map<String, MiriamData> searchNamesMap = new LinkedHashMap<String, MiriamData>();
return null; for (int i = 0; i < names.size(); i++) {
} String name = names.get(i).trim().toLowerCase().replaceAll("[^\\w]", "");
if (!name.isEmpty()) {
searchNamesMap.put(name, null);
}
}
try {
if (criteria.getIpAddress() != null && criteria.getModel() != null) { // Search id, name Map for matching records
searchHistoryService.addQuery(names.toString(), SearchType.CHEMICAL, criteria.getIpAddress(), criteria.getModel().getProject().getProjectId()); List<MiriamData> ids = new ArrayList<MiriamData>();
} Iterator<Entry<MiriamData, String>> idNameEnteries = getChemicalsByDisease(diseaseID).entrySet().iterator();
int namesFound = 0;
while (idNameEnteries.hasNext() && namesFound < searchNamesMap.size()) {
Map.Entry<MiriamData, String> pair = idNameEnteries.next();
String chemicalName = pair.getValue();
if (chemicalName != null) {
chemicalName = chemicalName.toLowerCase().replaceAll("[^\\w]", "");
for (Map.Entry<String, MiriamData> nameEntry : searchNamesMap.entrySet()) {
if (nameEntry.getKey().equals(chemicalName)) {
nameEntry.setValue(pair.getKey());
namesFound++;
List<Chemical> chemicals = getChemicalByName(criteria.getDisease(), names); }
}
return chemicals; }
} }
/** // Get what all values include null where no matching record is found,
* Returns list of {@link Chemical chemicals} for a given disease and list of // remove null and look in the database.
* names. ids.addAll(searchNamesMap.values());
* ids.removeAll(Collections.singleton(null));
* @param diseaseID List<Chemical> sortedResult = new ArrayList<Chemical>();
* {@link MiriamData} identifing disease; it should be a if (!ids.isEmpty()) {
* {@link MiriamType#MESH_2012} identifier List<Chemical> result = chemicalParser.getChemicals(diseaseID, ids);
* @param names
* list of drug names that we are looking for
* @return list of {@link Chemical chemicals} that were found
*/
protected List<Chemical> getChemicalByName(MiriamData diseaseID, List<String> names) {
if (diseaseID == null || names == null) {
throw new InvalidArgumentException("diseaseID cannot be null");
}
names.removeAll(Collections.singleton(null));
// Create a map with the each search string and chemical id. // If the result is not empty and we found chemicals, try to sort as
// Remove empty string and special characters. // by the initial list provided.
Map<String, MiriamData> searchNamesMap = new LinkedHashMap<String, MiriamData>(); Map<MiriamData, Chemical> resultAsMap = new HashMap<MiriamData, Chemical>();
for (int i = 0; i < names.size(); i++) { if (result != null && !result.isEmpty()) {
String name = names.get(i).trim().toLowerCase().replaceAll("[^\\w]", ""); for (Chemical chemo : result) {
if (!name.isEmpty()) { resultAsMap.put(chemo.getChemicalId(), chemo);
searchNamesMap.put(name, null); }
}
}
try {
// Search id, name Map for matching records for (Map.Entry<String, MiriamData> nameEntry : searchNamesMap.entrySet()) {
List<MiriamData> ids = new ArrayList<MiriamData>(); if (nameEntry.getValue() != null) {
Iterator<Entry<MiriamData, String>> idNameEnteries = getChemicalsByDisease(diseaseID).entrySet().iterator(); sortedResult.add(resultAsMap.get(nameEntry.getValue()));
int namesFound = 0; }
while (idNameEnteries.hasNext() && namesFound < searchNamesMap.size()) { }
Map.Entry<MiriamData, String> pair = idNameEnteries.next(); }
String chemicalName = pair.getValue(); }
if (chemicalName != null) {
chemicalName = chemicalName.toLowerCase().replaceAll("[^\\w]", "");
for (Map.Entry<String, MiriamData> nameEntry : searchNamesMap.entrySet()) {
if (nameEntry.getKey().equals(chemicalName)) {
nameEntry.setValue(pair.getKey());
namesFound++;
} return sortedResult;
} } catch (ChemicalSearchException e) {
logger.error("Problem with accessing database", e);
return new ArrayList<Chemical>();
}
}
} @Override
} public Chemical getByName(String name, DbSearchCriteria searchCriteria) {
if (searchCriteria.getDisease() == null) {
throw new InvalidArgumentException("diseaseID cannot be null");
}
if (name == null || name.isEmpty()) {
return null;
}
MiriamData id = null;
List<Chemical> result = new ArrayList<Chemical>();
name = name.toLowerCase().replaceAll("[^\\w]", "");
try {
Iterator<Entry<MiriamData, String>> mapValues = getChemicalsByDisease(searchCriteria.getDisease()).entrySet()
.iterator();
int shortestName = Integer.MAX_VALUE;
while (mapValues.hasNext()) {
Map.Entry<MiriamData, String> pair = mapValues.next();
String chemicalName = pair.getValue();
if (chemicalName != null) {
chemicalName = chemicalName.toLowerCase().replaceAll("[^\\w]", "");
if (chemicalName.contains(name) && name.length() < shortestName) {
id = pair.getKey();
shortestName = chemicalName.length();
}
}
}
if (id != null) {
List<MiriamData> chemicalId = new ArrayList<>();
chemicalId.add(id);
result = chemicalParser.getChemicals(searchCriteria.getDisease(), chemicalId);
}
} catch (ChemicalSearchException e) {
logger.error("Problem with accesing database", e);
}
if (result.size() == 0) {
return null;
} else {
// return chemicalViewFactory.create(result.get(0),
// searchCriteria.getModel(), searchCriteria.getColorSet());
return result.get(0);
}
// Get what all values include null where no matching record is found, }
// remove null and look in the database.
ids.addAll(searchNamesMap.values());
ids.removeAll(Collections.singleton(null));
List<Chemical> sortedResult = new ArrayList<Chemical>();
if (!ids.isEmpty()) {
List<Chemical> result = chemicalParser.getChemicals(diseaseID, ids);
// If the result is not empty and we found chemicals, try to sort as @Override
// by the initial list provided. public List<Chemical> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
Map<MiriamData, Chemical> resultAsMap = new HashMap<MiriamData, Chemical>(); List<Chemical> chemicalList = new ArrayList<>();
if (result != null && !result.isEmpty()) { Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
for (Chemical chemo : result) { for (Element alias : targets) {
resultAsMap.put(chemo.getChemicalId(), chemo); if (alias instanceof Protein || alias instanceof Gene || alias instanceof Rna) {
} boolean hgncFound = false;
for (MiriamData md : alias.getMiriamData()) {
if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) {
targetsMiriam.add(md);
hgncFound = true;
} else if (MiriamType.ENTREZ.equals(md.getDataType())) {
// ad also entrez in case of mouse, rat, etc
targetsMiriam.add(md);
}
for (Map.Entry<String, MiriamData> nameEntry : searchNamesMap.entrySet()) { }
if (nameEntry.getValue() != null) { if (!hgncFound) {
sortedResult.add(resultAsMap.get(nameEntry.getValue())); MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, alias.getName());
} try {
} if (hgncAnnotator.isValidHgncMiriam(md)) {
} targetsMiriam.add(md);
} }
} catch (AnnotatorException e) {
logger.error("Problem with accessing HGNC database", e);
}
}
}
}
try {
chemicalList = chemicalParser.getChemicalListByTarget(targetsMiriam, searchCriteria.getDisease());
} catch (ChemicalSearchException e) {
logger.error("Problem with accessing chemical database", e);
}
return sortedResult; Collections.sort(chemicalList, new Chemical.NameComparator());
} catch (ChemicalSearchException e) { return chemicalList;
logger.error("Problem with accessing database", e); }
return new ArrayList<Chemical>();
}
}
@Override /**
public Chemical getByName(String name, DbSearchCriteria searchCriteria) { * @param disease
if (searchCriteria.getDisease() == null) { * {@link MiriamType#MESH_2012 mesh term} describing disease
throw new InvalidArgumentException("diseaseID cannot be null"); *
} * @return chemicals related to the disease
if (name == null || name.isEmpty()) { * @see #diseases
return null; * @throws ChemicalSearchException
} * thrown when there is problem with accessing ctd database
MiriamData id = null; */
List<Chemical> result = new ArrayList<Chemical>(); private Map<MiriamData, String> getChemicalsByDisease(MiriamData disease) throws ChemicalSearchException {
name = name.toLowerCase().replaceAll("[^\\w]", ""); if (diseases.get(disease) == null) {
try { diseases.put(disease, chemicalParser.getChemicalsForDisease(disease));
Iterator<Entry<MiriamData, String>> mapValues = getChemicalsByDisease(searchCriteria.getDisease()).entrySet().iterator(); }
int shortestName = Integer.MAX_VALUE; return diseases.get(disease);
while (mapValues.hasNext()) { }
Map.Entry<MiriamData, String> pair = mapValues.next();
String chemicalName = pair.getValue();
if (chemicalName != null) {
chemicalName = chemicalName.toLowerCase().replaceAll("[^\\w]", "");
if (chemicalName.contains(name) && name.length() < shortestName) {
id = pair.getKey();
shortestName = chemicalName.length();
}
}
}
if (id != null) {
List<MiriamData> chemicalId = new ArrayList<>();
chemicalId.add(id);
result = chemicalParser.getChemicals(searchCriteria.getDisease(), chemicalId);
}
} catch (ChemicalSearchException e) {
logger.error("Problem with accesing database", e);
}
if (result.size() == 0) {
return null;
} else {
// return chemicalViewFactory.create(result.get(0),
// searchCriteria.getModel(), searchCriteria.getColorSet());
return result.get(0);
}
} @Override
public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) {
@Override double progress = 0.0;
public List<Chemical> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) { iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
List<Chemical> chemicalList = new ArrayList<>(); MiriamData disease = originalModel.getProject().getDisease();
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>(); if (disease != null) {
for (Element alias : targets) { logger.debug("Caching chemical queries...");
if (alias instanceof Protein || alias instanceof Gene || alias instanceof Rna) { Set<MiriamData> targetMiriams = new HashSet<>();
boolean hgncFound = false; List<Model> models = new ArrayList<>();
for (MiriamData md : alias.getMiriamData()) { models.add(originalModel);
if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) { models.addAll(originalModel.getSubmodels());
targetsMiriam.add(md); for (Model model : models) {
hgncFound = true; for (BioEntity element : model.getBioEntities()) {
} else if (MiriamType.ENTREZ.equals(md.getDataType())) { for (MiriamData md : element.getMiriamData()) {
// ad also entrez in case of mouse, rat, etc if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) {
targetsMiriam.add(md); targetMiriams.add(md);
} } else if (MiriamType.ENTREZ.equals(md.getDataType())) {
targetMiriams.add(md);
} }
if (!hgncFound) { }
MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, alias.getName()); }
try { }
if (hgncAnnotator.isValidHgncMiriam(md)) { double counter = 0.0;
targetsMiriam.add(md); for (MiriamData md : targetMiriams) {
} try {
} catch (AnnotatorException e) { List<Chemical> chemicalList = chemicalParser.getChemicalListByTarget(md, disease);
logger.error("Problem with accessing HGNC database", e); for (Chemical chemical : chemicalList) {
} cacheMiriamData(chemical);
} }
} } catch (ChemicalSearchException | AnnotatorException e) {
} logger.error("Problem with accessing info about chemical for target: " + md, e);
try { }
chemicalList = chemicalParser.getChemicalListByTarget(targetsMiriam, searchCriteria.getDisease()); counter += 1;
} catch (ChemicalSearchException e) { progress = counter / (double) targetMiriams.size();
logger.error("Problem with accessing chemical database", e); iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
} }
} else {
Collections.sort(chemicalList, new Chemical.NameComparator()); logger.debug("Caching chemical queries not possible...");
return chemicalList; }
} }
/**
* @param disease
* {@link MiriamType#MESH_2012 mesh term} describing disease
*
* @return chemicals related to the disease
* @see #diseases
* @throws ChemicalSearchException
* thrown when there is problem with accessing ctd database
*/
private Map<MiriamData, String> getChemicalsByDisease(MiriamData disease) throws ChemicalSearchException {
if (diseases.get(disease) == null) {
diseases.put(disease, chemicalParser.getChemicalsForDisease(disease));
}
return diseases.get(disease);
}
@Override
public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) {
double progress = 0.0;
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
MiriamData disease = originalModel.getProject().getDisease();
if (disease != null) {
logger.debug("Caching chemical queries...");
Set<MiriamData> targetMiriams = new HashSet<>();
List<Model> models = new ArrayList<>();
models.add(originalModel);
models.addAll(originalModel.getSubmodels());
for (Model model : models) {
for (BioEntity element : model.getBioEntities()) {
for (MiriamData md : element.getMiriamData()) {
if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) {
targetMiriams.add(md);
} else if (MiriamType.ENTREZ.equals(md.getDataType())) {
targetMiriams.add(md);
}
}
}
}
double counter = 0.0;
for (MiriamData md : targetMiriams) {
try {
List<Chemical> chemicalList = chemicalParser.getChemicalListByTarget(md, disease);
for (Chemical chemical : chemicalList) {
cacheMiriamData(chemical);
}
} catch (ChemicalSearchException | AnnotatorException e) {
logger.error("Problem with accessing info about chemical for target: " + md, e);
}
counter += 1;
progress = counter / (double) targetMiriams.size();
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
}
} else {
logger.debug("Caching chemical queries not possible...");
}
}
} }
...@@ -72,36 +72,8 @@ public class DrugService extends DbSearchService implements IDrugService { ...@@ -72,36 +72,8 @@ public class DrugService extends DbSearchService implements IDrugService {
@Autowired @Autowired
private ISearchHistoryService searchHistoryService; private ISearchHistoryService searchHistoryService;
@Override
public List<Drug> getByNames(List<String> names, DbSearchCriteria searchCriteria) {
List<Drug> result = new ArrayList<>();
Set<MiriamData> processedDrugIds = new HashSet<>();
int oldSet = searchCriteria.getColorSet();
for (String string : names) {
searchCriteria.colorSet(searchCriteria.getColorSet() + 1);
Drug drug = getByName(string, searchCriteria);
if (drug != null) {
boolean isNewDrug = false;
for (MiriamData id : drug.getSources()) {
if (!processedDrugIds.contains(id)) {
isNewDrug = true;
}
processedDrugIds.add(id);
}
if (isNewDrug) {
result.add(drug);
}
}
}
searchCriteria.colorSet(oldSet);
return result;
}
/** /**
* Removes targets for unknown orginisms from the drug. * Removes targets for unknown organisms from the drug.
* *
* @param drug * @param drug
* drug from which we want to remove targets * drug from which we want to remove targets
......
...@@ -28,13 +28,11 @@ import lcsb.mapviewer.model.map.species.Element; ...@@ -28,13 +28,11 @@ import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.model.map.species.Gene; import lcsb.mapviewer.model.map.species.Gene;
import lcsb.mapviewer.model.map.species.Protein; import lcsb.mapviewer.model.map.species.Protein;
import lcsb.mapviewer.model.map.species.Rna; import lcsb.mapviewer.model.map.species.Rna;
import lcsb.mapviewer.model.map.statistics.SearchType;
import lcsb.mapviewer.services.interfaces.ISearchHistoryService;
import lcsb.mapviewer.services.search.db.DbSearchCriteria; import lcsb.mapviewer.services.search.db.DbSearchCriteria;
import lcsb.mapviewer.services.search.db.DbSearchService; import lcsb.mapviewer.services.search.db.DbSearchService;
/** /**
* Implementation of the service that allows access information about che. * Implementation of the service that allows access information about miRNAs.
* *
* @author Ayan Rota * @author Ayan Rota
* *
...@@ -42,199 +40,173 @@ import lcsb.mapviewer.services.search.db.DbSearchService; ...@@ -42,199 +40,173 @@ import lcsb.mapviewer.services.search.db.DbSearchService;
@Transactional(value = "txManager") @Transactional(value = "txManager")
public class MiRNAService extends DbSearchService implements IMiRNAService { public class MiRNAService extends DbSearchService implements IMiRNAService {
/** /**
* Default class logger. * Default class logger.
*/ */
private Logger logger = Logger.getLogger(MiRNAService.class); private Logger logger = Logger.getLogger(MiRNAService.class);
/** /**
* Access point and parser for the online ctd database. * Access point and parser for the online ctd database.
*/ */
@Autowired @Autowired
private MiRNAParser miRNAParser; private MiRNAParser miRNAParser;
/** /**
* Object used to get information about {@link MiriamType#HGNC} annotations * Object used to get information about {@link MiriamType#HGNC} annotations and
* and transformations. * transformations.
*/ */
@Autowired @Autowired
private HgncAnnotator hgncAnnotator; private HgncAnnotator hgncAnnotator;
/** /**
* Service that manages search history. * Default constructor.
*/ */
@Autowired public MiRNAService() {
private ISearchHistoryService searchHistoryService; super();
}
/**
* Default constructor. /**
*/ * Init method called after initialization of spring bean.
public MiRNAService() { */
super(); @PostConstruct
} public void init() {
}
/**
* Init method called after intialization of spring bean. @Override
*/ public MiRNA getByName(String name, DbSearchCriteria searchCriteria) {
@PostConstruct if ("".equals(name)) {
public void init() { return null;
} }
try {
@Override List<String> names = new ArrayList<>();
public List<MiRNA> getByNames(List<String> names, DbSearchCriteria criteria) { names.add(name);
if (names == null) { List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names);
return null; if (miRNAs.size() > 0) {
} return miRNAs.get(0);
if (criteria.getIpAddress() != null && criteria.getModel() != null) { }
searchHistoryService.addQuery(names.toString(), SearchType.MI_RNA, criteria.getIpAddress(), criteria.getModel().getProject().getProjectId()); return null;
} // return miRNAViewFactory.create(miRNAs.get(0),
List<MiRNA> views = new ArrayList<>(); // searchCriteria.getModel(), searchCriteria.getColorSet());
try { } catch (MiRNASearchException e) {
List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names); logger.error("Problem with accessing mirna database", e);
for (MiRNA miRNA : miRNAs) { return null;
views.add(miRNA); }
} }
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e); @Override
} public List<MiRNA> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
List<MiRNA> mirnaList = new ArrayList<MiRNA>();
return views; Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
} for (Element element : targets) {
if (element instanceof Protein || element instanceof Gene || element instanceof Rna) {
@Override boolean hgncFound = false;
public MiRNA getByName(String name, DbSearchCriteria searchCriteria) { for (MiriamData md : element.getMiriamData()) {
if ("".equals(name)) { if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) {
return null; targetsMiriam.add(md);
} hgncFound = true;
try { } else if (MiriamType.ENTREZ.equals(md.getDataType())) {
List<String> names = new ArrayList<>(); // ad also entrez in case of mouse, rat, etc
names.add(name); targetsMiriam.add(md);
List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names); }
if (miRNAs.size() > 0) {
return miRNAs.get(0); }
} if (!hgncFound) {
return null; MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, element.getName());
// return miRNAViewFactory.create(miRNAs.get(0), try {
// searchCriteria.getModel(), searchCriteria.getColorSet()); if (hgncAnnotator.isValidHgncMiriam(md)) {
} catch (MiRNASearchException e) { targetsMiriam.add(md);
logger.error("Problem with accessing mirna database", e); }
return null; } catch (AnnotatorException e) {
} logger.error("Problem with accessing HGNC database", e);
} }
}
@Override }
public List<MiRNA> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) { }
List<MiRNA> mirnaList = new ArrayList<MiRNA>(); try {
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>(); mirnaList = miRNAParser.getMiRnaListByTargets(targetsMiriam);
for (Element element : targets) { } catch (MiRNASearchException e) {
if (element instanceof Protein || element instanceof Gene || element instanceof Rna) { logger.error("Problem with accessing mirna database", e);
boolean hgncFound = false; }
for (MiriamData md : element.getMiriamData()) {
if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) { for (MiRNA drug : mirnaList) {
targetsMiriam.add(md); removeUnknownOrganisms(drug, searchCriteria.getOrganisms());
hgncFound = true; }
} else if (MiriamType.ENTREZ.equals(md.getDataType())) {
// ad also entrez in case of mouse, rat, etc Collections.sort(mirnaList, new MiRNA.NameComparator());
targetsMiriam.add(md); return mirnaList;
} }
} /**
if (!hgncFound) { * Removes targets for unknown organisms from the mirna.
MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, element.getName()); *
try { * @param drug
if (hgncAnnotator.isValidHgncMiriam(md)) { * drug from which we want to remove targets
targetsMiriam.add(md); * @param organisms
} * organisms that should be kept
} catch (AnnotatorException e) { */
logger.error("Problem with accessing HGNC database", e); private void removeUnknownOrganisms(MiRNA drug, List<MiriamData> organisms) {
} if (organisms.size() > 0) {
} List<Target> toRemove = new ArrayList<Target>();
} for (Target target : drug.getTargets()) {
} boolean remove = true;
try { for (MiriamData organism : organisms) {
mirnaList = miRNAParser.getMiRnaListByTargets(targetsMiriam); if (target.getOrganism() == null) {
} catch (MiRNASearchException e) { remove = false;
logger.error("Problem with accessing mirna database", e); } else if (target.getOrganism().equals(organism)) {
} remove = false;
}
for (MiRNA drug : mirnaList) { }
removeUnknownOrganisms(drug, searchCriteria.getOrganisms()); if (remove) {
} logger.debug("Target " + target.getName() + " removed from list because results are limited to organisms: "
+ organisms);
Collections.sort(mirnaList, new MiRNA.NameComparator()); toRemove.add(target);
return mirnaList; }
} }
drug.getTargets().removeAll(toRemove);
/** }
* Removes targets for unknown organisms from the mirna. }
*
* @param drug @Override
* drug from which we want to remove targets public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) {
* @param organisms logger.debug("Caching mirna queries...");
* organisms that should be kept double progress = 0.0;
*/ iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
private void removeUnknownOrganisms(MiRNA drug, List<MiriamData> organisms) { Set<MiriamData> targetMiriams = new HashSet<>();
if (organisms.size() > 0) { List<Model> models = new ArrayList<>();
List<Target> toRemove = new ArrayList<Target>(); models.add(originalModel);
for (Target target : drug.getTargets()) { models.addAll(originalModel.getSubmodels());
boolean remove = true; for (Model model : models) {
for (MiriamData organism : organisms) { for (BioEntity element : model.getBioEntities()) {
if (target.getOrganism() == null) { for (MiriamData md : element.getMiriamData()) {
remove = false; if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) {
} else if (target.getOrganism().equals(organism)) { targetMiriams.add(md);
remove = false; } else if (MiriamType.ENTREZ.equals(md.getDataType())) {
} targetMiriams.add(md);
} }
if (remove) { }
logger.debug("Target " + target.getName() + " removed from list because results are limited to organisms: " + organisms); }
toRemove.add(target); }
} double counter = 0.0;
} int step = Math.max(targetMiriams.size() / 100, 1);
drug.getTargets().removeAll(toRemove); List<MiriamData> currentList = new ArrayList<>();
} for (MiriamData md : targetMiriams) {
} counter += 1;
currentList.add(md);
@Override if (currentList.size() >= step) {
public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) { logger.debug("check mirna target: " + currentList);
logger.debug("Caching mirna queries..."); try {
double progress = 0.0; List<MiRNA> chemicalList = miRNAParser.getMiRnaListByTargets(currentList);
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS); for (MiRNA chemical : chemicalList) {
Set<MiriamData> targetMiriams = new HashSet<>(); cacheMiriamData(chemical);
List<Model> models = new ArrayList<>(); }
models.add(originalModel); } catch (MiRNASearchException | AnnotatorException e) {
models.addAll(originalModel.getSubmodels()); logger.error("Problem with accessing info about mirna for target: " + md, e);
for (Model model : models) { }
for (BioEntity element : model.getBioEntities()) { progress = counter / (double) targetMiriams.size();
for (MiriamData md : element.getMiriamData()) { iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
if (MiriamType.HGNC_SYMBOL.equals(md.getDataType())) { currentList.clear();
targetMiriams.add(md); }
} else if (MiriamType.ENTREZ.equals(md.getDataType())) { }
targetMiriams.add(md); }
}
}
}
}
double counter = 0.0;
int step = Math.max(targetMiriams.size() / 100, 1);
List<MiriamData> currentList = new ArrayList<>();
for (MiriamData md : targetMiriams) {
counter += 1;
currentList.add(md);
if (currentList.size() >= step) {
logger.debug("check mirna target: " + currentList);
try {
List<MiRNA> chemicalList = miRNAParser.getMiRnaListByTargets(currentList);
for (MiRNA chemical : chemicalList) {
cacheMiriamData(chemical);
}
} catch (MiRNASearchException | AnnotatorException e) {
logger.error("Problem with accessing info about mirna for target: " + md, e);
}
progress = counter / (double) targetMiriams.size();
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
currentList.clear();
}
}
}
} }
...@@ -31,38 +31,6 @@ public class ChemicalServiceTest extends ServiceTestFunctions { ...@@ -31,38 +31,6 @@ public class ChemicalServiceTest extends ServiceTestFunctions {
public void tearDown() throws Exception { public void tearDown() throws Exception {
} }
/**
* @throws Exception
*/
@Test
public void testgetPDChemicalByName() throws Exception {
try {
List<Chemical> result = null;
MiriamData pdDiseaseID = new MiriamData(MiriamType.MESH_2012, "D010300");
List<String> names = new ArrayList<String>();
names.add("Dopamine");
names.add("2-(2-furanyl)-7-(2-(4-(4-(2-methoxyethoxy)phenyl)-1-piperazinyl)ethyl)-7H-pyrazolo(4,3-e)(1,2,4)triazolo(1,5-c)pyrimidine-5-amine");
names.add("Anti-Inflammatory Agents, Non-Steroidal");
names.add("2-furanyl");
names.add(null);
result = chemicalService.getByNames(names, new DbSearchCriteria().disease(pdDiseaseID));
assertNotNull(result);
assertTrue(!result.isEmpty());
assertTrue(result.size() == 3);
names.clear();
names.add("2-furanyl");
result = chemicalService.getByNames(names, new DbSearchCriteria().disease(pdDiseaseID));
assertNotNull(result);
assertTrue(result.isEmpty());
assertEquals("No warnings expected.", 0, getWarnings().size());
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test @Test
public void testgetPDChemicalByName2() throws Exception { public void testgetPDChemicalByName2() throws Exception {
try { try {
......
package lcsb.mapviewer.services.search.db.mirna; package lcsb.mapviewer.services.search.db.mirna;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import lcsb.mapviewer.annotation.data.MiRNA;
import lcsb.mapviewer.common.IProgressUpdater; import lcsb.mapviewer.common.IProgressUpdater;
import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.Model;
import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.model.ModelFullIndexed;
import lcsb.mapviewer.services.ServiceTestFunctions; import lcsb.mapviewer.services.ServiceTestFunctions;
import lcsb.mapviewer.services.search.db.DbSearchCriteria;
public class MiRNAServiceTest extends ServiceTestFunctions { public class MiRNAServiceTest extends ServiceTestFunctions {
Logger logger = Logger.getLogger(MiRNAServiceTest.class); Logger logger = Logger.getLogger(MiRNAServiceTest.class);
@Autowired @Autowired
protected IMiRNAService miRNAService; protected IMiRNAService miRNAService;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
} }
@After @After
public void tearDown() throws Exception { public void tearDown() throws Exception {
} }
@Test @Test
public void testgetMiRNAByID() throws Exception { public void testCacheStub() throws Exception {
try { try {
List<MiRNA> result = null; // CellDesignerXmlParser parser = new CellDesignerXmlParser();
List<String> idStrings = new ArrayList<String>(); // Model model = parser.createModel(new
idStrings.add("hsa-miR-122-5p"); // ConverterParams().filename("testFiles/pd_full/PD_130909.xml"));
idStrings.add("hsa-miR-32-5p"); Model model = new ModelFullIndexed(null);
result = miRNAService.getByNames(idStrings, new DbSearchCriteria()); miRNAService.cacheDataForModel(model, new IProgressUpdater() {
assertNotNull(result); @Override
assertTrue(!result.isEmpty()); public void setProgress(double progress) {
assertTrue(result.size() == 2); logger.debug("Progress: " + progress);
} catch (Exception e) { }
e.printStackTrace(); });
throw e; } catch (Exception e) {
} e.printStackTrace();
} throw e;
}
@Test }
public void testCacheStub() throws Exception {
try {
// CellDesignerXmlParser parser = new CellDesignerXmlParser();
// Model model = parser.createModel(new
// ConverterParams().filename("testFiles/pd_full/PD_130909.xml"));
Model model = new ModelFullIndexed(null);
miRNAService.cacheDataForModel(model, new IProgressUpdater() {
@Override
public void setProgress(double progress) {
logger.debug("Progress: " + progress);
}
});
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment