diff --git a/src/main/java/org/generationcp/middleware/operation/builder/StandardVariableBuilder.java b/src/main/java/org/generationcp/middleware/operation/builder/StandardVariableBuilder.java index a2990f0ac7..9f954b17de 100644 --- a/src/main/java/org/generationcp/middleware/operation/builder/StandardVariableBuilder.java +++ b/src/main/java/org/generationcp/middleware/operation/builder/StandardVariableBuilder.java @@ -59,7 +59,7 @@ public class StandardVariableBuilder extends Builder { public StandardVariableBuilder(final HibernateSessionProvider sessionProviderForLocal) { super(sessionProviderForLocal); - daoFactory = new DaoFactory(sessionProviderForLocal); + this.daoFactory = new DaoFactory(sessionProviderForLocal); } public StandardVariable create(final int standardVariableId, final String programUUID) { @@ -127,7 +127,7 @@ private void specialProcessing(final List summaries) { // Now this relationship is linked to the "Property" of the standard variable. (facepalm). if (summary.getProperty() != null) { final List propertyCvTermRelationships = - daoFactory.getCvTermRelationshipDao().getBySubject(summary.getProperty().getId()); + this.daoFactory.getCvTermRelationshipDao().getBySubject(summary.getProperty().getId()); final Term isAOfProperty = this.createTerm(propertyCvTermRelationships, TermId.IS_A); if (isAOfProperty != null) { summary.setIsA(new TermSummary(isAOfProperty.getId(), isAOfProperty.getName(), isAOfProperty.getDefinition())); @@ -150,7 +150,7 @@ public String getCropOntologyId(final Term term) { } final CVTermProperty property = - daoFactory.getCvTermPropertyDao().getOneByCvTermAndType(term.getId(), TermId.CROP_ONTOLOGY_ID.getId()); + this.daoFactory.getCvTermPropertyDao().getOneByCvTermAndType(term.getId(), TermId.CROP_ONTOLOGY_ID.getId()); if (property != null) { cropOntologyId = property.getValue(); } @@ -192,7 +192,7 @@ public List createTermProperties(final int cvTermId) { } private CVTerm getCvTerm(final int id) { - return daoFactory.getCvTermDao().getById(id); + return this.daoFactory.getCvTermDao().getById(id); } public StandardVariable findOrSave( @@ -287,7 +287,7 @@ public VariableType mapPhenotypicTypeToDefaultVariableType(final PhenotypicType } public StandardVariable getByName(final String name, final String programUUID) { - final CVTerm cvTerm = daoFactory.getCvTermDao().getByNameAndCvId(name, CvId.VARIABLES.getId()); + final CVTerm cvTerm = this.daoFactory.getCvTermDao().getByNameAndCvId(name, CvId.VARIABLES.getId()); if (cvTerm != null && cvTerm.getCvTermId() != null) { return this.getStandardVariableBuilder().create(cvTerm.getCvTermId(), programUUID); } @@ -319,8 +319,7 @@ public StandardVariable getByPropertyScaleMethodRole( } public Integer getIdByPropertyScaleMethod(final Integer propertyId, final Integer scaleId, final Integer methodId) { - Integer stdVariableId = null; - stdVariableId = daoFactory.getCvTermDao().getStandadardVariableIdByPropertyScaleMethod(propertyId, scaleId, methodId, "DESC"); + final Integer stdVariableId = this.daoFactory.getCvTermDao().getStandadardVariableIdByPropertyScaleMethod(propertyId, scaleId, methodId, "DESC"); return stdVariableId; } @@ -333,7 +332,7 @@ public Map> getStandardVariablesInProjects(final // Trim all header names final List headerNamesTrimmed = new ArrayList<>(Lists.transform(headerNames, new Function() { - public String apply(String s) { + public String apply(final String s) { // Transform header names to uppercase; header names can be in lowercase or combination when defined in file return s.toUpperCase().trim(); } @@ -407,7 +406,11 @@ private void removeHeaderNamesWithMatch( protected void setRoleOfVariables(final List variables, final Map varIdsWithType) { for (final StandardVariable standardVariable : variables) { final VariableType type = varIdsWithType.get(standardVariable.getId()); - if (type != null) { + // Experimental Design Variables will have Trial_Environment phenotypic type + final int standardVarialbeId = standardVariable.getId(); + if (WorkbookBuilder.EXPERIMENTAL_DESIGN_VARIABLES.contains(standardVarialbeId)) { + standardVariable.setPhenotypicType(PhenotypicType.TRIAL_ENVIRONMENT); + } else if(type != null) { standardVariable.setPhenotypicType(type.getRole()); } } @@ -435,39 +438,37 @@ public Map> getStandardVariableIdsWithTypeByA public Map> getStandardVariableIdsWithTypeForTerms(final List termNames) { if (!termNames.isEmpty()) { - return daoFactory.getCvTermDao().getTermIdsWithTypeByNameOrSynonyms(termNames, CvId.VARIABLES.getId()); + return this.daoFactory.getCvTermDao().getTermIdsWithTypeByNameOrSynonyms(termNames, CvId.VARIABLES.getId()); } return new HashMap<>(); } public Map> getStandardVariableIdsForTraits(final List traitNames) { if (!traitNames.isEmpty()) { - return daoFactory.getCvTermDao().getStandardVariableIdsWithTypeByProperties(traitNames); + return this.daoFactory.getCvTermDao().getStandardVariableIdsWithTypeByProperties(traitNames); } return new HashMap<>(); } public Integer getIdByTermId(final int cvTermId, final TermId termId) { - Integer stdVariableId = null; - stdVariableId = daoFactory.getCvTermDao().getStandardVariableIdByTermId(cvTermId, termId); + final Integer stdVariableId = this.daoFactory.getCvTermDao().getStandardVariableIdByTermId(cvTermId, termId); return stdVariableId; } public CVTerm getCvTerm(final String name, final int cvId) { - return daoFactory.getCvTermDao().getByNameAndCvId(name, cvId); + return this.daoFactory.getCvTermDao().getByNameAndCvId(name, cvId); } public Integer getIdByPropertyScaleMethodRole( final Integer propertyId, final Integer scaleId, final Integer methodId, final PhenotypicType role) { - Integer stdVariableId = null; - stdVariableId = daoFactory.getCvTermDao().getStandadardVariableIdByPropertyScaleMethodRole(propertyId, scaleId, methodId, role); + final Integer stdVariableId = this.daoFactory.getCvTermDao().getStandadardVariableIdByPropertyScaleMethodRole(propertyId, scaleId, methodId, role); return stdVariableId; } public boolean validateEnumerationUsage(final int standardVariableId, final int enumerationId) { final Integer storedInId = - daoFactory.getCvTermRelationshipDao().getObjectIdByTypeAndSubject(TermId.STORED_IN.getId(), standardVariableId).get(0); + this.daoFactory.getCvTermRelationshipDao().getObjectIdByTypeAndSubject(TermId.STORED_IN.getId(), standardVariableId).get(0); final String value = String.valueOf(enumerationId); if (storedInId == TermId.STUDY_INFO_STORAGE.getId() || storedInId == TermId.DATASET_INFO_STORAGE.getId()) { return !this.isExistsPropertyByTypeAndValue(standardVariableId, value); @@ -512,6 +513,6 @@ private boolean isExistsPhenotypeByTypeAndValue(final Integer variateId, final S } public List findAllByProperty(final int propertyId) { - return new ArrayList<>(daoFactory.getCvTermDao().getStandardVariablesOfProperty(propertyId)); + return new ArrayList<>(this.daoFactory.getCvTermDao().getStandardVariablesOfProperty(propertyId)); } } diff --git a/src/main/java/org/generationcp/middleware/operation/builder/WorkbookBuilder.java b/src/main/java/org/generationcp/middleware/operation/builder/WorkbookBuilder.java index c328ff8859..9d0efb7bd7 100644 --- a/src/main/java/org/generationcp/middleware/operation/builder/WorkbookBuilder.java +++ b/src/main/java/org/generationcp/middleware/operation/builder/WorkbookBuilder.java @@ -372,7 +372,13 @@ public Workbook createStudyVariableSettings(final int id) { if (PhenotypicType.TRIAL_ENVIRONMENT == varType.getRole()) { value = projectProperty.getValue(); if (value == null) { - value = StringUtils.EMPTY; + // During import of study, experiment design values are not set in ProjectProperty so we resolve them from GeolocationProperty + if (VariableType.ENVIRONMENT_DETAIL.equals(varType)) { + final GeolocationPropertyDao geolocationPropertyDao = this.daoFactory.getGeolocationPropertyDao(); + value = geolocationPropertyDao.getGeolocationPropValue(stdVariable.getId(), id); + } else { + value = StringUtils.EMPTY; + } } } else if (PhenotypicType.VARIATE == varType.getRole()) {// TODO traits // constants, no need to retrieve the value if it's a trial study @@ -735,6 +741,7 @@ private List removeConstantsFromVariates( for (final MeasurementVariable constant : constants) { if (variate.getTermId() == constant.getTermId()) { found = true; + break; } } } diff --git a/src/main/java/org/generationcp/middleware/operation/saver/WorkbookSaver.java b/src/main/java/org/generationcp/middleware/operation/saver/WorkbookSaver.java index dad36be273..9898bc6e08 100644 --- a/src/main/java/org/generationcp/middleware/operation/saver/WorkbookSaver.java +++ b/src/main/java/org/generationcp/middleware/operation/saver/WorkbookSaver.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils; import org.generationcp.middleware.dao.LocationDAO; import org.generationcp.middleware.domain.dms.*; +import org.generationcp.middleware.domain.dms.Enumeration; import org.generationcp.middleware.domain.etl.MeasurementData; import org.generationcp.middleware.domain.etl.MeasurementRow; import org.generationcp.middleware.domain.etl.MeasurementVariable; @@ -25,6 +26,7 @@ import org.generationcp.middleware.hibernate.HibernateSessionProvider; import org.generationcp.middleware.manager.DaoFactory; import org.generationcp.middleware.manager.Operation; +import org.generationcp.middleware.manager.api.OntologyDataManager; import org.generationcp.middleware.manager.api.StudyDataManager; import org.generationcp.middleware.operation.builder.WorkbookBuilder; import org.generationcp.middleware.operation.transformer.etl.ExperimentValuesTransformer; @@ -76,6 +78,9 @@ public class WorkbookSaver extends Saver { @Resource private StudyDataManager studyDataManager; + @Resource + private OntologyDataManager ontologyDataManager; + public WorkbookSaver() { } @@ -136,6 +141,8 @@ public Map saveVariables(final Workbook workbook, final String programUUID) { variableTypeMap.put(WorkbookSaver.TRIALVARIABLES, trialVariables); variableTypeMap.put(WorkbookSaver.EFFECTVARIABLE, effectVariables); // -- measurementVariables + + this.setRMAPValueIfNecessary(trialMV, programUUID); measurementVariableMap.put(WorkbookSaver.TRIALMV, trialMV); final List effectMV = workbook.getMeasurementDatasetVariables(); @@ -520,6 +527,10 @@ private int createLocationsAndSetToObservations( if (geolocationId == 0) { // if geolocationId does not exist, create the geolocation // and set to row.locationId + + //Set RMAP Value if Necessary + this.setRMAPValueObservationIfNecessary(row.getDataList(), programUUID); + final TimerWatch watch = new TimerWatch("transformTrialEnvironment in createLocationsAndSetToObservations"); final VariableList geolocation = this.getVariableListTransformer().transformTrialEnvironment(row, trialFactors, trialHeaders); @@ -1346,5 +1357,42 @@ private void createMeansExperiments( } } + private void setRMAPValueIfNecessary(final List mvarList, final String programUUID) { + final List catVar = mvarList.stream().filter(variable -> variable.getTermId() == TermId.REPLICATIONS_MAP + .getId()).collect(Collectors.toList()); + if (catVar != null) { + for (final MeasurementVariable mVar : catVar) { + final StandardVariable strdVariable = this.ontologyDataManager.findStandardVariableByTraitScaleMethodNames(mVar.getProperty(), mVar.getScale(), mVar.getMethod(), programUUID); + if (strdVariable != null && strdVariable.getEnumerations() !=null) { + final List possibleValues = strdVariable.getEnumerations().stream().filter(enumeration -> enumeration.getName().equals(mVar.getValue())).collect( + Collectors.toList()); + if (possibleValues != null && possibleValues.size() > 0) { + mVar.setValue(String.valueOf(possibleValues.get(0).getId())); + } + } + } + } + } + + private void setRMAPValueObservationIfNecessary(final List mvarList, final String programUUID) { + final List catVar = mvarList.stream().filter(variable -> variable.getMeasurementVariable() != null && variable.getMeasurementVariable().getTermId() == TermId.REPLICATIONS_MAP + .getId()).collect(Collectors.toList()); + if (catVar != null) { + for (final MeasurementData mData : catVar) { + final MeasurementVariable mVar = mData.getMeasurementVariable(); + final StandardVariable strdVariable; + strdVariable = + this.ontologyDataManager.findStandardVariableByTraitScaleMethodNames(mVar.getProperty(), mVar.getScale(), mVar.getMethod(), programUUID); + if (strdVariable != null && strdVariable.getEnumerations() !=null) { + final List possibleValues = strdVariable.getEnumerations().stream().filter(enumeration -> enumeration.getName().equals(mData.getValue())).collect( + Collectors.toList()); + if (possibleValues != null && possibleValues.size() > 0) { + mVar.setValue(String.valueOf(possibleValues.get(0).getId())); + mData.setValue(String.valueOf(possibleValues.get(0).getId())); + } + } + } + } + } } diff --git a/src/test/java/org/generationcp/middleware/operation/builder/StandardVariableBuilderTest.java b/src/test/java/org/generationcp/middleware/operation/builder/StandardVariableBuilderTest.java index 6ab6f27442..5e79362e6d 100644 --- a/src/test/java/org/generationcp/middleware/operation/builder/StandardVariableBuilderTest.java +++ b/src/test/java/org/generationcp/middleware/operation/builder/StandardVariableBuilderTest.java @@ -69,7 +69,7 @@ public void setUp() { @Test public void testCreate() { - final StandardVariable standardVariable = standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); + final StandardVariable standardVariable = this.standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); assertNotNull(standardVariable); assertEquals(TermId.TRIAL_INSTANCE_FACTOR.getId(), standardVariable.getId()); assertEquals(TRIAL_INSTANCE_PROPERTY_ID, standardVariable.getProperty().getId()); @@ -88,7 +88,7 @@ public void testCreateObsoleteVariable() { variable.setIsObsolete(true); cvtermDao.update(variable); - final StandardVariable standardVariable = standardVariableBuilder.create(id, null); + final StandardVariable standardVariable = this.standardVariableBuilder.create(id, null); assertNotNull(standardVariable); assertEquals(TermId.TRIAL_INSTANCE_FACTOR.getId(), standardVariable.getId()); assertEquals(TRIAL_INSTANCE_PROPERTY_ID, standardVariable.getProperty().getId()); @@ -107,7 +107,7 @@ public void testCreateList() { standardVariableIds.add(TermId.ENTRY_NO.getId()); standardVariableIds.add(TermId.GID.getId()); - final List standardVariables = standardVariableBuilder.create(standardVariableIds, null); + final List standardVariables = this.standardVariableBuilder.create(standardVariableIds, null); assertNotNull(standardVariables); assertEquals(standardVariableIds.size(), standardVariables.size()); for (final StandardVariable standardVariable : standardVariables) { @@ -128,7 +128,7 @@ public void testCreateList() { public void testCreateEmptyList() { final List standardVariableIds = new ArrayList(); - final List standardVariables = standardVariableBuilder.create(standardVariableIds, null); + final List standardVariables = this.standardVariableBuilder.create(standardVariableIds, null); assertNotNull(standardVariables); assertEquals(0, standardVariables.size()); } @@ -137,7 +137,7 @@ public void testCreateEmptyList() { public void testCreateNullList() { final List standardVariableIds = null; - final List standardVariables = standardVariableBuilder.create(standardVariableIds, null); + final List standardVariables = this.standardVariableBuilder.create(standardVariableIds, null); assertNotNull(standardVariables); assertEquals(0, standardVariables.size()); } @@ -152,7 +152,7 @@ public void testFindOrSaveFindExisting() { final String datatype = "N"; final PhenotypicType role = PhenotypicType.TRIAL_ENVIRONMENT; final StandardVariable standardVariable = - standardVariableBuilder.findOrSave(name, description, property, scale, method, role, null, datatype, null); + this.standardVariableBuilder.findOrSave(name, description, property, scale, method, role, null, datatype, null); assertNotNull(standardVariable); assertEquals(TermId.TRIAL_INSTANCE_FACTOR.getId(), standardVariable.getId()); assertEquals(TRIAL_INSTANCE_PROPERTY_ID, standardVariable.getProperty().getId()); @@ -179,7 +179,7 @@ public void testFindOrSaveSaveNewStandardVariable() { final String datatype = "N"; final PhenotypicType role = PhenotypicType.TRIAL_ENVIRONMENT; final StandardVariable standardVariable = - standardVariableBuilder.findOrSave(name, description, property, scale, method, role, null, datatype, null); + this.standardVariableBuilder.findOrSave(name, description, property, scale, method, role, null, datatype, null); assertNotNull(standardVariable); assertEquals(name, standardVariable.getName()); assertEquals(description, standardVariable.getDescription()); @@ -195,7 +195,7 @@ public void testFindOrSaveSaveNewStandardVariable() { @Test public void testGetByName() { final String name = "TRIAL_INSTANCE"; - final StandardVariable standardVariable = standardVariableBuilder.getByName(name, null); + final StandardVariable standardVariable = this.standardVariableBuilder.getByName(name, null); assertNotNull(standardVariable); assertEquals(TermId.TRIAL_INSTANCE_FACTOR.getId(), standardVariable.getId()); assertEquals(name, standardVariable.getName()); @@ -207,7 +207,7 @@ public void testGetByName() { @Test public void testGetByNameNotFound() { final String name = "VAR_123456"; - final StandardVariable standardVariable = standardVariableBuilder.getByName(name, null); + final StandardVariable standardVariable = this.standardVariableBuilder.getByName(name, null); assertNull(standardVariable); } @@ -216,7 +216,7 @@ public void testGetByPropertyScaleMethod() { final int propertyId = TRIAL_INSTANCE_PROPERTY_ID; final int scaleId = TRIAL_INSTANCE_SCALE_ID; final int methodId = TRIAL_INSTANCE_METHOD_ID; - final StandardVariable standardVariable = standardVariableBuilder.getByPropertyScaleMethod(propertyId, scaleId, methodId, null); + final StandardVariable standardVariable = this.standardVariableBuilder.getByPropertyScaleMethod(propertyId, scaleId, methodId, null); assertNotNull(standardVariable); assertEquals(TRIAL_INSTANCE_PROPERTY_ID, standardVariable.getProperty().getId()); assertEquals(TRIAL_INSTANCE_SCALE_ID, standardVariable.getScale().getId()); @@ -228,7 +228,7 @@ public void testGetByPropertyScaleMethodNotFound() { final int propertyId = 1; final int scaleId = 2; final int methodId = 3; - final StandardVariable standardVariable = standardVariableBuilder.getByPropertyScaleMethod(propertyId, scaleId, methodId, null); + final StandardVariable standardVariable = this.standardVariableBuilder.getByPropertyScaleMethod(propertyId, scaleId, methodId, null); assertNull(standardVariable); } @@ -239,7 +239,7 @@ public void testGetByPropertyScaleMethodRole() { final int methodId = TRIAL_INSTANCE_METHOD_ID; final PhenotypicType role = PhenotypicType.TRIAL_ENVIRONMENT; final StandardVariable standardVariable = - standardVariableBuilder.getByPropertyScaleMethodRole(propertyId, scaleId, methodId, role, null); + this.standardVariableBuilder.getByPropertyScaleMethodRole(propertyId, scaleId, methodId, role, null); assertNotNull(standardVariable); assertEquals(TRIAL_INSTANCE_PROPERTY_ID, standardVariable.getProperty().getId()); assertEquals(TRIAL_INSTANCE_SCALE_ID, standardVariable.getScale().getId()); @@ -253,7 +253,7 @@ public void testGetByPropertyScaleMethodRoleNotFound() { final int methodId = 3; final PhenotypicType role = PhenotypicType.TRIAL_ENVIRONMENT; final StandardVariable standardVariable = - standardVariableBuilder.getByPropertyScaleMethodRole(propertyId, scaleId, methodId, role, null); + this.standardVariableBuilder.getByPropertyScaleMethodRole(propertyId, scaleId, methodId, role, null); assertNull(standardVariable); } @@ -357,7 +357,7 @@ public void testGetStandardVariablesInProjects_HeaderHasMatchWithOntologyVariabl @Test public void testSetRoleOfVariablesVariableTypeIsUnassigned() { - final StandardVariable trialInstanceFactor = standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); + final StandardVariable trialInstanceFactor = this.standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); final List standardVariables = new ArrayList<>(); standardVariables.add(trialInstanceFactor); @@ -365,7 +365,7 @@ public void testSetRoleOfVariablesVariableTypeIsUnassigned() { final Map variableTypeMap = new HashMap<>(); variableTypeMap.put(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); - standardVariableBuilder.setRoleOfVariables(standardVariables, variableTypeMap); + this.standardVariableBuilder.setRoleOfVariables(standardVariables, variableTypeMap); // The trialInstanceFactor has no VariableType assigned to it, so the phenotypicType (role) is null Assert.assertNull(trialInstanceFactor.getPhenotypicType()); @@ -375,7 +375,7 @@ public void testSetRoleOfVariablesVariableTypeIsUnassigned() { @Test public void testSetRoleOfVariablesVariableTypeIsAssigned() { - final StandardVariable trialInstanceFactor = standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); + final StandardVariable trialInstanceFactor = this.standardVariableBuilder.create(TermId.TRIAL_INSTANCE_FACTOR.getId(), null); final List standardVariables = new ArrayList<>(); standardVariables.add(trialInstanceFactor); @@ -383,13 +383,31 @@ public void testSetRoleOfVariablesVariableTypeIsAssigned() { final Map variableTypeMap = new HashMap<>(); variableTypeMap.put(TermId.TRIAL_INSTANCE_FACTOR.getId(), VariableType.ENVIRONMENT_DETAIL); - standardVariableBuilder.setRoleOfVariables(standardVariables, variableTypeMap); + this.standardVariableBuilder.setRoleOfVariables(standardVariables, variableTypeMap); // The phenotypicType (role) of trialInstanceFactor should be from VariableType.ENVIRONMENT_DETAIL Assert.assertEquals(VariableType.ENVIRONMENT_DETAIL.getRole(), trialInstanceFactor.getPhenotypicType()); } + @Test + public void testSetRoleOfVariablesVariableTypeForExperimentalVariables() { + + final StandardVariable nblks = this.standardVariableBuilder.create(TermId.NBLKS.getId(), null); + final List standardVariables = new ArrayList<>(); + standardVariables.add(nblks); + + // Assign the nblks to VariableType.EXPERIMENTAL_DESIGN + final Map variableTypeMap = new HashMap<>(); + variableTypeMap.put(TermId.NBLKS.getId(), VariableType.EXPERIMENTAL_DESIGN); + + this.standardVariableBuilder.setRoleOfVariables(standardVariables, variableTypeMap); + + // The phenotypicType (role) of trialInstanceFactor should be from VariableType.ENVIRONMENT_DETAIL + Assert.assertEquals(VariableType.ENVIRONMENT_DETAIL.getRole(), nblks.getPhenotypicType()); + + } + private DmsProject createDMSProject() { final DmsProject dmsProject = new DmsProject();