diff --git a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java index b780f5be0..db72357a3 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java @@ -38,6 +38,7 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.chart.info.ChartInfoCollector; import com.fr.design.mainframe.template.info.TemplateInfoCollector; +import com.fr.design.mainframe.template.info.TemplateOperate; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.template.info.TimeConsumeTimer; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; @@ -1262,11 +1263,7 @@ public abstract class JTemplate> template.setTemplateID(templateId); } - public void addWidgetProcessInfo(Widget widget) { - - } - - public void removeWidgetProcessInfo(Widget widget) { + public void updateTemplateOperationInfo(TemplateOperate operateInfo) { } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java new file mode 100644 index 000000000..5c2cfb071 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java @@ -0,0 +1,20 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.json.JSONObject; + +/** + * Created by kerry on 2020-05-08 + */ +public interface TemplateOperate { + /** + * 获取模板操作类型 + * @return 操作类型 + */ + String getOperateType(); + + /** + * 将模板操作信息转换成json格式 + * @return jsonObject + */ + JSONObject toJSONObject(); +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java index eb1404ab0..fc1defcdf 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateProcessInfo.java @@ -4,7 +4,6 @@ import com.fr.base.Style; import com.fr.base.io.BaseBook; import com.fr.chart.chartattr.ChartCollection; import com.fr.chartx.attr.ChartProvider; -import com.fr.form.ui.Widget; import com.fr.json.JSONArray; /** @@ -46,12 +45,9 @@ public abstract class TemplateProcessInfo { //获取组件信息 public abstract JSONArray getComponentsInfo(); - public void addComponentCreateInfo(Widget widget) { - } - public void addComponentRemoveInfo(Widget widget) { + public abstract void updateTemplateOperationInfo(TemplateOperate templateOption); - } protected boolean isTestCell(Object value, Style style) { if (value instanceof ChartCollection && isTestChartCollection((ChartCollection) value)) { diff --git a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java index d5dad2e89..d6931db5e 100644 --- a/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java +++ b/designer-form/src/main/java/com/fr/design/form/util/FormDesignerUtils.java @@ -3,6 +3,8 @@ package com.fr.design.form.util; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.template.info.ComponentCreateOperate; +import com.fr.design.mainframe.template.info.ComponentDeleteOperate; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WFitLayout; @@ -32,12 +34,12 @@ public class FormDesignerUtils { public static void addWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - jTemplate.addWidgetProcessInfo(widget); + jTemplate.updateTemplateOperationInfo(new ComponentCreateOperate(widget)); } public static void removeWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - jTemplate.removeWidgetProcessInfo(widget); + jTemplate.updateTemplateOperationInfo(new ComponentDeleteOperate(widget)); } } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index 8ca0252b9..01c70cb28 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -45,6 +45,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.form.FormECCompositeProvider; import com.fr.design.mainframe.form.FormECDesignerProvider; import com.fr.design.mainframe.template.info.JFormProcessInfo; +import com.fr.design.mainframe.template.info.TemplateOperate; import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; @@ -105,7 +106,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; -import java.util.UUID; public class JForm extends JTemplate implements BaseJForm
{ private static final String FORM_CARD = "FORM"; @@ -214,25 +214,14 @@ public class JForm extends JTemplate implements BaseJForm getProcessInfo() { - if (processInfo == null) { - processInfo = new JFormProcessInfo(template); - } return processInfo; } - public void addWidgetProcessInfo(Widget widget) { - if (processInfo == null) { - return; - } - widget.setWidgetID(UUID.randomUUID().toString()); - processInfo.addComponentCreateInfo(widget); - } - - public void removeWidgetProcessInfo(Widget widget) { + public void updateTemplateOperationInfo(TemplateOperate operateInfo) { if (processInfo == null) { return; } - processInfo.addComponentRemoveInfo(widget); + processInfo.updateTemplateOperationInfo(operateInfo); } public FormECCompositeProvider getReportComposite() { diff --git a/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentCreateOperate.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentCreateOperate.java new file mode 100644 index 000000000..d83a6c2fa --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentCreateOperate.java @@ -0,0 +1,36 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.form.ui.Widget; +import com.fr.json.JSONObject; + +import java.util.UUID; + +/** + * Created by kerry on 2020-05-08 + */ +public class ComponentCreateOperate extends ComponentOperate { + public static final String OPERATE_TYPE = "componentCreate"; + private static final String ATTR_CREATE_TIME = "createTime"; + private long createTime = 0L; + + + public ComponentCreateOperate(Widget widget) { + super(widget); + widget.setWidgetID(UUID.randomUUID().toString()); + this.createTime = System.currentTimeMillis(); + } + + + @Override + public String getOperateType() { + return OPERATE_TYPE; + } + + @Override + public JSONObject toJSONObject() { + JSONObject jo = super.toJSONObject(); + jo.put(ATTR_CREATE_TIME, createTime); + return jo; + } + +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentDeleteOperate.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentDeleteOperate.java new file mode 100644 index 000000000..e49618164 --- /dev/null +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentDeleteOperate.java @@ -0,0 +1,29 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.form.ui.Widget; +import com.fr.json.JSONObject; + +/** + * Created by kerry on 2020-05-08 + */ +public class ComponentDeleteOperate extends ComponentOperate { + public static final String OPERATE_TYPE = "componentDelete"; + private long deleteTime = 0L; + + public ComponentDeleteOperate(Widget widget) { + super(widget); + this.deleteTime = System.currentTimeMillis(); + } + + @Override + public String getOperateType() { + return OPERATE_TYPE; + } + + @Override + public JSONObject toJSONObject() { + JSONObject jo = super.toJSONObject(); + jo.put(ATTR_DELETE_TIME, deleteTime); + return jo; + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentProcessInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentOperate.java similarity index 63% rename from designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentProcessInfo.java rename to designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentOperate.java index 50e632a6c..9ca2cdba9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentProcessInfo.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentOperate.java @@ -8,44 +8,29 @@ import com.fr.form.ui.container.WCardLayout; import com.fr.json.JSONObject; /** - * Created by kerry on 2020-05-07 + * Created by kerry on 2020-05-08 */ -public class ComponentProcessInfo { +public abstract class ComponentOperate implements TemplateOperate { private static final String ATTR_COMPONENT_ID = "componentID"; private static final String ATTR_COMPONENT_NAME = "componentName"; private static final String ATTR_COMPONENT_TYPE = "componentType"; - private static final String ATTR_CREATE_TIME = "createTime"; - private static final String ATTR_DELETE_TIME = "deleteTime"; - private String componentID; - private String componentName; - private String componentType; - private long createTime = 0L; - private long deleteTime = 0L; + protected static final String ATTR_CREATE_TIME = "createTime"; + protected static final String ATTR_DELETE_TIME = "deleteTime"; + private Widget widget; - public ComponentProcessInfo(Widget widget) { - this(widget, 0L); + public ComponentOperate(Widget widget) { + this.widget = widget; } - public ComponentProcessInfo(Widget widget, long createTime) { - this.componentID = widget.getWidgetID(); - this.componentName = widget.getWidgetName(); - this.componentType = ComponentType.parseType(widget).name(); - this.createTime = createTime; - } - - public void updateDeleteTime(long deleteTime) { - this.deleteTime = deleteTime; - } - - + @Override public JSONObject toJSONObject() { JSONObject jo = new JSONObject(); - jo.put(ATTR_COMPONENT_ID, componentID) - .put(ATTR_COMPONENT_NAME, componentName) - .put(ATTR_COMPONENT_TYPE, componentType) - .put(ATTR_CREATE_TIME, createTime) - .put(ATTR_DELETE_TIME, deleteTime); + jo.put(ATTR_COMPONENT_ID, widget.getWidgetID()) + .put(ATTR_COMPONENT_NAME, widget.getWidgetName()) + .put(ATTR_COMPONENT_TYPE, ComponentType.parseType(widget).name()) + .put(ATTR_CREATE_TIME, 0L) + .put(ATTR_DELETE_TIME, 0L); return jo; } diff --git a/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java index 5486ef82a..a77a0f58a 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java @@ -10,7 +10,9 @@ import com.fr.form.ui.ElementCaseEditorProvider; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WLayout; +import com.fr.general.ComparatorUtils; import com.fr.json.JSONArray; +import com.fr.json.JSONObject; import com.fr.report.cell.DefaultTemplateCellElement; import java.util.Iterator; @@ -28,7 +30,7 @@ public class JFormProcessInfo extends TemplateProcessInfo { private static final Pattern PATTERN = Pattern.compile(REGEX); - private Map componentProcessInfoMap = new ConcurrentHashMap(); + private Map componentProcessInfoMap = new ConcurrentHashMap(); public JFormProcessInfo(Form form) { super(form); @@ -166,23 +168,34 @@ public class JFormProcessInfo extends TemplateProcessInfo { @Override public JSONArray getComponentsInfo() { JSONArray ja = new JSONArray(); - for (ComponentProcessInfo value : componentProcessInfoMap.values()) { - ja.put(value.toJSONObject()); + for (JSONObject value : componentProcessInfoMap.values()) { + ja.put(value); } this.componentProcessInfoMap.clear(); return ja; } - public void addComponentCreateInfo(Widget widget) { - componentProcessInfoMap.put(widget.getWidgetID(), new ComponentProcessInfo(widget, System.currentTimeMillis())); + @Override + public void updateTemplateOperationInfo(TemplateOperate templateOperate) { + if (ComparatorUtils.equals(ComponentCreateOperate.OPERATE_TYPE, templateOperate.getOperateType())) { + addComponentCreateInfo(templateOperate.toJSONObject()); + } + if (ComparatorUtils.equals(ComponentDeleteOperate.OPERATE_TYPE, templateOperate.getOperateType())) { + addComponentRemoveInfo(templateOperate.toJSONObject()); + } + } + private void addComponentCreateInfo(JSONObject jsonObject) { + String componentID = jsonObject.optString("componentID"); + componentProcessInfoMap.put(componentID, jsonObject); } - public void addComponentRemoveInfo(Widget widget) { - ComponentProcessInfo info = componentProcessInfoMap.get(widget.getWidgetID()); + private void addComponentRemoveInfo(JSONObject jsonObject) { + String componentID = jsonObject.optString("componentID"); + JSONObject info = componentProcessInfoMap.get(componentID); if (info == null) { - info = new ComponentProcessInfo(widget); - componentProcessInfoMap.put(widget.getWidgetID(), info); + info = jsonObject; + componentProcessInfoMap.put(componentID, jsonObject); } - info.updateDeleteTime(System.currentTimeMillis()); + info.put("deleteTime", System.currentTimeMillis()); } } diff --git a/designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentProcessInfoTest.java b/designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentCreateOperateTest.java similarity index 52% rename from designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentProcessInfoTest.java rename to designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentCreateOperateTest.java index abed86959..1bebd0be7 100644 --- a/designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentProcessInfoTest.java +++ b/designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentCreateOperateTest.java @@ -13,27 +13,26 @@ import org.junit.Test; /** * Created by kerry on 2020-05-08 */ -public class ComponentProcessInfoTest { +public class ComponentCreateOperateTest { @Test public void testToJSONObject() { Widget button = new FreeButton(); button.setWidgetName("button1"); + ComponentCreateOperate info = new ComponentCreateOperate(button); button.setWidgetID("xxxxxxx"); - ComponentProcessInfo info = new ComponentProcessInfo(button); JSONObject jo = info.toJSONObject(); Assert.assertEquals("xxxxxxx", jo.optString("componentID")); Assert.assertEquals("button1", jo.optString("componentName")); Assert.assertEquals("Widget", jo.optString("componentType")); - Assert.assertEquals("0", jo.optString("createTime")); Assert.assertEquals("0", jo.optString("deleteTime")); } @Test public void testComponentType() { - Assert.assertEquals(ComponentProcessInfo.ComponentType.Widget, ComponentProcessInfo.ComponentType.parseType(new FreeButton())); - Assert.assertEquals(ComponentProcessInfo.ComponentType.Report, ComponentProcessInfo.ComponentType.parseType(new ElementCaseEditor())); - Assert.assertEquals(ComponentProcessInfo.ComponentType.Chart, ComponentProcessInfo.ComponentType.parseType(new ChartEditor())); - Assert.assertEquals(ComponentProcessInfo.ComponentType.Absolute, ComponentProcessInfo.ComponentType.parseType(new WAbsoluteLayout())); - Assert.assertEquals(ComponentProcessInfo.ComponentType.TabLayout, ComponentProcessInfo.ComponentType.parseType(new WCardLayout())); + Assert.assertEquals(ComponentOperate.ComponentType.Widget, ComponentOperate.ComponentType.parseType(new FreeButton())); + Assert.assertEquals(ComponentOperate.ComponentType.Report, ComponentOperate.ComponentType.parseType(new ElementCaseEditor())); + Assert.assertEquals(ComponentOperate.ComponentType.Chart, ComponentOperate.ComponentType.parseType(new ChartEditor())); + Assert.assertEquals(ComponentOperate.ComponentType.Absolute, ComponentOperate.ComponentType.parseType(new WAbsoluteLayout())); + Assert.assertEquals(ComponentOperate.ComponentType.TabLayout, ComponentOperate.ComponentType.parseType(new WCardLayout())); } } diff --git a/designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java b/designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java index ee366cc7d..4db78a271 100644 --- a/designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java +++ b/designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java @@ -137,8 +137,8 @@ public class JFormProcessInfoTest { FreeButton button2 = new FreeButton(); button1.setWidgetID("xxxx1"); button2.setWidgetID("xxxx2"); - jFormProcessInfo.addComponentCreateInfo(button1); - jFormProcessInfo.addComponentRemoveInfo(button2); + Reflect.on(jFormProcessInfo).call("addComponentCreateInfo", new ComponentCreateOperate(button1).toJSONObject()); + Reflect.on(jFormProcessInfo).call("addComponentRemoveInfo", new ComponentDeleteOperate(button2).toJSONObject()); JSONArray ja = jFormProcessInfo.getComponentsInfo(); Assert.assertEquals(2, ja.size()); diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java index a4b86b189..a058f7019 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JWorkBookProcessInfo.java @@ -135,4 +135,9 @@ public class JWorkBookProcessInfo extends TemplateProcessInfo { public JSONArray getComponentsInfo() { return new JSONArray(); } + + @Override + public void updateTemplateOperationInfo(TemplateOperate templateOption) { + + } }