use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class MetadataImportParams method addMetadata.
@SuppressWarnings("unchecked")
public MetadataImportParams addMetadata(List<Schema> schemas, Metadata metadata) {
Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> objectMap = new HashMap<>();
for (Schema schema : schemas) {
Object value = ReflectionUtils.invokeGetterMethod(schema.getPlural(), metadata);
if (value != null) {
if (Collection.class.isAssignableFrom(value.getClass()) && schema.isIdentifiableObject()) {
List<IdentifiableObject> objects = new ArrayList<>((Collection<IdentifiableObject>) value);
if (!objects.isEmpty()) {
objectMap.put((Class<? extends IdentifiableObject>) schema.getKlass(), objects);
}
}
}
}
setObjects(objectMap);
return this;
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class DefaultCollectionService method delCollectionItems.
@Override
@SuppressWarnings("unchecked")
public void delCollectionItems(IdentifiableObject object, String propertyName, List<IdentifiableObject> objects) throws Exception {
Schema schema = schemaService.getDynamicSchema(object.getClass());
if (!aclService.canUpdate(currentUserService.getCurrentUser(), object)) {
throw new UpdateAccessDeniedException("You don't have the proper permissions to update this object.");
}
if (!schema.haveProperty(propertyName)) {
throw new WebMessageException(WebMessageUtils.notFound("Property " + propertyName + " does not exist on " + object.getClass().getName()));
}
Property property = schema.getProperty(propertyName);
if (!property.isCollection() || !property.isIdentifiableObject()) {
throw new WebMessageException(WebMessageUtils.conflict("Only identifiable object collections can be removed from."));
}
Collection<String> itemCodes = objects.stream().map(IdentifiableObject::getUid).collect(Collectors.toList());
if (itemCodes.isEmpty()) {
return;
}
List<? extends IdentifiableObject> items = manager.get(((Class<? extends IdentifiableObject>) property.getItemKlass()), itemCodes);
manager.refresh(object);
if (property.isOwner()) {
Collection<IdentifiableObject> collection = (Collection<IdentifiableObject>) property.getGetterMethod().invoke(object);
for (IdentifiableObject item : items) {
if (collection.contains(item))
collection.remove(item);
}
} else {
Schema owningSchema = schemaService.getDynamicSchema(property.getItemKlass());
Property owningProperty = owningSchema.propertyByRole(property.getOwningRole());
for (IdentifiableObject item : items) {
try {
Collection<IdentifiableObject> collection = (Collection<IdentifiableObject>) owningProperty.getGetterMethod().invoke(item);
if (collection.contains(object)) {
collection.remove(object);
manager.update(item);
}
} catch (Exception ex) {
}
}
}
manager.update(object);
dbmsManager.clearSession();
cacheManager.clearCache();
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class DefaultMetadataExportService method getParamsFromMap.
@Override
@SuppressWarnings("unchecked")
public MetadataExportParams getParamsFromMap(Map<String, List<String>> parameters) {
MetadataExportParams params = new MetadataExportParams();
Map<Class<? extends IdentifiableObject>, Map<String, List<String>>> map = new HashMap<>();
if (parameters.containsKey("fields")) {
params.setDefaultFields(parameters.get("fields"));
parameters.remove("fields");
}
if (parameters.containsKey("filter")) {
params.setDefaultFilter(parameters.get("filter"));
parameters.remove("filter");
}
if (parameters.containsKey("order")) {
params.setDefaultOrder(parameters.get("order"));
parameters.remove("order");
}
for (String parameterKey : parameters.keySet()) {
String[] parameter = parameterKey.split(":");
Schema schema = schemaService.getSchemaByPluralName(parameter[0]);
if (schema == null || !schema.isIdentifiableObject()) {
continue;
}
Class<? extends IdentifiableObject> klass = (Class<? extends IdentifiableObject>) schema.getKlass();
// class is enabled if value = true, or fields/filter/order is present
if ("true".equalsIgnoreCase(parameters.get(parameterKey).get(0)) || (parameter.length > 1 && ("fields".equalsIgnoreCase(parameter[1]) || "filter".equalsIgnoreCase(parameter[1]) || "order".equalsIgnoreCase(parameter[1])))) {
if (!map.containsKey(klass))
map.put(klass, new HashMap<>());
} else {
continue;
}
if (parameter.length > 1) {
if ("fields".equalsIgnoreCase(parameter[1])) {
if (!map.get(klass).containsKey("fields"))
map.get(klass).put("fields", new ArrayList<>());
map.get(klass).get("fields").addAll(parameters.get(parameterKey));
}
if ("filter".equalsIgnoreCase(parameter[1])) {
if (!map.get(klass).containsKey("filter"))
map.get(klass).put("filter", new ArrayList<>());
map.get(klass).get("filter").addAll(parameters.get(parameterKey));
}
if ("order".equalsIgnoreCase(parameter[1])) {
if (!map.get(klass).containsKey("order"))
map.get(klass).put("order", new ArrayList<>());
map.get(klass).get("order").addAll(parameters.get(parameterKey));
}
}
}
map.keySet().forEach(params::addClass);
for (Class<? extends IdentifiableObject> klass : map.keySet()) {
Map<String, List<String>> classMap = map.get(klass);
Schema schema = schemaService.getDynamicSchema(klass);
if (classMap.containsKey("fields"))
params.addFields(klass, classMap.get("fields"));
if (classMap.containsKey("filter") && classMap.containsKey("order")) {
OrderParams orderParams = new OrderParams(Sets.newHashSet(classMap.get("order")));
Query query = queryService.getQueryFromUrl(klass, classMap.get("filter"), orderParams.getOrders(schema));
query.setDefaultOrder();
params.addQuery(query);
} else if (classMap.containsKey("filter")) {
Query query = queryService.getQueryFromUrl(klass, classMap.get("filter"), new ArrayList<>());
query.setDefaultOrder();
params.addQuery(query);
} else if (classMap.containsKey("order")) {
OrderParams orderParams = new OrderParams();
orderParams.setOrder(Sets.newHashSet(classMap.get("order")));
Query query = queryService.getQueryFromUrl(klass, new ArrayList<>(), orderParams.getOrders(schema));
query.setDefaultOrder();
params.addQuery(query);
}
}
return params;
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class DefaultLinkService method generateLink.
private <T> void generateLink(T object, String hrefBase, boolean deepScan) {
Schema schema = schemaService.getDynamicSchema(object.getClass());
if (schema == null) {
log.warn("Could not find schema for object of type " + object.getClass().getName() + ".");
return;
}
generateHref(object, hrefBase);
if (!deepScan) {
return;
}
for (Property property : schema.getProperties()) {
try {
// TODO should we support non-idObjects?
if (property.isIdentifiableObject()) {
Object propertyObject = property.getGetterMethod().invoke(object);
if (propertyObject == null) {
continue;
}
// unwrap hibernate PersistentCollection
if (PersistentCollection.class.isAssignableFrom(propertyObject.getClass())) {
PersistentCollection collection = (PersistentCollection) propertyObject;
propertyObject = collection.getValue();
}
if (!property.isCollection()) {
generateHref(propertyObject, hrefBase);
} else {
Collection<?> collection = (Collection<?>) propertyObject;
for (Object collectionObject : collection) {
generateHref(collectionObject, hrefBase);
}
}
}
} catch (InvocationTargetException | IllegalAccessException ignored) {
}
}
}
use of org.hisp.dhis.schema.Schema in project dhis2-core by dhis2.
the class OAuth2ClientSchemaDescriptor method getSchema.
@Override
public Schema getSchema() {
Schema schema = new Schema(OAuth2Client.class, SINGULAR, PLURAL);
schema.setRelativeApiEndpoint(API_ENDPOINT);
schema.setOrder(1030);
schema.getAuthorities().add(new Authority(AuthorityType.READ, Lists.newArrayList("F_OAUTH2_CLIENT_MANAGE")));
schema.getAuthorities().add(new Authority(AuthorityType.CREATE, Lists.newArrayList("F_OAUTH2_CLIENT_MANAGE")));
schema.getAuthorities().add(new Authority(AuthorityType.DELETE, Lists.newArrayList("F_OAUTH2_CLIENT_MANAGE")));
return schema;
}
Aggregations