@Override
public QueryResult<ClinicalAnalysis> create(String studyStr, ClinicalAnalysis clinicalAnalysis, QueryOptions options,
String sessionId) throws CatalogException {
String userId = catalogManager.getUserManager().getUserId(sessionId);
Study study = catalogManager.getStudyManager().resolveId(studyStr, userId);
authorizationManager.checkStudyPermission(study.getUid(), userId, StudyAclEntry.StudyPermissions.WRITE_CLINICAL_ANALYSIS);
options = ParamUtils.defaultObject(options, QueryOptions::new);
ParamUtils.checkObj(clinicalAnalysis, "clinicalAnalysis");
ParamUtils.checkAlias(clinicalAnalysis.getId(), "id");
ParamUtils.checkObj(clinicalAnalysis.getType(), "type");
ParamUtils.checkObj(clinicalAnalysis.getDueDate(), "dueDate");
if (TimeUtils.toDate(clinicalAnalysis.getDueDate()) == null) {
throw new CatalogException("Unrecognised due date. Accepted format is: yyyyMMddHHmmss");
}
clinicalAnalysis.setProband(getFullValidatedMember(clinicalAnalysis.getProband(), study, sessionId));
clinicalAnalysis.setFamily(getFullValidatedFamily(clinicalAnalysis.getFamily(), study, sessionId));
validateClinicalAnalysisFields(clinicalAnalysis, study, sessionId);
clinicalAnalysis.setCreationDate(TimeUtils.getTime());
clinicalAnalysis.setDescription(ParamUtils.defaultString(clinicalAnalysis.getDescription(), ""));
clinicalAnalysis.setStatus(new ClinicalAnalysis.ClinicalStatus());
clinicalAnalysis.setRelease(catalogManager.getStudyManager().getCurrentRelease(study, userId));
clinicalAnalysis.setAttributes(ParamUtils.defaultObject(clinicalAnalysis.getAttributes(), Collections.emptyMap()));
clinicalAnalysis.setInterpretations(ParamUtils.defaultObject(clinicalAnalysis.getInterpretations(), ArrayList::new));
clinicalAnalysis.setPriority(ParamUtils.defaultObject(clinicalAnalysis.getPriority(), ClinicalAnalysis.Priority.MEDIUM));
clinicalAnalysis.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.CLINICAL));
QueryResult<ClinicalAnalysis> queryResult = clinicalDBAdaptor.insert(study.getUid(), clinicalAnalysis, options);
return queryResult;
}