use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class AdvancedExportController method metaFieldDomain.
public void metaFieldDomain(ActionRequest request, ActionResponse response) throws ClassNotFoundException {
AdvancedExportLine adv = request.getContext().asType(AdvancedExportLine.class);
MetaModel metaModel = Beans.get(MetaModelRepository.class).findByName(adv.getCurrentDomain());
List<MetaField> metaFields = metaModel.getMetaFields();
List<Long> metaFieldList = new ArrayList<>();
if (metaFields != null) {
Class<?> klass = Class.forName(metaModel.getFullName());
Mapper mapper = Mapper.of(klass);
for (MetaField field : metaFields) {
if (!mapper.getProperty(field.getName()).isTransient()) {
metaFieldList.add(field.getId());
}
}
}
metaFieldList.add(0L);
response.setAttr("metaField", "domain", "self.id in (" + Joiner.on(",").join(metaFieldList) + ")");
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class AdvancedExportController method createCriteria.
@SuppressWarnings("unchecked")
private List<Long> createCriteria(ActionRequest request, AdvancedExport advancedExport) {
if (request.getContext().get("_criteria") != null) {
if (request.getContext().get("_criteria").toString().startsWith("[")) {
String ids = request.getContext().get("_criteria").toString();
return Splitter.on(", ").splitToList(ids.substring(1, ids.length() - 1)).stream().map(id -> Long.valueOf(id.toString())).collect(Collectors.toList());
} else {
ObjectMapper mapper = new ObjectMapper();
ActionRequest parentRequest = mapper.convertValue(request.getContext().get("_criteria"), ActionRequest.class);
Class<? extends Model> klass = (Class<? extends Model>) parentRequest.getBeanClass();
Filter filter = Beans.get(AdvancedExportService.class).getJpaSecurityFilter(advancedExport.getMetaModel());
Stream<? extends Model> listObj = parentRequest.getCriteria().createQuery(klass, filter).fetchSteam(advancedExport.getMaxExportLimit());
return listObj.map(it -> it.getId()).collect(Collectors.toList());
}
}
return null;
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class ConfiguratorCreatorImportServiceImpl method updateOtherFieldsInAttribute.
/**
* Update the configurator id in other fields of the attribute.
*
* @param creator
* @param attribute attribute to update
*/
protected void updateOtherFieldsInAttribute(ConfiguratorCreator creator, MetaJsonField attribute) {
try {
List<Field> fieldsToUpdate = Arrays.stream(attribute.getClass().getDeclaredFields()).filter(field -> field.getType().equals(String.class)).collect(Collectors.toList());
for (Field field : fieldsToUpdate) {
Mapper mapper = Mapper.of(attribute.getClass());
Method getter = mapper.getGetter(field.getName());
String fieldString = (String) getter.invoke(attribute);
if (fieldString != null && fieldString.contains("_")) {
Method setter = mapper.getSetter(field.getName());
String updatedFieldString = fieldString.substring(0, fieldString.lastIndexOf('_')) + '_' + creator.getId();
setter.invoke(attribute, updatedFieldString);
}
}
} catch (Exception e) {
TraceBackService.trace(e);
}
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class ConfiguratorCreatorServiceImpl method setContextToJsonField.
/**
* Set the context field to a json field. Allows to limit the json field to the configurator
* having the right configurator creator.
*
* @param creator
* @param field
*/
protected void setContextToJsonField(ConfiguratorCreator creator, MetaJsonField field) {
final String fieldName = "configuratorCreator";
final Class<?> modelClass;
final String modelName = field.getModel();
try {
modelClass = Class.forName(modelName);
} catch (ClassNotFoundException e) {
// this should not happen
TraceBackService.trace(e);
return;
}
final Mapper mapper = Mapper.of(modelClass);
final Property property = mapper.getProperty(fieldName);
final String target = property == null ? null : property.getTarget().getName();
final String targetName = property == null ? null : property.getTargetName();
field.setContextField(fieldName);
field.setContextFieldTarget(target);
field.setContextFieldTargetName(targetName);
field.setContextFieldValue(creator.getId().toString());
field.setContextFieldTitle(creator.getName());
}
use of com.axelor.db.mapper.Mapper in project axelor-open-suite by axelor.
the class ConfiguratorServiceImpl method fetchManyToManyField.
protected void fetchManyToManyField(Model parentModel, Set<? extends Model> values, MetaField metaField) throws AxelorException {
if (values != null) {
Mapper mapper = Mapper.of(parentModel.getClass());
try {
String className = MetaTool.computeFullClassName(metaField);
Set<Model> dbValues = new HashSet<>();
for (Model value : values) {
Model dbValue = JPA.find((Class<Model>) Class.forName(className), value.getId());
dbValues.add(dbValue);
}
mapper.set(parentModel, metaField.getName(), dbValues);
} catch (Exception e) {
throw new AxelorException(Configurator.class, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, e.getMessage());
}
}
}
Aggregations