use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class WkfDisplayServiceImpl method getWkfStatus.
@Override
public List<Map<String, Object>> getWkfStatus(Class<?> klass, Long id) {
List<Map<String, Object>> statusList = new ArrayList<>();
if (klass == null || id == null) {
return statusList;
}
Model model = (Model) JPA.em().find(klass, id);
if (model == null) {
return statusList;
}
String processInstanceId = model.getProcessInstanceId();
log.debug("Display wkf nodes of processInstanceId: {}", processInstanceId);
if (processInstanceId != null) {
WkfInstance wkfInstance = Beans.get(WkfInstanceRepository.class).findByInstnaceId(processInstanceId);
if (wkfInstance == null) {
return statusList;
}
String klassName = klass.getSimpleName();
if (model instanceof MetaJsonRecord) {
klassName = ((MetaJsonRecord) model).getJsonModel();
}
boolean valid = isValidDisplayModel(klassName, wkfInstance);
log.debug("Is valid model to display wkf nodes : {}", valid);
if (!valid) {
return statusList;
}
addActiveNodes(statusList, wkfInstance, klassName);
}
return statusList;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class WkfModelServiceImpl method importWkfModels.
@Override
public String importWkfModels(MetaFile metaFile, boolean isTranslate, String sourceLanguage, String targetLanguage) throws AxelorException {
if (metaFile == null) {
return null;
}
String extension = Files.getFileExtension(metaFile.getFileName());
if (extension == null || !extension.equals("xml")) {
throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, I18n.get(ITranslation.INVALID_WKF_MODEL_XML));
}
try {
InputStream inputStream = getClass().getResourceAsStream(IMPORT_CONFIG_PATH);
File configFile = File.createTempFile("config", ".xml");
FileOutputStream fout = new FileOutputStream(configFile);
IOUtil.copyCompletely(inputStream, fout);
File xmlFile = MetaFiles.getPath(metaFile).toFile();
File tempDir = Files.createTempDir();
File importFile = new File(tempDir, "wkfModels.xml");
Files.copy(xmlFile, importFile);
if (isTranslate) {
importFile = this.translateNodeName(importFile, sourceLanguage, targetLanguage);
}
XMLImporter importer = new XMLImporter(configFile.getAbsolutePath(), tempDir.getAbsolutePath());
final StringBuilder log = new StringBuilder();
Listener listner = new Listener() {
@Override
public void imported(Integer imported, Integer total) {
}
@Override
public void imported(Model arg0) {
}
@Override
public void handle(Model arg0, Exception err) {
log.append("Error in import: " + err.getStackTrace().toString());
}
};
importer.addListener(listner);
importer.run();
FileUtils.forceDelete(configFile);
FileUtils.forceDelete(tempDir);
FileUtils.forceDelete(xmlFile);
MetaFileRepository metaFileRepository = Beans.get(MetaFileRepository.class);
metaFileRepository.remove(metaFile);
return log.toString();
} catch (Exception e) {
return e.getMessage();
}
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class WkfModelServiceImpl method getXMLImpoter.
protected XMLImporter getXMLImpoter(String configFile, String dataFile) {
XMLImporter importer = new XMLImporter(configFile, dataFile);
final StringBuilder log = new StringBuilder();
Listener listner = new Listener() {
@Override
public void imported(Integer imported, Integer total) {
}
@Override
public void imported(Model arg0) {
}
@Override
public void handle(Model arg0, Exception err) {
log.append("Error in import: " + err.getStackTrace().toString());
}
};
importer.addListener(listner);
return importer;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class BamlServiceImpl method execute.
@Override
@Transactional
public Model execute(BamlModel bamlModel, Map<String, Object> context) {
Bindings bindings = new SimpleBindings();
if (context != null) {
bindings.putAll(context);
}
GroovyScriptHelper helper = new GroovyScriptHelper(bindings);
Object object = helper.eval(bamlModel.getResultScript());
if (object != null && object instanceof Model) {
return JpaRepository.of(EntityHelper.getEntityClass((Model) object)).save((Model) object);
}
return null;
}
use of com.axelor.db.Model in project axelor-open-suite by axelor.
the class BatchJob method executeInThread.
@Override
public void executeInThread(JobExecutionContext context) {
JobDetail jobDetail = context.getJobDetail();
MetaSchedule metaSchedule = Beans.get(MetaScheduleRepository.class).findByName(jobDetail.getKey().getName());
String batchServiceClassName = metaSchedule.getBatchServiceSelect();
Class<? extends AbstractBatchService> batchServiceClass;
try {
batchServiceClass = Class.forName(batchServiceClassName).asSubclass(AbstractBatchService.class);
} catch (ClassNotFoundException e) {
throw new UncheckedJobExecutionException(e);
}
AbstractBatchService batchService = Beans.get(batchServiceClass);
String batchCode = metaSchedule.getBatchCode();
Model batchModel = batchService.findModelByCode(batchCode);
if (batchModel == null) {
String msg = String.format("Batch %s not found with service %s", batchCode, batchServiceClassName);
throw new UncheckedJobExecutionException(msg);
}
// Apply job's parameters to the batch.
Map<String, Object> originalProperties = applyBeanPropertiesWithScriptHelper(batchModel, jobDetail.getJobDataMap());
try {
batchService.run(batchModel);
} catch (Exception e) {
throw new UncheckedJobExecutionException(e);
} finally {
if (!JPA.em().contains(batchModel)) {
batchModel = batchService.findModelByCode(batchCode);
}
// Restore original values on the batch.
applyBeanProperties(batchModel, originalProperties);
}
}
Aggregations