protected String getPatientURL(Patient patient, XWikiContext context) { try { XWikiDocument doc = patient.getXDocument(); String url = doc.getURL("view", context); return url; } catch (Exception ex) { this.logger.error("Failed to get patient URL: [{}] {}", ex.getMessage(), ex); return null; } }
@Override public boolean isLocked(Patient patient) { return isDocumentLocked(patient.getXDocument()); }
protected String getPatientGUID(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); String guid = doc.getXObject(Patient.CLASS_REFERENCE).getGuid(); return guid; } catch (Exception ex) { this.logger.error("Failed to get patient GUID: [{}] {}", ex.getMessage(), ex); return null; } }
private SaveablePatientConsentHolder getPatientConsentHolder(Patient patient) throws Exception { XWikiDocument patientDoc = patient.getXDocument(); return new SaveablePatientConsentHolder(getXWikiConsentHolder(patientDoc), patientDoc, this.contextProvider.get()); }
private SaveablePatientConsentHolder getPatientConsentHolder(Patient patient) throws Exception { XWikiDocument patientDoc = patient.getXDocument(); return new SaveablePatientConsentHolder(getXWikiConsentHolder(patientDoc), patientDoc, this.contextProvider.get()); }
@Override public PatientData<String> load(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); BaseObject data = doc.getXObject(Patient.CLASS_REFERENCE); if (data == null) { return null; } Map<String, String> result = new LinkedHashMap<>(); result.put(EXTERNAL_IDENTIFIER_PROPERTY_NAME, data.getStringValue(EXTERNAL_IDENTIFIER_PROPERTY_NAME)); return new DictionaryPatientData<>(DATA_NAME, result); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return null; }
@SuppressWarnings("unchecked") private Set<String> readConsentIdsFromPatientDoc(Patient patient) { Set<String> ids = new LinkedHashSet<>(); try { XWikiDocument patientDoc = patient.getXDocument(); BaseObject idsHolder = patientDoc.getXObject(this.consentIdsHolderReference); if (idsHolder != null) { List<String> patientConsentIds = idsHolder.getListValue(GRANTED); if (patientConsentIds != null) { ids.addAll(patientConsentIds); } } } catch (Exception ex) { this.logger.error("Could not read consents for patient {}: {}", patient.getId(), ex.getMessage()); } return ids; }
@SuppressWarnings("unchecked") private Set<String> readConsentIdsFromPatientDoc(Patient patient) { Set<String> ids = new LinkedHashSet<>(); try { XWikiDocument patientDoc = patient.getXDocument(); BaseObject idsHolder = patientDoc.getXObject(this.consentIdsHolderReference); if (idsHolder != null) { List<String> patientConsentIds = idsHolder.getListValue(GRANTED); if (patientConsentIds != null) { ids.addAll(patientConsentIds); } } } catch (Exception ex) { this.logger.error("Could not read consents for patient {}: {}", patient.getId(), ex.getMessage()); } return ids; }
@Override public PatientData<Pair<String, String>> load(final Patient patient) { try { final XWikiDocument doc = patient.getXDocument(); final List<BaseObject> eidXWikiObjects = doc.getXObjects(IDENTIFIER_CLASS_REFERENCE); if (CollectionUtils.isEmpty(eidXWikiObjects)) { return null; } // Get data for all identifiers. final List<Pair<String, String>> allIdentifiers = toIdentifiers(eidXWikiObjects); // Return as a patient data class, or null if no identifiers are recorded. return allIdentifiers.isEmpty() ? null : new IndexedPatientData<>(CONTROLLER_NAME, allIdentifiers); } catch (Exception e) { this.logger.error("Could not find requested document or some unforeseen " + "error has occurred during controller loading ", e.getMessage()); } return null; }
@Override public PatientData<String> load(Patient patient) { Map<String, String> versions = new LinkedHashMap<>(); try { XWikiDocument doc = patient.getXDocument(); addOntologyVersions(doc, versions); addPhenoTipsVersion(versions); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return new DictionaryPatientData<>(getName(), versions); }
@Override public PatientData<String> load(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); BaseObject data = doc.getXObject(Patient.CLASS_REFERENCE); if (data == null) { return null; } String lifeStatus = data.getStringValue(DATA_NAME); return new SimpleValuePatientData<>(DATA_NAME, lifeStatus); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return null; }
@Override public PatientData<String> load(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); Map<String, String> result = new LinkedHashMap<>(); DateTimeFormatter dateFormatter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.UTC); result.put(DOCUMENT_NAME, doc.getDocumentReference().getName()); result.put(CREATION_DATE, dateFormatter.print(new DateTime(doc.getCreationDate()))); result.put(AUTHOR, (doc.getAuthorReference() != null) ? doc.getAuthorReference().getName() : UNKNOWN_USER); result.put(DATE, dateFormatter.print(new DateTime(doc.getDate()))); return new DictionaryPatientData<>(getName(), result); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return null; }
@Override public void save(@Nonnull final Patient patient, @Nonnull final PatientWritePolicy policy) { try { final XWikiDocument docX = patient.getXDocument(); final PatientData<Gene> genes = patient.getData(getName()); if (genes == null) { if (PatientWritePolicy.REPLACE.equals(policy)) { docX.removeXObjects(Gene.GENE_CLASS); } } else if (!genes.isIndexed()) { this.logger.info("Wrong data type for gene data"); } else { saveGenes(docX, patient, genes, policy, this.xcontextProvider.get()); } } catch (final Exception ex) { this.logger.error("Failed to save genes data: {}", ex.getMessage(), ex); } }
@Override public PatientData<String> load(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); BaseObject data = doc.getXObject(Patient.CLASS_REFERENCE); if (data == null) { return null; } String gender = parseGender(data.getStringValue(INTERNAL_PROPERTY_NAME)); return new SimpleValuePatientData<>(DATA_NAME, gender); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return null; }
@Override public void save(@Nonnull final Patient patient, @Nonnull final PatientWritePolicy policy) { try { final XWikiDocument docX = patient.getXDocument(); final PatientData<Attachment> images = patient.getData(getName()); if (images == null) { if (PatientWritePolicy.REPLACE.equals(policy)) { docX.removeXObjects(CLASS_REFERENCE); } } else { if (!images.isIndexed()) { this.logger.error(ERROR_MESSAGE_DATA_IN_MEMORY_IN_WRONG_FORMAT); return; } saveAttachments(docX, patient, images, policy, this.contextProvider.get()); } } catch (final Exception ex) { this.logger.error("Failed to save attachment: {}", ex.getMessage(), ex); } }
@Override public void save(@Nonnull final Patient patient, @Nonnull final PatientWritePolicy policy) { try { final BaseObject dataHolder = patient.getXDocument().getXObject(Patient.CLASS_REFERENCE, true, this.xcontext.get()); final PatientData<String> data = patient.getData(DATA_NAME); if (data == null) { if (PatientWritePolicy.REPLACE.equals(policy)) { dataHolder.setStringValue(INTERNAL_PROPERTY_NAME, SEX_UNKNOWN); } } else { // gender should be one of the accepted values, as per readJSON(). dataHolder.setStringValue(INTERNAL_PROPERTY_NAME, data.getValue()); } } catch (final Exception ex) { this.logger.error("Failed to save sex data: {}", ex.getMessage(), ex); } }
@Override public void save(@Nonnull final Patient patient, @Nonnull final PatientWritePolicy policy) { try { final BaseObject dataHolder = patient.getXDocument().getXObject(Patient.CLASS_REFERENCE, true, this.xcontext.get()); final PatientData<String> lifeStatus = patient.getData(DATA_NAME); if (lifeStatus == null) { if (PatientWritePolicy.REPLACE.equals(policy)) { // Set to a default value. dataHolder.setStringValue(DATA_NAME, ALIVE); } } else { dataHolder.setStringValue(DATA_NAME, lifeStatus.getValue()); } } catch (final Exception ex) { this.logger.error("Failed to save life status data: {}", ex.getMessage(), ex); } }
@Override public PatientData<String> load(Patient patient) { try { XWikiDocument doc = patient.getXDocument(); BaseObject data = doc.getXObject(getStorageXClass()); if (data == null) { return null; } Map<String, String> result = new LinkedHashMap<>(); for (String propertyName : getProperties()) { String value = data.getStringValue(propertyName); result.put(propertyName, value); } return new DictionaryPatientData<>(getName(), result); } catch (Exception e) { this.logger.error(ERROR_MESSAGE_LOAD_FAILED, e.getMessage()); } return null; }
@Override public boolean unlockPatientRecord(Patient patient) { try { XWikiDocument patientDocument = patient.getXDocument(); if (this.isDocumentLocked(patientDocument) && this.hasLockingPermission(patient)) { XWikiContext context = this.contextProvider.get(); XWiki xwiki = context.getWiki(); patientDocument.removeXObjects(this.lockClassReference); xwiki.saveDocument(patientDocument, "Unlocked patient record", true, context); return true; } else { return false; } } catch (XWikiException | NullPointerException e) { return false; } }
@Override public boolean lockPatientRecord(Patient patient) { try { XWikiDocument patientDocument = patient.getXDocument(); if (!this.isDocumentLocked(patientDocument) && this.hasLockingPermission(patient)) { XWikiContext context = this.contextProvider.get(); XWiki xwiki = context.getWiki(); patientDocument.createXObject(this.lockClassReference, context); xwiki.saveDocument(patientDocument, "Locked patient record", true, context); return true; } else { return false; } } catch (XWikiException | NullPointerException e) { return false; } }