use of com.axelor.script.ScriptBindings in project axelor-open-suite by axelor.
the class ConfiguratorCreatorServiceImpl method getTestingValues.
@Override
public ScriptBindings getTestingValues(ConfiguratorCreator creator) {
Map<String, Object> attributesValues = new HashMap<>();
List<MetaJsonField> attributes = creator.getAttributes();
if (attributes != null) {
for (MetaJsonField attribute : attributes) {
Object defaultAttribute = getAttributesDefaultValue(attribute);
if (defaultAttribute != null) {
attributesValues.put(attribute.getName(), getAttributesDefaultValue(attribute));
}
}
}
return new ScriptBindings(attributesValues);
}
use of com.axelor.script.ScriptBindings in project axelor-open-suite by axelor.
the class ConfiguratorFormulaServiceImpl method checkFormula.
@Override
public void checkFormula(ConfiguratorFormula formula, ConfiguratorCreator creator) throws AxelorException {
ScriptBindings defaultValueBindings = Beans.get(ConfiguratorCreatorService.class).getTestingValues(creator);
Object result = new GroovyScriptHelper(defaultValueBindings).eval(formula.getFormula());
String wantedTypeName = formula.getMetaField().getTypeName();
if (result == null) {
throw new AxelorException(formula, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.CONFIGURATOR_CREATOR_SCRIPT_ERROR));
} else if (!Beans.get(ConfiguratorService.class).areCompatible(wantedTypeName, getCalculatedClassName(result)) && !wantedTypeName.equals("one-to-many") && !wantedTypeName.equals("many-to-many")) {
throw new AxelorException(formula, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(IExceptionMessage.CONFIGURATOR_CREATOR_FORMULA_TYPE_ERROR), result.getClass().getSimpleName(), wantedTypeName);
}
}
use of com.axelor.script.ScriptBindings 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);
}
}
}
use of com.axelor.script.ScriptBindings in project axelor-open-suite by axelor.
the class ImportAdvancedImport method importGeneral.
@SuppressWarnings("unchecked")
public Object importGeneral(Object bean, Map<String, Object> values) throws ClassNotFoundException {
if (bean == null) {
return bean;
}
FileTab fileTab = fileTabRepo.find(Long.valueOf(values.get("fileTabId").toString()));
ScriptHelper scriptHelper = new GroovyScriptHelper(new ScriptBindings(values));
List<String> exprs = (List<String>) values.get("ifConditions" + fileTab.getId());
if (!CollectionUtils.isEmpty(exprs)) {
if ((boolean) scriptHelper.eval(String.join(" || ", exprs))) {
return null;
}
}
if (((Model) bean).getId() == null) {
List<Property> propList = this.getProperties(bean);
JPA.save((Model) bean);
this.addJsonObjectRecord(bean, fileTab, fileTab.getMetaModel().getName(), values);
int fieldSeq = 2;
int btnSeq = 3;
for (Property prop : propList) {
validatorService.createCustomObjectSet(fileTab.getClass().getName(), prop.getTarget().getName(), fieldSeq);
validatorService.createCustomButton(fileTab.getClass().getName(), prop.getTarget().getName(), btnSeq);
this.addJsonObjectRecord(prop.get(bean), fileTab, StringUtils.substringAfterLast(prop.getTarget().getName(), "."), values);
fieldSeq++;
btnSeq++;
}
}
final String ACTIONS_TO_APPLY = "actionsToApply" + fileTab.getId();
if (!ObjectUtils.isEmpty(values.get(ACTIONS_TO_APPLY))) {
bean = actionService.apply(values.get(ACTIONS_TO_APPLY).toString(), bean);
}
return bean;
}
Aggregations