diff --git a/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAService.java b/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAService.java index c79e10ca98485ea4f4c3235362e35aaf5f11ccc1..9d2b1b10da174fd0ba697412b377746105025eae 100644 --- a/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAService.java +++ b/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAService.java @@ -15,8 +15,11 @@ import org.springframework.transaction.annotation.Transactional; import lcsb.mapviewer.annotation.data.MiRNA; import lcsb.mapviewer.annotation.data.Target; +import lcsb.mapviewer.annotation.data.TargettingStructure; import lcsb.mapviewer.annotation.services.MiRNAParser; import lcsb.mapviewer.annotation.services.MiRNASearchException; +import lcsb.mapviewer.annotation.services.PubmedParser; +import lcsb.mapviewer.annotation.services.PubmedSearchException; import lcsb.mapviewer.annotation.services.annotators.AnnotatorException; import lcsb.mapviewer.annotation.services.annotators.HgncAnnotator; import lcsb.mapviewer.common.IProgressUpdater; @@ -60,16 +63,17 @@ public class MiRNAService implements IMiRNAService { private HgncAnnotator hgncAnnotator; /** - * Factory object used for creation of {@link MiRNAView} elements. + * Service that manages search history. */ @Autowired - private MiRNAViewFactory miRNAViewFactory; + private ISearchHistoryService searchHistoryService; /** - * Service that manages search history. + * Service accessing + * <a href="http://europepmc.org/RestfulWebService">pubmed</a>. */ @Autowired - private ISearchHistoryService searchHistoryService; + private PubmedParser pubmedParser; /** * Default constructor. @@ -162,7 +166,7 @@ public class MiRNAService implements IMiRNAService { for (MiRNA drug : mirnaList) { removeUnknownOrganisms(drug, searchCriteria.getOrganisms()); } - + Collections.sort(mirnaList, new MiRNAView.NameComparator()); return mirnaList; } @@ -227,9 +231,9 @@ public class MiRNAService implements IMiRNAService { try { List<MiRNA> chemicalList = miRNAParser.getMiRnaListByTargets(currentList); for (MiRNA chemical : chemicalList) { - miRNAViewFactory.create(chemical); + cacheMiriamData(chemical); } - } catch (MiRNASearchException e) { + } catch (MiRNASearchException | AnnotatorException e) { logger.error("Problem with accessing info about mirna for target: " + md, e); } progress = counter / (double) targetMiriams.size(); @@ -239,4 +243,25 @@ public class MiRNAService implements IMiRNAService { } } + private void cacheMiriamData(TargettingStructure targettingStructure) throws AnnotatorException { + Set<MiriamData> result = new HashSet<>(); + result.addAll(targettingStructure.getSources()); + for (Target target : targettingStructure.getTargets()) { + result.addAll(target.getGenes()); + result.addAll(target.getReferences()); + + } + + for (MiriamData miriamData : result) { + if (miriamData.getDataType().equals(MiriamType.PUBMED)) { + try { + pubmedParser.getPubmedArticleById(Integer.valueOf(miriamData.getResource())); + } catch (NumberFormatException | PubmedSearchException e) { + throw new AnnotatorException(e); + } + } + } + + } + } diff --git a/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAViewFactory.java b/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAViewFactory.java deleted file mode 100644 index 235a3a68240f5404e7e4d8f676ae9769065e2d24..0000000000000000000000000000000000000000 --- a/service/src/main/java/lcsb/mapviewer/services/search/db/mirna/MiRNAViewFactory.java +++ /dev/null @@ -1,116 +0,0 @@ -package lcsb.mapviewer.services.search.db.mirna; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.log4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; - -import com.google.gson.Gson; - -import lcsb.mapviewer.annotation.data.MiRNA; -import lcsb.mapviewer.annotation.data.Target; -import lcsb.mapviewer.model.map.model.Model; -import lcsb.mapviewer.model.map.species.Element; -import lcsb.mapviewer.services.overlay.IconManager; -import lcsb.mapviewer.services.overlay.IconType; -import lcsb.mapviewer.services.search.SearchResultFactory; -import lcsb.mapviewer.services.search.data.ElementIdentifier; -import lcsb.mapviewer.services.search.db.DrugTargetViewVisibilityComparator; -import lcsb.mapviewer.services.search.db.TargetView; -import lcsb.mapviewer.services.search.db.TargetViewFactory; - -/** - * Factory class for {@link MiRNAView} class. - * - * @author Ayan Rota - * - */ -public class MiRNAViewFactory extends SearchResultFactory<MiRNA, MiRNAView> { - - /** - * Default class logger. - */ - @SuppressWarnings("unused") - private static Logger logger = Logger.getLogger(MiRNAViewFactory.class); - - /** - * Factory object for {@link TargetView} elements. - */ - @Autowired - private TargetViewFactory drugTargetViewFactory; - - @Override - public MiRNAView create(MiRNA miRNA) { - return create(miRNA, null, 0); - } - - /** - * Creates {@link MiRNAView}. - * - * @param miRNA - * original MiRNA from which the data will be initialized - * @param model - * model where the view will be presented - * @param set - * which set of icons should be used - * - * @return {@link MiRNAView} object for given miRNA. links are placed - * according to model given in the parameter. - */ - public MiRNAView create(MiRNA miRNA, Model model, int set) { - MiRNAView miRNAView = new MiRNAView(miRNA); - if (miRNA == null) { - return miRNAView; - } - - miRNAView.setName(miRNA.getName()); - - List<TargetView> targetsRows = new ArrayList<>(); - int differentNames = 0; - for (Target geneEntry : miRNA.getTargets()) { - targetsRows.add(drugTargetViewFactory.create(geneEntry, model)); - } - - Collections.sort(targetsRows, new DrugTargetViewVisibilityComparator()); - - for (TargetView geneTargetView : targetsRows) { - if (geneTargetView.getSelectable()) { - String icon = IconManager.getInstance().getIconForIndex(differentNames++, IconType.MI_RNA, set); - geneTargetView.setIcon(icon); - geneTargetView.setSelected(true); - } - } - miRNAView.setTargetRows(targetsRows); - return miRNAView; - - } - - @Override - public String createGson(MiRNAView object) { - return new Gson().toJson(object); - } - - @Override - public List<ElementIdentifier> searchResultToElementIdentifier(MiRNAView searchResult, Model inputModel) { - List<ElementIdentifier> result = new ArrayList<>(); - - List<Model> models = new ArrayList<>(); - models.addAll(inputModel.getSubmodels()); - models.add(inputModel); - for (Model model : models) { - for (TargetView target : searchResult.getTargetRows()) { - if (target.getSelected() && target.getIcon() != null) { - for (Element element : model.getElements()) { - if (elementMatch(target, element)) { - result.add(new ElementIdentifier(element, target.getIcon())); - } - } - } - } - } - return result; - } - -} diff --git a/service/src/main/resources/applicationContext-service.xml b/service/src/main/resources/applicationContext-service.xml index bf0ea8495fbd544392a02ebf4b2f31d0f60ce1b1..c40be7af7591eb74805a56c5775174aa273d0535 100644 --- a/service/src/main/resources/applicationContext-service.xml +++ b/service/src/main/resources/applicationContext-service.xml @@ -68,7 +68,6 @@ <bean id="FullReactionViewFactory" class="lcsb.mapviewer.services.search.data.FullReactionViewFactory"/> <bean id="LightAliasViewFactory" class="lcsb.mapviewer.services.search.data.LightAliasViewFactory"/> - <bean id="MiRNAViewFactory" class="lcsb.mapviewer.services.search.db.mirna.MiRNAViewFactory"/> <bean id="TargetViewFactory" class="lcsb.mapviewer.services.search.db.TargetViewFactory"/> <bean id="ElementMatcher" class="lcsb.mapviewer.services.search.ElementMatcher"/>