use of org.hisp.dhis.common.IdentifiableObject in project dhis2-core by dhis2.
the class DefaultPreheatService method connectReferences.
@Override
public void connectReferences(Object object, Preheat preheat, PreheatIdentifier identifier) {
if (object == null) {
return;
}
Map<Class<? extends IdentifiableObject>, IdentifiableObject> defaults = preheat.getDefaults();
Schema schema = schemaService.getDynamicSchema(object.getClass());
List<Property> properties = schema.getProperties().stream().filter(p -> p.isPersisted() && p.isOwner() && (PropertyType.REFERENCE == p.getPropertyType() || PropertyType.REFERENCE == p.getItemPropertyType())).collect(Collectors.toList());
for (Property property : properties) {
if (skipConnect(property.getKlass()) || skipConnect(property.getItemKlass())) {
continue;
}
if (!property.isCollection()) {
IdentifiableObject refObject = ReflectionUtils.invokeMethod(object, property.getGetterMethod());
IdentifiableObject ref = getPersistedObject(preheat, identifier, refObject);
if (!DataSetElement.class.isInstance(property.getKlass()) && (Preheat.isDefaultClass(property.getKlass()) && (ref == null || refObject == null || "default".equals(refObject.getName())))) {
ref = defaults.get(property.getKlass());
}
if (ref != null && ref.getId() == 0) {
ReflectionUtils.invokeMethod(object, property.getSetterMethod(), (Object) null);
} else {
ReflectionUtils.invokeMethod(object, property.getSetterMethod(), ref);
}
} else {
Collection<IdentifiableObject> objects = ReflectionUtils.newCollectionInstance(property.getKlass());
Collection<IdentifiableObject> refObjects = ReflectionUtils.invokeMethod(object, property.getGetterMethod());
for (IdentifiableObject refObject : refObjects) {
IdentifiableObject ref = getPersistedObject(preheat, identifier, refObject);
if (Preheat.isDefaultClass(refObject) && (ref == null || "default".equals(refObject.getName()))) {
ref = defaults.get(refObject.getClass());
}
if (ref != null && ref.getId() != 0)
objects.add(ref);
}
ReflectionUtils.invokeMethod(object, property.getSetterMethod(), objects);
}
}
}
use of org.hisp.dhis.common.IdentifiableObject in project dhis2-core by dhis2.
the class ObjectBundleServiceTest method testCreateOrgUnitWithPersistedParent.
@Test
public void testCreateOrgUnitWithPersistedParent() throws IOException {
OrganisationUnit parentOu = createOrganisationUnit('A');
parentOu.setUid("ImspTQPwCqd");
manager.save(parentOu);
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/orgunit_create_with_persisted_parent.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.CREATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
objectBundleValidationService.validate(bundle);
objectBundleService.commit(bundle);
assertEquals(3, manager.getAll(OrganisationUnit.class).size());
assertNull(manager.get(OrganisationUnit.class, "ImspTQPwCqd").getParent());
assertNotNull(manager.get(OrganisationUnit.class, "bFzxXwTkSWA").getParent());
assertEquals("ImspTQPwCqd", manager.get(OrganisationUnit.class, "bFzxXwTkSWA").getParent().getUid());
assertNotNull(manager.get(OrganisationUnit.class, "B8eJEMldsP7").getParent());
assertEquals("bFzxXwTkSWA", manager.get(OrganisationUnit.class, "B8eJEMldsP7").getParent().getUid());
}
use of org.hisp.dhis.common.IdentifiableObject in project dhis2-core by dhis2.
the class ObjectBundleServiceTest method testCreatePreheatValidationsInvalidObjects.
@Test
public void testCreatePreheatValidationsInvalidObjects() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/de_validate2.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.VALIDATE);
params.setImportStrategy(ImportStrategy.CREATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
ObjectBundleValidationReport validate = objectBundleValidationService.validate(bundle);
assertFalse(validate.getTypeReportMap().isEmpty());
assertEquals(5, validate.getErrorReportsByCode(DataElement.class, ErrorCode.E5002).size());
assertEquals(3, validate.getErrorReportsByCode(DataElement.class, ErrorCode.E4000).size());
}
use of org.hisp.dhis.common.IdentifiableObject in project dhis2-core by dhis2.
the class ObjectBundleServiceTest method testCreateAndUpdateMetadata3.
@Test
//TODO fix
@Ignore
public void testCreateAndUpdateMetadata3() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/de_create_and_update3.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.CREATE_AND_UPDATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
assertTrue(objectBundleValidationService.validate(bundle).getErrorReports().isEmpty());
objectBundleService.commit(bundle);
DataElement dataElementE = manager.get(DataElement.class, "deabcdefghE");
assertNotNull(dataElementE);
assertEquals("DEE", dataElementE.getName());
assertEquals("DECE", dataElementE.getCode());
assertEquals("DESE", dataElementE.getShortName());
assertEquals("DEDE", dataElementE.getDescription());
}
use of org.hisp.dhis.common.IdentifiableObject in project dhis2-core by dhis2.
the class ObjectBundleServiceTest method testUpdateDataSetWithSectionsAndGreyedFields.
@Test
public void testUpdateDataSetWithSectionsAndGreyedFields() throws IOException {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(new ClassPathResource("dxf2/dataset_with_sections_gf.json").getInputStream(), RenderFormat.JSON);
ObjectBundleParams params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.CREATE);
params.setObjects(metadata);
ObjectBundle bundle = objectBundleService.create(params);
ObjectBundleValidationReport validate = objectBundleValidationService.validate(bundle);
assertTrue(validate.getErrorReports().isEmpty());
objectBundleService.commit(bundle);
Section section1 = manager.get(Section.class, "JwcV2ZifEQf");
assertNotNull(section1.getDataSet());
assertEquals(1, section1.getCategoryCombos().size());
assertTrue(section1.getGreyedFields().isEmpty());
assertEquals(1, section1.getDataElements().size());
assertNotNull(section1.getDataSet());
Section section2 = manager.get(Section.class, "C50M0WxaI7y");
assertNotNull(section2.getDataSet());
assertEquals(1, section2.getCategoryCombos().size());
assertEquals(1, section2.getGreyedFields().size());
assertEquals(1, section2.getDataElements().size());
assertNotNull(section2.getDataSet());
metadata = renderService.fromMetadata(new ClassPathResource("dxf2/dataset_with_sections_gf_update.json").getInputStream(), RenderFormat.JSON);
params = new ObjectBundleParams();
params.setObjectBundleMode(ObjectBundleMode.COMMIT);
params.setImportStrategy(ImportStrategy.UPDATE);
params.setObjects(metadata);
bundle = objectBundleService.create(params);
validate = objectBundleValidationService.validate(bundle);
assertTrue(validate.getErrorReports().isEmpty());
objectBundleService.commit(bundle);
List<DataSet> dataSets = manager.getAll(DataSet.class);
List<Section> sections = manager.getAll(Section.class);
List<OrganisationUnit> organisationUnits = manager.getAll(OrganisationUnit.class);
List<DataElement> dataElements = manager.getAll(DataElement.class);
List<UserAuthorityGroup> userRoles = manager.getAll(UserAuthorityGroup.class);
List<User> users = manager.getAll(User.class);
List<DataElementOperand> dataElementOperands = manager.getAll(DataElementOperand.class);
assertFalse(organisationUnits.isEmpty());
assertFalse(dataElements.isEmpty());
assertFalse(users.isEmpty());
assertFalse(userRoles.isEmpty());
assertEquals(1, dataSets.size());
assertEquals(2, sections.size());
assertEquals(1, dataElementOperands.size());
DataSet dataSet = dataSets.get(0);
assertEquals("Updated Data Set", dataSet.getName());
assertEquals(2, dataSet.getSections().size());
assertNotNull(dataSet.getUser());
section1 = manager.get(Section.class, "JwcV2ZifEQf");
assertNotNull(section1.getDataSet());
assertEquals(1, section1.getCategoryCombos().size());
assertEquals(1, section1.getGreyedFields().size());
assertEquals(1, section1.getDataElements().size());
assertNotNull(section1.getDataSet());
section2 = manager.get(Section.class, "C50M0WxaI7y");
assertNotNull(section2.getDataSet());
assertEquals(1, section2.getCategoryCombos().size());
assertTrue(section2.getGreyedFields().isEmpty());
assertEquals(1, section2.getDataElements().size());
assertNotNull(section2.getDataSet());
}
Aggregations