|
@@ -1,12 +1,20 @@
|
|
package org.hswebframework.web.service.form.simple;
|
|
package org.hswebframework.web.service.form.simple;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import org.apache.commons.codec.digest.DigestUtils;
|
|
|
|
+import org.hsweb.ezorm.core.Trigger;
|
|
import org.hsweb.ezorm.core.ValueConverter;
|
|
import org.hsweb.ezorm.core.ValueConverter;
|
|
import org.hsweb.ezorm.rdb.RDBDatabase;
|
|
import org.hsweb.ezorm.rdb.RDBDatabase;
|
|
import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
|
|
import org.hsweb.ezorm.rdb.meta.RDBColumnMetaData;
|
|
import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
|
|
import org.hsweb.ezorm.rdb.meta.RDBTableMetaData;
|
|
import org.hsweb.ezorm.rdb.meta.converter.*;
|
|
import org.hsweb.ezorm.rdb.meta.converter.*;
|
|
import org.hsweb.ezorm.rdb.render.dialect.Dialect;
|
|
import org.hsweb.ezorm.rdb.render.dialect.Dialect;
|
|
|
|
+import org.hsweb.ezorm.rdb.simple.trigger.ScriptTraggerSupport;
|
|
|
|
+import org.hswebframework.expands.script.engine.DynamicScriptEngine;
|
|
|
|
+import org.hswebframework.expands.script.engine.DynamicScriptEngineFactory;
|
|
|
|
+import org.hswebframework.web.BusinessException;
|
|
import org.hswebframework.web.commons.entity.DataStatus;
|
|
import org.hswebframework.web.commons.entity.DataStatus;
|
|
import org.hswebframework.web.dao.form.DynamicFormColumnDao;
|
|
import org.hswebframework.web.dao.form.DynamicFormColumnDao;
|
|
import org.hswebframework.web.dao.form.DynamicFormDao;
|
|
import org.hswebframework.web.dao.form.DynamicFormDao;
|
|
@@ -296,12 +304,40 @@ public class SimpleDynamicFormService extends GenericEntityService<DynamicFormEn
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ protected Map<String,Trigger> buildTrigger(String config){
|
|
|
|
+ if(StringUtils.isEmpty(config))return new HashMap<>();
|
|
|
|
+ JSONArray triggerConfig = JSON.parseArray(config);
|
|
|
|
+ Map<String,Trigger> triggers=new HashMap<>();
|
|
|
|
+ for (int i = 0; i < triggerConfig.size(); i++) {
|
|
|
|
+ JSONObject single = triggerConfig.getJSONObject(i);
|
|
|
|
+ String trigger = single.getString("trigger");
|
|
|
|
+ String language = single.getString("language");
|
|
|
|
+ String script = single.getString("script");
|
|
|
|
+ String scriptId = DigestUtils.md5Hex(script);
|
|
|
|
+ try {
|
|
|
|
+ DynamicScriptEngine engine = DynamicScriptEngineFactory.getEngine(language);
|
|
|
|
+ if(engine==null){
|
|
|
|
+ throw new UnsupportedOperationException("not support script language : "+language);
|
|
|
|
+ }
|
|
|
|
+ if (!engine.compiled(scriptId)) {
|
|
|
|
+ engine.compile(scriptId, script);
|
|
|
|
+ }
|
|
|
|
+ Trigger singleTrigger = new ScriptTraggerSupport(engine,scriptId);
|
|
|
|
+ triggers.put(trigger,singleTrigger);
|
|
|
|
+ }catch (Exception e){
|
|
|
|
+ throw new BusinessException("compile script error :"+e.getMessage(),e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return triggers;
|
|
|
|
+ }
|
|
|
|
+
|
|
protected RDBTableMetaData buildTable(RDBDatabase database, DynamicFormEntity form, List<DynamicFormColumnEntity> columns) {
|
|
protected RDBTableMetaData buildTable(RDBDatabase database, DynamicFormEntity form, List<DynamicFormColumnEntity> columns) {
|
|
RDBTableMetaData metaData = new RDBTableMetaData();
|
|
RDBTableMetaData metaData = new RDBTableMetaData();
|
|
metaData.setComment(form.getDescribe());
|
|
metaData.setComment(form.getDescribe());
|
|
metaData.setName(form.getDatabaseTableName());
|
|
metaData.setName(form.getDatabaseTableName());
|
|
metaData.setProperties(form.getProperties());
|
|
metaData.setProperties(form.getProperties());
|
|
metaData.setAlias(form.getAlias());
|
|
metaData.setAlias(form.getAlias());
|
|
|
|
+ buildTrigger(form.getTriggers()).forEach(metaData::on);
|
|
columns.forEach(column -> {
|
|
columns.forEach(column -> {
|
|
RDBColumnMetaData columnMeta = new RDBColumnMetaData();
|
|
RDBColumnMetaData columnMeta = new RDBColumnMetaData();
|
|
columnMeta.setName(column.getColumnName());
|
|
columnMeta.setName(column.getColumnName());
|