/** * Saves data for provided {@code feature}, and returns its value. * * @param doc the {@link XWikiDocument} object for the patient * @param feature the {@link Feature} of interest * @param context the {@link XWikiContext} * @return the {@code feature} value */ private String saveFeatureAndGetValue( @Nonnull final XWikiDocument doc, @Nonnull final Feature feature, @Nonnull final XWikiContext context) { try { updateMetaData(doc, feature, context); updateCategories(doc, feature, context); } catch (final Exception e) { this.logger.error("Failed to update phenotypes: [{}]", e.getMessage()); } return feature.getValue(); }
/** * Converts and adds {@code features} to sets of present {@code retrievedPresentTerms terms} and absent * {@code retrievedAbsentTerms terms}. * * @param features a collection of {@link Feature} objects * @param retrievedPresentTerms a set of present {@link VocabularyTerm} objects * @param retrievedAbsentTerms a set of absent {@link VocabularyTerm} objects */ private void addTermsFromFeatures( @Nonnull final Collection<? extends Feature> features, @Nonnull final Set<VocabularyTerm> retrievedPresentTerms, @Nonnull final Set<VocabularyTerm> retrievedAbsentTerms) { for (final Feature feature : features) { final VocabularyTerm term = this.vocabularyManager.resolveTerm(feature.getValue()); if (term != null) { if (feature.isPresent()) { retrievedPresentTerms.add(term); } else { retrievedAbsentTerms.add(term); } } } } }
/** * Updates categories for a {@code feature}. * * @param doc the {@link XWikiDocument} object for the patient * @param feature the {@link Feature} of interest * @param context the {@link XWikiContext} * @throws XWikiException if categories cannot be updated */ private void updateCategories( @Nonnull final XWikiDocument doc, @Nonnull final Feature feature, @Nonnull final XWikiContext context) throws XWikiException { final List<String> categories = feature.getCategories(); if (!categories.isEmpty()) { final BaseObject categoriesObject = doc.newXObject(PhenoTipsFeature.CATEGORY_CLASS_REFERENCE, context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_NAME, feature.getPropertyName(), context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_VALUE, feature.getValue(), context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_CATEGORIES, categories, context); } } }
private void updateCategories(PatientData<Feature> features, XWikiDocument doc, XWikiContext context) throws XWikiException { doc.removeXObjects(PhenoTipsFeature.CATEGORY_CLASS_REFERENCE); Iterator<Feature> iterator = features.iterator(); while (iterator.hasNext()) { Feature feature = iterator.next(); List<String> categories = feature.getCategories(); if (categories.isEmpty()) { continue; } BaseObject categoriesObject = doc.newXObject(PhenoTipsFeature.CATEGORY_CLASS_REFERENCE, context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_NAME, feature.getPropertyName(), context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_VALUE, feature.getValue(), context); categoriesObject.set(PhenoTipsFeature.META_PROPERTY_CATEGORIES, categories, context); } }
/** * Updates metadata for a {@code feature}. * * @param doc the {@link XWikiDocument} object for the patient * @param feature the {@link Feature} of interest * @param context the {@link XWikiContext} * @throws XWikiException if meta data cannot be updated */ private void updateMetaData( @Nonnull final XWikiDocument doc, @Nonnull final Feature feature, @Nonnull final XWikiContext context) throws XWikiException { @SuppressWarnings("unchecked") final Map<String, FeatureMetadatum> metadata = (Map<String, FeatureMetadatum>) feature.getMetadata(); if (!metadata.isEmpty() || !feature.getNotes().isEmpty()) { final BaseObject metaObject = doc.newXObject(FeatureMetadatum.CLASS_REFERENCE, context); metaObject.set(PhenoTipsFeature.META_PROPERTY_NAME, feature.getPropertyName(), context); metaObject.set(PhenoTipsFeature.META_PROPERTY_VALUE, feature.getValue(), context); metadata.forEach((type, metadatum) -> metaObject.set(type, metadatum.getId(), context)); metaObject.set("comments", feature.getNotes(), context); } }
private void updateMetaData(PatientData<Feature> features, XWikiDocument doc, XWikiContext context) throws XWikiException { doc.removeXObjects(FeatureMetadatum.CLASS_REFERENCE); Iterator<Feature> iterator = features.iterator(); while (iterator.hasNext()) { Feature feature = iterator.next(); @SuppressWarnings("unchecked") Map<String, FeatureMetadatum> metadataMap = (Map<String, FeatureMetadatum>) feature.getMetadata(); if (metadataMap.isEmpty() && feature.getNotes().isEmpty()) { continue; } BaseObject metaObject = doc.newXObject(FeatureMetadatum.CLASS_REFERENCE, context); metaObject.set(PhenoTipsFeature.META_PROPERTY_NAME, feature.getPropertyName(), context); metaObject.set(PhenoTipsFeature.META_PROPERTY_VALUE, feature.getValue(), context); for (String type : metadataMap.keySet()) { PhenoTipsFeatureMetadatum metadatum = (PhenoTipsFeatureMetadatum) metadataMap.get(type); metaObject.set(type, metadatum.getId(), context); } metaObject.set("comments", feature.getNotes(), context); } }