use of com.axelor.meta.db.repo.MetaFieldRepository in project axelor-open-suite by axelor.
the class AdvancedExportController method getModelAllFields.
public void getModelAllFields(ActionRequest request, ActionResponse response) throws ClassNotFoundException {
AdvancedExport advancedExport = request.getContext().asType(AdvancedExport.class);
inflector = Inflector.getInstance();
if (advancedExport.getMetaModel() != null) {
List<Map<String, Object>> allFieldList = new ArrayList<>();
MetaModelRepository metaModelRepository = Beans.get(MetaModelRepository.class);
MetaFieldRepository metaFieldRepository = Beans.get(MetaFieldRepository.class);
for (MetaField field : advancedExport.getMetaModel().getMetaFields()) {
Map<String, Object> allFieldMap = new HashMap<>();
allFieldMap.put("currentDomain", advancedExport.getMetaModel().getName());
Class<?> modelClass = Class.forName(advancedExport.getMetaModel().getFullName());
Mapper modelMapper = Mapper.of(modelClass);
if (modelMapper.getProperty(field.getName()) == null || modelMapper.getProperty(field.getName()).isTransient()) {
continue;
}
if (!Strings.isNullOrEmpty(field.getRelationship())) {
MetaModel metaModel = metaModelRepository.all().filter("self.name = ?", field.getTypeName()).fetchOne();
Class<?> klass = Class.forName(metaModel.getFullName());
Mapper mapper = Mapper.of(klass);
String fieldName = mapper.getNameField() == null ? "id" : mapper.getNameField().getName();
MetaField metaField = metaFieldRepository.all().filter("self.name = ?1 AND self.metaModel = ?2", fieldName, metaModel).fetchOne();
allFieldMap.put("metaField", metaField);
allFieldMap.put("targetField", field.getName() + "." + metaField.getName());
} else {
allFieldMap.put("metaField", field);
allFieldMap.put("targetField", field.getName());
}
if (Strings.isNullOrEmpty(field.getLabel())) {
allFieldMap.put("title", this.getFieldTitle(inflector, field.getName()));
} else {
allFieldMap.put("title", field.getLabel());
}
allFieldList.add(allFieldMap);
}
response.setAttr("advancedExportLineList", "value", allFieldList);
}
}
use of com.axelor.meta.db.repo.MetaFieldRepository in project axelor-open-suite by axelor.
the class GlobalAuditTracker method onComplete.
/**
* This method should be called from {@link
* AuditInterceptor#beforeTransactionCompletion(Transaction)} method to finish change recording.
*
* @param tx the transaction in which the change tracking is being done
* @param user the session user
*/
public void onComplete(Transaction tx, User user) {
List<GlobalTrackingLog> logList = LOGS.get();
LOGS.remove();
if (CollectionUtils.isEmpty(logList)) {
return;
}
MetaModelRepository modelRepo = Beans.get(MetaModelRepository.class);
MetaFieldRepository fieldRepo = Beans.get(MetaFieldRepository.class);
GlobalTrackingLogRepository logRepo = Beans.get(GlobalTrackingLogRepository.class);
GlobalTrackingConfigurationLineRepository configLineRepo = Beans.get(GlobalTrackingConfigurationLineRepository.class);
GlobalTrackingConfigurationLine configLine;
List<GlobalTrackingConfigurationLine> configLineList;
ScriptBindings bindings;
for (GlobalTrackingLog log : logList) {
configLineList = configLineRepo.all().filter("self.metaModel.name = ?", log.getMetaModelName()).fetch();
if (configLineList.isEmpty()) {
continue;
}
log.setMetaModel(modelRepo.findByName(log.getMetaModelName()));
List<GlobalTrackingLogLine> logLinesToSave = new ArrayList<>();
if ((CollectionUtils.isNotEmpty(log.getGlobalTrackingLogLineList()))) {
try {
bindings = new ScriptBindings(this.getContext(JPA.find((Class<Model>) Class.forName(log.getMetaModel().getFullName()), log.getRelatedId())));
} catch (Exception e) {
continue;
}
for (GlobalTrackingLogLine line : log.getGlobalTrackingLogLineList()) {
configLine = configLineList.stream().filter(l -> l.getMetaField().getName().equals(line.getMetaFieldName())).findFirst().orElse(null);
if (configLine == null || !this.canTrack(configLine, log.getTypeSelect()) || (!Strings.isNullOrEmpty(configLine.getTrackingCondition()) && !Boolean.TRUE.equals(new GroovyScriptHelper(bindings).eval(configLine.getTrackingCondition())))) {
continue;
}
line.setMetaField(fieldRepo.all().filter("self.metaModel.id = ? AND self.name = ?", log.getMetaModel().getId(), line.getMetaFieldName()).fetchOne());
logLinesToSave.add(line);
}
}
if (!logLinesToSave.isEmpty() || (GlobalTrackingLogRepository.TYPE_DELETE == log.getTypeSelect() && configLineList.stream().anyMatch(l -> Boolean.TRUE.equals(l.getTrackDeletion())))) {
log.getGlobalTrackingLogLineList().stream().forEach(l -> l.setGlobalTrackingLog(null));
logLinesToSave.stream().forEach(l -> l.setGlobalTrackingLog(log));
log.setUser(user);
logRepo.save(log);
}
}
}
Aggregations