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;
*/
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.
*
......
......@@ -31,8 +31,6 @@ import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.model.map.species.Gene;
import lcsb.mapviewer.model.map.species.Protein;
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.DbSearchService;
......@@ -45,272 +43,252 @@ import lcsb.mapviewer.services.search.db.DbSearchService;
@Transactional(value = "txManager")
public class ChemicalService extends DbSearchService implements IChemicalService {
/**
* Default class logger.
*/
private Logger logger = Logger.getLogger(ChemicalService.class);
/**
* Default class logger.
*/
private Logger logger = Logger.getLogger(ChemicalService.class);
/**
* List of chemicals pairs of id and name.
*/
private Map<MiriamData, Map<MiriamData, String>> diseases = new HashMap<>();
/**
* List of chemicals pairs of id and name.
*/
private Map<MiriamData, Map<MiriamData, String>> diseases = new HashMap<>();
/**
* Access point and parser for the online ctd database.
*/
@Autowired
private ChemicalParser chemicalParser;
/**
* Access point and parser for the online ctd database.
*/
@Autowired
private ChemicalParser chemicalParser;
/**
* Object used to perform operations on {@link MiriamType#HGNC} annotations.
*/
@Autowired
private HgncAnnotator hgncAnnotator;
/**
* Object used to perform operations on {@link MiriamType#HGNC} annotations.
*/
@Autowired
private HgncAnnotator hgncAnnotator;
/**
* Service that manages search history.
*/
@Autowired
private ISearchHistoryService searchHistoryService;
/**
* Default constructor.
*/
public ChemicalService() {
super();
}
/**
* Default constructor.
*/
public ChemicalService() {
super();
}
/**
* Returns list of {@link Chemical chemicals} for a given disease and list of
* names.
*
* @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
public List<Chemical> getByNames(List<String> names, DbSearchCriteria criteria) {
if (names == null) {
return null;
}
// Create a map with the each search string and chemical id.
// Remove empty string and special characters.
Map<String, MiriamData> searchNamesMap = new LinkedHashMap<String, MiriamData>();
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) {
searchHistoryService.addQuery(names.toString(), SearchType.CHEMICAL, criteria.getIpAddress(), criteria.getModel().getProject().getProjectId());
}
// Search id, name Map for matching records
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;
}
}
}
/**
* Returns list of {@link Chemical chemicals} for a given disease and list of
* names.
*
* @param diseaseID
* {@link MiriamData} identifing 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));
// 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);
// Create a map with the each search string and chemical id.
// Remove empty string and special characters.
Map<String, MiriamData> searchNamesMap = new LinkedHashMap<String, MiriamData>();
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 the result is not empty and we found chemicals, try to sort as
// by the initial list provided.
Map<MiriamData, Chemical> resultAsMap = new HashMap<MiriamData, Chemical>();
if (result != null && !result.isEmpty()) {
for (Chemical chemo : result) {
resultAsMap.put(chemo.getChemicalId(), chemo);
}
// Search id, name Map for matching records
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++;
for (Map.Entry<String, MiriamData> nameEntry : searchNamesMap.entrySet()) {
if (nameEntry.getValue() != null) {
sortedResult.add(resultAsMap.get(nameEntry.getValue()));
}
}
}
}
}
}
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
// by the initial list provided.
Map<MiriamData, Chemical> resultAsMap = new HashMap<MiriamData, Chemical>();
if (result != null && !result.isEmpty()) {
for (Chemical chemo : result) {
resultAsMap.put(chemo.getChemicalId(), chemo);
}
@Override
public List<Chemical> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
List<Chemical> chemicalList = new ArrayList<>();
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
for (Element alias : targets) {
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) {
sortedResult.add(resultAsMap.get(nameEntry.getValue()));
}
}
}
}
}
if (!hgncFound) {
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;
} catch (ChemicalSearchException e) {
logger.error("Problem with accessing database", e);
return new ArrayList<Chemical>();
}
}
Collections.sort(chemicalList, new Chemical.NameComparator());
return chemicalList;
}
@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);
}
/**
* @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 List<Chemical> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
List<Chemical> chemicalList = new ArrayList<>();
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
for (Element alias : targets) {
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);
}
}
if (!hgncFound) {
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);
}
Collections.sort(chemicalList, new Chemical.NameComparator());
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...");
}
}
@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 {
@Autowired
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
* drug from which we want to remove targets
......
......@@ -28,13 +28,11 @@ import lcsb.mapviewer.model.map.species.Element;
import lcsb.mapviewer.model.map.species.Gene;
import lcsb.mapviewer.model.map.species.Protein;
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.DbSearchService;
/**
* Implementation of the service that allows access information about che.
* Implementation of the service that allows access information about miRNAs.
*
* @author Ayan Rota
*
......@@ -42,199 +40,173 @@ import lcsb.mapviewer.services.search.db.DbSearchService;
@Transactional(value = "txManager")
public class MiRNAService extends DbSearchService implements IMiRNAService {
/**
* Default class logger.
*/
private Logger logger = Logger.getLogger(MiRNAService.class);
/**
* Access point and parser for the online ctd database.
*/
@Autowired
private MiRNAParser miRNAParser;
/**
* Object used to get information about {@link MiriamType#HGNC} annotations
* and transformations.
*/
@Autowired
private HgncAnnotator hgncAnnotator;
/**
* Service that manages search history.
*/
@Autowired
private ISearchHistoryService searchHistoryService;
/**
* Default constructor.
*/
public MiRNAService() {
super();
}
/**
* Init method called after intialization of spring bean.
*/
@PostConstruct
public void init() {
}
@Override
public List<MiRNA> getByNames(List<String> names, DbSearchCriteria criteria) {
if (names == null) {
return null;
}
if (criteria.getIpAddress() != null && criteria.getModel() != null) {
searchHistoryService.addQuery(names.toString(), SearchType.MI_RNA, criteria.getIpAddress(), criteria.getModel().getProject().getProjectId());
}
List<MiRNA> views = new ArrayList<>();
try {
List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names);
for (MiRNA miRNA : miRNAs) {
views.add(miRNA);
}
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e);
}
return views;
}
@Override
public MiRNA getByName(String name, DbSearchCriteria searchCriteria) {
if ("".equals(name)) {
return null;
}
try {
List<String> names = new ArrayList<>();
names.add(name);
List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names);
if (miRNAs.size() > 0) {
return miRNAs.get(0);
}
return null;
// return miRNAViewFactory.create(miRNAs.get(0),
// searchCriteria.getModel(), searchCriteria.getColorSet());
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e);
return null;
}
}
@Override
public List<MiRNA> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
List<MiRNA> mirnaList = new ArrayList<MiRNA>();
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
for (Element element : targets) {
if (element instanceof Protein || element instanceof Gene || element instanceof Rna) {
boolean hgncFound = false;
for (MiriamData md : element.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);
}
}
if (!hgncFound) {
MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, element.getName());
try {
if (hgncAnnotator.isValidHgncMiriam(md)) {
targetsMiriam.add(md);
}
} catch (AnnotatorException e) {
logger.error("Problem with accessing HGNC database", e);
}
}
}
}
try {
mirnaList = miRNAParser.getMiRnaListByTargets(targetsMiriam);
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e);
}
for (MiRNA drug : mirnaList) {
removeUnknownOrganisms(drug, searchCriteria.getOrganisms());
}
Collections.sort(mirnaList, new MiRNA.NameComparator());
return mirnaList;
}
/**
* Removes targets for unknown organisms from the mirna.
*
* @param drug
* drug from which we want to remove targets
* @param organisms
* organisms that should be kept
*/
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;
for (MiriamData organism : organisms) {
if (target.getOrganism() == null) {
remove = false;
} else if (target.getOrganism().equals(organism)) {
remove = false;
}
}
if (remove) {
logger.debug("Target " + target.getName() + " removed from list because results are limited to organisms: " + organisms);
toRemove.add(target);
}
}
drug.getTargets().removeAll(toRemove);
}
}
@Override
public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) {
logger.debug("Caching mirna queries...");
double progress = 0.0;
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
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;
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();
}
}
}
/**
* Default class logger.
*/
private Logger logger = Logger.getLogger(MiRNAService.class);
/**
* Access point and parser for the online ctd database.
*/
@Autowired
private MiRNAParser miRNAParser;
/**
* Object used to get information about {@link MiriamType#HGNC} annotations and
* transformations.
*/
@Autowired
private HgncAnnotator hgncAnnotator;
/**
* Default constructor.
*/
public MiRNAService() {
super();
}
/**
* Init method called after initialization of spring bean.
*/
@PostConstruct
public void init() {
}
@Override
public MiRNA getByName(String name, DbSearchCriteria searchCriteria) {
if ("".equals(name)) {
return null;
}
try {
List<String> names = new ArrayList<>();
names.add(name);
List<MiRNA> miRNAs = miRNAParser.getMiRnasByNames(names);
if (miRNAs.size() > 0) {
return miRNAs.get(0);
}
return null;
// return miRNAViewFactory.create(miRNAs.get(0),
// searchCriteria.getModel(), searchCriteria.getColorSet());
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e);
return null;
}
}
@Override
public List<MiRNA> getForTargets(Collection<Element> targets, DbSearchCriteria searchCriteria) {
List<MiRNA> mirnaList = new ArrayList<MiRNA>();
Set<MiriamData> targetsMiriam = new HashSet<MiriamData>();
for (Element element : targets) {
if (element instanceof Protein || element instanceof Gene || element instanceof Rna) {
boolean hgncFound = false;
for (MiriamData md : element.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);
}
}
if (!hgncFound) {
MiriamData md = new MiriamData(MiriamType.HGNC_SYMBOL, element.getName());
try {
if (hgncAnnotator.isValidHgncMiriam(md)) {
targetsMiriam.add(md);
}
} catch (AnnotatorException e) {
logger.error("Problem with accessing HGNC database", e);
}
}
}
}
try {
mirnaList = miRNAParser.getMiRnaListByTargets(targetsMiriam);
} catch (MiRNASearchException e) {
logger.error("Problem with accessing mirna database", e);
}
for (MiRNA drug : mirnaList) {
removeUnknownOrganisms(drug, searchCriteria.getOrganisms());
}
Collections.sort(mirnaList, new MiRNA.NameComparator());
return mirnaList;
}
/**
* Removes targets for unknown organisms from the mirna.
*
* @param drug
* drug from which we want to remove targets
* @param organisms
* organisms that should be kept
*/
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;
for (MiriamData organism : organisms) {
if (target.getOrganism() == null) {
remove = false;
} else if (target.getOrganism().equals(organism)) {
remove = false;
}
}
if (remove) {
logger.debug("Target " + target.getName() + " removed from list because results are limited to organisms: "
+ organisms);
toRemove.add(target);
}
}
drug.getTargets().removeAll(toRemove);
}
}
@Override
public void cacheDataForModel(Model originalModel, IProgressUpdater iProgressUpdater) {
logger.debug("Caching mirna queries...");
double progress = 0.0;
iProgressUpdater.setProgress(progress * IProgressUpdater.MAX_PROGRESS);
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;
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 {
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
public void testgetPDChemicalByName2() throws Exception {
try {
......
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.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import lcsb.mapviewer.annotation.data.MiRNA;
import lcsb.mapviewer.common.IProgressUpdater;
import lcsb.mapviewer.model.map.model.Model;
import lcsb.mapviewer.model.map.model.ModelFullIndexed;
import lcsb.mapviewer.services.ServiceTestFunctions;
import lcsb.mapviewer.services.search.db.DbSearchCriteria;
public class MiRNAServiceTest extends ServiceTestFunctions {
Logger logger = Logger.getLogger(MiRNAServiceTest.class);
@Autowired
protected IMiRNAService miRNAService;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testgetMiRNAByID() throws Exception {
try {
List<MiRNA> result = null;
List<String> idStrings = new ArrayList<String>();
idStrings.add("hsa-miR-122-5p");
idStrings.add("hsa-miR-32-5p");
result = miRNAService.getByNames(idStrings, new DbSearchCriteria());
assertNotNull(result);
assertTrue(!result.isEmpty());
assertTrue(result.size() == 2);
} 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;
}
}
Logger logger = Logger.getLogger(MiRNAServiceTest.class);
@Autowired
protected IMiRNAService miRNAService;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@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