use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class DefaultPreheatService method handleUniqueProperties.
private Map<String, Map<Object, String>> handleUniqueProperties(Schema schema, List<IdentifiableObject> objects) {
List<Property> uniqueProperties = schema.getProperties().stream().filter(p -> p.isPersisted() && p.isOwner() && p.isUnique() && p.isSimple()).collect(Collectors.toList());
Map<String, Map<Object, String>> map = new HashMap<>();
for (IdentifiableObject object : objects) {
uniqueProperties.forEach(property -> {
if (!map.containsKey(property.getName()))
map.put(property.getName(), new HashMap<>());
Object value = ReflectionUtils.invokeMethod(object, property.getGetterMethod());
if (value != null)
map.get(property.getName()).put(value, object.getUid());
});
}
return map;
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class DefaultPreheatService method collectObjectReferences.
@SuppressWarnings("unchecked")
private Map<Class<?>, Map<String, Map<String, Object>>> collectObjectReferences(Map<Class<?>, List<?>> objects) {
Map<Class<?>, Map<String, Map<String, Object>>> map = new HashMap<>();
if (objects.isEmpty()) {
return map;
}
Map<Class<?>, List<?>> targets = new HashMap<>();
// clone objects list, we don't want to modify it
targets.putAll(objects);
collectScanTargets(targets);
for (Class<?> objectClass : targets.keySet()) {
Schema schema = schemaService.getDynamicSchema(objectClass);
if (!schema.isIdentifiableObject()) {
continue;
}
List<Property> properties = schema.getProperties().stream().filter(p -> p.isPersisted() && p.isOwner() && (PropertyType.REFERENCE == p.getPropertyType() || PropertyType.REFERENCE == p.getItemPropertyType())).collect(Collectors.toList());
List<IdentifiableObject> identifiableObjects = (List<IdentifiableObject>) targets.get(objectClass);
Map<String, Map<String, Object>> refMap = new HashMap<>();
map.put(objectClass, refMap);
for (IdentifiableObject object : identifiableObjects) {
refMap.put(object.getUid(), new HashMap<>());
properties.forEach(p -> {
if (!p.isCollection()) {
IdentifiableObject reference = ReflectionUtils.invokeMethod(object, p.getGetterMethod());
if (reference != null) {
try {
IdentifiableObject identifiableObject = (IdentifiableObject) p.getKlass().newInstance();
mergeService.merge(new MergeParams<>(reference, identifiableObject));
refMap.get(object.getUid()).put(p.getName(), identifiableObject);
} catch (InstantiationException | IllegalAccessException ignored) {
}
}
} else {
Collection<IdentifiableObject> refObjects = ReflectionUtils.newCollectionInstance(p.getKlass());
Collection<IdentifiableObject> references = ReflectionUtils.invokeMethod(object, p.getGetterMethod());
if (references != null) {
for (IdentifiableObject reference : references) {
try {
IdentifiableObject identifiableObject = (IdentifiableObject) p.getItemKlass().newInstance();
mergeService.merge(new MergeParams<>(reference, identifiableObject));
refObjects.add(identifiableObject);
} catch (InstantiationException | IllegalAccessException ignored) {
}
}
}
refMap.get(object.getUid()).put(p.getCollectionName(), refObjects);
}
});
}
}
return map;
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class QueryServiceTest method sortNameAsc.
@Test
public void sortNameAsc() {
Schema schema = schemaService.getDynamicSchema(DataElement.class);
Query query = Query.from(schema);
query.addOrder(new Order(schema.getProperty("name"), Direction.ASCENDING));
List<? extends IdentifiableObject> objects = queryService.query(query);
assertEquals(6, objects.size());
assertEquals("deabcdefghA", objects.get(0).getUid());
assertEquals("deabcdefghB", objects.get(1).getUid());
assertEquals("deabcdefghC", objects.get(2).getUid());
assertEquals("deabcdefghD", objects.get(3).getUid());
assertEquals("deabcdefghE", objects.get(4).getUid());
assertEquals("deabcdefghF", objects.get(5).getUid());
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class QueryServiceTest method sortCreatedDesc.
@Test
public void sortCreatedDesc() {
Schema schema = schemaService.getDynamicSchema(DataElement.class);
Query query = Query.from(schema);
query.addOrder(new Order(schema.getProperty("created"), Direction.DESCENDING));
List<? extends IdentifiableObject> objects = queryService.query(query);
assertEquals(6, objects.size());
assertEquals("deabcdefghF", objects.get(0).getUid());
assertEquals("deabcdefghE", objects.get(1).getUid());
assertEquals("deabcdefghD", objects.get(2).getUid());
assertEquals("deabcdefghC", objects.get(3).getUid());
assertEquals("deabcdefghB", objects.get(4).getUid());
assertEquals("deabcdefghA", objects.get(5).getUid());
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class CriteriaQueryEngineTest method sortCreatedAsc.
@Test
public void sortCreatedAsc() {
Schema schema = schemaService.getDynamicSchema(DataElement.class);
Query query = Query.from(schema);
query.addOrder(new Order(schema.getProperty("created"), Direction.ASCENDING));
List<? extends IdentifiableObject> objects = queryEngine.query(query);
assertEquals(6, objects.size());
assertEquals("deabcdefghA", objects.get(0).getUid());
assertEquals("deabcdefghB", objects.get(1).getUid());
assertEquals("deabcdefghC", objects.get(2).getUid());
assertEquals("deabcdefghD", objects.get(3).getUid());
assertEquals("deabcdefghE", objects.get(4).getUid());
assertEquals("deabcdefghF", objects.get(5).getUid());
}
Aggregations