public QueryResult<Family> create(String studyStr, Family family, 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_FAMILIES);
ParamUtils.checkObj(family, "family");
ParamUtils.checkAlias(family.getId(), "id");
family.setName(ParamUtils.defaultObject(family.getName(), family.getId()));
family.setMembers(ParamUtils.defaultObject(family.getMembers(), Collections.emptyList()));
family.setPhenotypes(ParamUtils.defaultObject(family.getPhenotypes(), Collections.emptyList()));
family.setDisorders(ParamUtils.defaultObject(family.getDisorders(), Collections.emptyList()));
family.setCreationDate(TimeUtils.getTime());
family.setDescription(ParamUtils.defaultString(family.getDescription(), ""));
family.setStatus(new Family.FamilyStatus());
family.setAnnotationSets(ParamUtils.defaultObject(family.getAnnotationSets(), Collections.emptyList()));
family.setRelease(catalogManager.getStudyManager().getCurrentRelease(study, userId));
family.setVersion(1);
family.setAttributes(ParamUtils.defaultObject(family.getAttributes(), Collections.emptyMap()));
List<VariableSet> variableSetList = validateNewAnnotationSetsAndExtractVariableSets(study.getUid(), family.getAnnotationSets());
autoCompleteFamilyMembers(family, study, sessionId);
validateFamily(family);
validateMultiples(family);
validatePhenotypes(family);
validateDisorders(family);
createMissingMembers(family, study, sessionId);
options = ParamUtils.defaultObject(options, QueryOptions::new);
family.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.FAMILY));
QueryResult<Family> queryResult = familyDBAdaptor.insert(study.getUid(), family, variableSetList, options);
auditManager.recordCreation(AuditRecord.Resource.family, queryResult.first().getId(), userId, queryResult.first(), null, null);
return queryResult;
}