Search in sources :

Example 51 with Model

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;
}
Also used : WkfInstance(com.axelor.apps.bpm.db.WkfInstance) ArrayList(java.util.ArrayList) WkfModel(com.axelor.apps.bpm.db.WkfModel) Model(com.axelor.db.Model) WkfInstanceRepository(com.axelor.apps.bpm.db.repo.WkfInstanceRepository) HashMap(java.util.HashMap) Map(java.util.Map) MetaJsonRecord(com.axelor.meta.db.MetaJsonRecord)

Example 52 with Model

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();
    }
}
Also used : AxelorException(com.axelor.exception.AxelorException) MetaFileRepository(com.axelor.meta.db.repo.MetaFileRepository) Listener(com.axelor.data.Listener) InputStream(java.io.InputStream) FileOutputStream(java.io.FileOutputStream) WkfModel(com.axelor.apps.bpm.db.WkfModel) MetaModel(com.axelor.meta.db.MetaModel) Model(com.axelor.db.Model) XMLImporter(com.axelor.data.xml.XMLImporter) File(java.io.File) MetaFile(com.axelor.meta.db.MetaFile) AxelorException(com.axelor.exception.AxelorException)

Example 53 with Model

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;
}
Also used : Listener(com.axelor.data.Listener) WkfModel(com.axelor.apps.bpm.db.WkfModel) MetaModel(com.axelor.meta.db.MetaModel) Model(com.axelor.db.Model) XMLImporter(com.axelor.data.xml.XMLImporter) AxelorException(com.axelor.exception.AxelorException)

Example 54 with Model

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;
}
Also used : SimpleBindings(javax.script.SimpleBindings) Model(com.axelor.db.Model) BamlModel(com.axelor.apps.bpm.db.BamlModel) Bindings(javax.script.Bindings) SimpleBindings(javax.script.SimpleBindings) GroovyScriptHelper(com.axelor.script.GroovyScriptHelper) Transactional(com.google.inject.persist.Transactional)

Example 55 with Model

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);
    }
}
Also used : JobDetail(org.quartz.JobDetail) MetaSchedule(com.axelor.meta.db.MetaSchedule) MetaScheduleRepository(com.axelor.meta.db.repo.MetaScheduleRepository) Model(com.axelor.db.Model) AbstractBatchService(com.axelor.apps.base.service.administration.AbstractBatchService) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Aggregations

Model (com.axelor.db.Model)77 MetaModel (com.axelor.meta.db.MetaModel)22 AxelorException (com.axelor.exception.AxelorException)19 ArrayList (java.util.ArrayList)18 HashMap (java.util.HashMap)16 Context (com.axelor.rpc.Context)15 Transactional (com.google.inject.persist.Transactional)15 List (java.util.List)14 Mapper (com.axelor.db.mapper.Mapper)13 IOException (java.io.IOException)13 File (java.io.File)12 Map (java.util.Map)12 Property (com.axelor.db.mapper.Property)11 MetaJsonRecord (com.axelor.meta.db.MetaJsonRecord)9 JsonContext (com.axelor.rpc.JsonContext)8 MetaModelRepository (com.axelor.meta.db.repo.MetaModelRepository)7 Strings (com.google.common.base.Strings)7 HashSet (java.util.HashSet)7 FullContext (com.axelor.apps.tool.context.FullContext)6 Beans (com.axelor.inject.Beans)6