From 42d9b9229f1a7142b5c1bbf5e40ee4141c9a6293 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 8 May 2020 13:44:18 +0800 Subject: [PATCH 01/12] =?UTF-8?q?REPORT-30031=E3=80=90=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E5=9F=8B=E7=82=B9=E3=80=91=E6=A8=A1=E6=9D=BF=E8=80=97?= =?UTF-8?q?=E6=97=B6=E5=92=8C=E6=A8=A1=E6=9D=BF=E5=88=B6=E4=BD=9C=E5=9F=8B?= =?UTF-8?q?=E7=82=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 14 +- .../burying/point/AbstractPointInfo.java | 9 +- .../mainframe/template/info/TemplateInfo.java | 107 ++++++------- .../template/info/TemplateInfoCollector.java | 113 ++++++++++--- .../template/info/TemplateProcessInfo.java | 44 ++++++ .../info/TemplateInfoCollectorTest.java | 129 +++++++++------ .../template/info/TemplateInfoTest.java | 88 ++++++----- .../template/info/TemplateInfoTestHelper.java | 18 ++- .../design/mainframe/template/info/tpl.info | 44 +++--- .../designer/beans/models/SelectionModel.java | 4 + .../design/form/util/FormDesignerUtils.java | 24 ++- .../java/com/fr/design/mainframe/JForm.java | 21 +++ .../fr/design/mainframe/ToolBarButton.java | 8 +- .../template/info/ComponentProcessInfo.java | 73 +++++++++ .../template/info/JFormProcessInfo.java | 148 +++++++++++++++++ .../info/ComponentProcessInfoTest.java | 39 +++++ .../template/info/JFormProcessInfoTest.java | 149 ++++++++++++++++++ .../fr/design/mainframe/JPolyWorkBook.java | 12 ++ .../info/JPolyWorkBookProcessInfo.java | 77 +++++++++ .../template/info/JWorkBookProcessInfo.java | 83 ++++++++-- .../info/JWorkBookProcessInfoTest.java | 49 ++++++ 21 files changed, 1036 insertions(+), 217 deletions(-) create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentProcessInfo.java create mode 100644 designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentProcessInfoTest.java create mode 100644 designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java create mode 100644 designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java create mode 100644 designer-realize/src/test/java/com.fr/design/mainframe/template/info/JWorkBookProcessInfoTest.java 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 29c1dcb53..03248efb1 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 @@ -97,7 +97,7 @@ public abstract class JTemplate> private static short currentIndex = 0;// 此变量用于多次新建模板时,让名字不重复 private DesignModelAdapter designModel; private PreviewProvider previewType; - private TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); + protected TimeConsumeTimer consumeTimer = new TimeConsumeTimer(); public int resolution = ScreenResolution.getScreenResolution(); public JTemplate() { @@ -266,7 +266,7 @@ public abstract class JTemplate> try { this.template = JTemplateFactory.asIOFile(this.editingFILE); setTarget(this.template); - + // 先移除旧的。 removeCenterPane(); // 加入新的 @@ -275,19 +275,19 @@ public abstract class JTemplate> FineLoggerFactory.getLogger().error(e.getMessage(), e); } } - + private void addCenterPane() { - + this.centerPane = createCenterPane(); this.add(centerPane, BorderLayout.CENTER); } - + private void removeCenterPane() { - + JComponent centerPane = this.centerPane; this.remove(centerPane); } - + /** * 刷新容器 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java index 6646bfd09..93ff42690 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java @@ -11,6 +11,9 @@ public abstract class AbstractPointInfo implements BasePointInfo { protected int idleDayCount; // 到现在为止,埋点闲置的天数 + //是否是测试模板 + protected boolean isTestTemplate; + @Override public void resetIdleDayCount() { this.idleDayCount = 0; @@ -38,10 +41,14 @@ public abstract class AbstractPointInfo implements BasePointInfo { } } + public void setTestTemplate(boolean testTemplate) { + isTestTemplate = testTemplate; + } + /** * 是否为测试模板 */ - protected abstract boolean isTestTemplate(); + public abstract boolean isTestTemplate(); /** * 是否已经制作完成 diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index e233bc6e5..efd245bab 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -4,9 +4,7 @@ import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.burying.point.AbstractPointInfo; import com.fr.general.CloudCenter; -import com.fr.general.GeneralUtils; import com.fr.json.JSONObject; -import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; @@ -22,6 +20,7 @@ import java.util.Map; */ public class TemplateInfo extends AbstractPointInfo { static final String XML_TAG = "TemplateInfo"; + private static final String SIMPLE_DATE_PATTRN = "yyyy-MM-dd HH:mm"; private static final String CONSUMING_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.consuming") + "/single"; private static final String PROCESS_URL = CloudCenter.getInstance().acquireUrlByKind("tempinfo.process") + "/single"; @@ -37,18 +36,17 @@ public class TemplateInfo extends AbstractPointInfo { private static final String ATTR_CELL_COUNT = "cell_count"; private static final String ATTR_BLOCK_COUNT = "block_count"; private static final String ATTR_REPORT_TYPE = "report_type"; - private static final String ATTR_ACTIVITYKEY = "activitykey"; - private static final String ATTR_JAR_TIME = "jar_time"; private static final String ATTR_CREATE_TIME = "create_time"; private static final String ATTR_UUID = "uuid"; - private static final String ATTR_TIME_CONSUME = "time_consume"; - private static final String ATTR_ORIGIN_TIME = "originTime"; - private static final String ATTR_VERSION = "version"; - private static final String ATTR_USERNAME = "username"; + private static final String ATTR_UID = "uid"; + private static final String ATTR_SAVE_RECORD = "saveRecord"; + private static final String ATTR_PARA_APPLY = "paraApply"; + private static final String ATTR_COMPONENTS_INFO = "components_info"; + + private static final String TEST_TEMPLATE_FLAG = "test_template"; private static final int VALID_CELL_COUNT = 5; // 有效报表模板的格子数 private static final int VALID_WIDGET_COUNT = 5; // 有效报表模板的控件数 - private static final int COMPLETE_DAY_COUNT = 15; // 判断模板是否完成的天数 private String templateID = StringUtils.EMPTY; private String originID = StringUtils.EMPTY; @@ -76,28 +74,25 @@ public class TemplateInfo extends AbstractPointInfo { } public static TemplateInfo newInstance(String templateID) { - return newInstance(templateID, StringUtils.EMPTY, 0); + return newInstance(templateID, StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY); + } + + public static TemplateInfo newInstance(String templateID, String originID, String saveRecord) { + String createTime = new SimpleDateFormat(SIMPLE_DATE_PATTRN).format(Calendar.getInstance().getTime()); + return newInstance(templateID, originID, saveRecord, createTime); } - public static TemplateInfo newInstance(String templateID, String originID, int originTime) { + public static TemplateInfo newInstance(String templateID, String originID, String saveRecord, String createTime) { HashMap consumingMap = new HashMap<>(); - String username = MarketConfig.getInstance().getBbsUsername(); String uuid = DesignerEnvManager.getEnvManager().getUUID(); - String activitykey = DesignerEnvManager.getEnvManager().getActivationKey(); - String createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(Calendar.getInstance().getTime()); - String jarTime = GeneralUtils.readBuildNO(); - String version = ProductConstants.VERSION; - consumingMap.put(ATTR_USERNAME, username); + MarketConfig config = MarketConfig.getInstance(); consumingMap.put(ATTR_UUID, uuid); - consumingMap.put(ATTR_ACTIVITYKEY, activitykey); consumingMap.put(ATTR_TEMPLATE_ID, templateID); consumingMap.put(ATTR_ORIGIN_ID, originID); consumingMap.put(ATTR_CREATE_TIME, createTime); - consumingMap.put(ATTR_TIME_CONSUME, originTime); // timeConsume 在原来模版的基础上累加 - consumingMap.put(ATTR_ORIGIN_TIME, originTime); - consumingMap.put(ATTR_JAR_TIME, jarTime); - consumingMap.put(ATTR_VERSION, version); + consumingMap.put(ATTR_UID, config.getBBSAttr().getBbsUid()); + consumingMap.put(ATTR_SAVE_RECORD, saveRecord); TemplateInfo templateInfo = new TemplateInfo(templateID, originID); templateInfo.consumingMap = consumingMap; @@ -109,14 +104,21 @@ public class TemplateInfo extends AbstractPointInfo { return templateID; } - String getOriginID() { - return originID; + public String getTemplateInfoID() { + return templateID + "_" + getSaveTime(); } - int getTimeConsume() { - return (int) consumingMap.get(ATTR_TIME_CONSUME); + public long getSaveTime() { + String save_record = (String) consumingMap.get(ATTR_SAVE_RECORD); + JSONObject jo = new JSONObject(save_record); + return jo.optLong("time"); } + public String getTemplateCreateTime() { + return (String) consumingMap.get(ATTR_CREATE_TIME); + } + + @Override public void writeXML(XMLPrintWriter writer) { writer.startTAG(XML_TAG); @@ -129,6 +131,7 @@ public class TemplateInfo extends AbstractPointInfo { if (idleDayCount >= 0) { writer.attr(ATTR_DAY_COUNT, this.idleDayCount); } + writer.attr(TEST_TEMPLATE_FLAG, this.isTestTemplate); writeProcessMap(writer); writeConsumingMap(writer); @@ -143,19 +146,17 @@ public class TemplateInfo extends AbstractPointInfo { writer.attr(ATTR_CELL_COUNT, (int) processMap.get(ATTR_CELL_COUNT)); writer.attr(ATTR_BLOCK_COUNT, (int) processMap.get(ATTR_BLOCK_COUNT)); writer.attr(ATTR_REPORT_TYPE, (int) processMap.get(ATTR_REPORT_TYPE)); + writer.attr(ATTR_PARA_APPLY, (int) processMap.get(ATTR_PARA_APPLY)); + writer.attr(ATTR_COMPONENTS_INFO, (String) processMap.get(ATTR_COMPONENTS_INFO)); writer.end(); } private void writeConsumingMap(XMLPrintWriter writer) { writer.startTAG(XML_CONSUMING_MAP); - writer.attr(ATTR_ACTIVITYKEY, (String) consumingMap.get(ATTR_ACTIVITYKEY)); - writer.attr(ATTR_JAR_TIME, (String) consumingMap.get(ATTR_JAR_TIME)); writer.attr(ATTR_CREATE_TIME, (String) consumingMap.get(ATTR_CREATE_TIME)); writer.attr(ATTR_UUID, (String) consumingMap.get(ATTR_UUID)); - writer.attr(ATTR_TIME_CONSUME, (int) consumingMap.get(ATTR_TIME_CONSUME)); - writer.attr(ATTR_ORIGIN_TIME, (int) consumingMap.get(ATTR_ORIGIN_TIME)); - writer.attr(ATTR_VERSION, (String) consumingMap.get(ATTR_VERSION)); - writer.attr(ATTR_USERNAME, (String) consumingMap.get(ATTR_USERNAME)); + writer.attr(ATTR_UID, (int) consumingMap.get(ATTR_UID)); + writer.attr(ATTR_SAVE_RECORD, (String) consumingMap.get(ATTR_SAVE_RECORD)); writer.end(); } @@ -163,6 +164,7 @@ public class TemplateInfo extends AbstractPointInfo { public void readXML(XMLableReader reader) { if (!reader.isChildNode()) { idleDayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); + isTestTemplate = reader.getAttrAsBoolean(TEST_TEMPLATE_FLAG, false); templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); originID = reader.getAttrAsString(ATTR_ORIGIN_ID, StringUtils.EMPTY); } else { @@ -175,18 +177,16 @@ public class TemplateInfo extends AbstractPointInfo { processMap.put(ATTR_CELL_COUNT, reader.getAttrAsInt(ATTR_CELL_COUNT, 0)); processMap.put(ATTR_BLOCK_COUNT, reader.getAttrAsInt(ATTR_BLOCK_COUNT, 0)); processMap.put(ATTR_REPORT_TYPE, reader.getAttrAsInt(ATTR_REPORT_TYPE, 0)); + processMap.put(ATTR_PARA_APPLY, reader.getAttrAsInt(ATTR_PARA_APPLY, 0)); + processMap.put(ATTR_COMPONENTS_INFO, reader.getAttrAsString(ATTR_COMPONENTS_INFO, StringUtils.EMPTY)); processMap.put(ATTR_TEMPLATE_ID, templateID); } else if (XML_CONSUMING_MAP.equals(name)) { - consumingMap.put(ATTR_ACTIVITYKEY, reader.getAttrAsString(ATTR_ACTIVITYKEY, StringUtils.EMPTY)); - consumingMap.put(ATTR_JAR_TIME, reader.getAttrAsString(ATTR_JAR_TIME, StringUtils.EMPTY)); consumingMap.put(ATTR_CREATE_TIME, reader.getAttrAsString(ATTR_CREATE_TIME, StringUtils.EMPTY)); consumingMap.put(ATTR_TEMPLATE_ID, templateID); consumingMap.put(ATTR_ORIGIN_ID, originID); consumingMap.put(ATTR_UUID, reader.getAttrAsString(ATTR_UUID, StringUtils.EMPTY)); - consumingMap.put(ATTR_TIME_CONSUME, reader.getAttrAsInt(ATTR_TIME_CONSUME, 0)); - consumingMap.put(ATTR_ORIGIN_TIME, reader.getAttrAsInt(ATTR_ORIGIN_TIME, 0)); - consumingMap.put(ATTR_VERSION, reader.getAttrAsString(ATTR_VERSION, "8.0")); - consumingMap.put(ATTR_USERNAME, reader.getAttrAsString(ATTR_USERNAME, StringUtils.EMPTY)); + consumingMap.put(ATTR_UID, reader.getAttrAsInt(ATTR_UID, 0)); + consumingMap.put(ATTR_SAVE_RECORD, reader.getAttrAsString(ATTR_SAVE_RECORD, StringUtils.EMPTY)); } } catch (Exception ex) { // 什么也不做,使用默认值 @@ -195,17 +195,8 @@ public class TemplateInfo extends AbstractPointInfo { } @Override - protected boolean isTestTemplate() { - if (!isComplete()) { - return false; - } - - int reportType = (int) processMap.get(ATTR_REPORT_TYPE); - int cellCount = (int) processMap.get(ATTR_CELL_COUNT); - int floatCount = (int) processMap.get(ATTR_FLOAT_COUNT); - int blockCount = (int) processMap.get(ATTR_BLOCK_COUNT); - int widgetCount = (int) processMap.get(ATTR_WIDGET_COUNT); - return isTestTemplate(reportType, cellCount, floatCount, blockCount, widgetCount); + public boolean isTestTemplate() { + return isTestTemplate; } public static boolean isTestTemplate(int reportType, int cellCount, int floatCount, int blockCount, int widgetCount) { @@ -222,25 +213,17 @@ public class TemplateInfo extends AbstractPointInfo { @Override protected boolean isComplete() { - // 条件 1. 超过15天未编辑 - // 条件 2. 设计器在这段未编辑的时间内启动超过 X 次(目前定的 X = 3)。即"设计器最近 X 次启动的时间跨度" < "未编辑时间"; - - return idleDayCount > COMPLETE_DAY_COUNT - && DesignerOpenHistory.getInstance().isOpenEnoughTimesInPeriod(idleDayCount); + return true; } @Override public Map getSendInfo() { Map sendMap = new HashMap<>(); sendMap.put(CONSUMING_URL, new JSONObject(consumingMap).toString()); - sendMap.put(PROCESS_URL, new JSONObject(processMap).toString()); + sendMap.put(PROCESS_URL, new JSONObject(processMap).toString()); return sendMap; } - void addTimeConsume(int timeConsume) { - timeConsume += (int) consumingMap.get(ATTR_TIME_CONSUME); // 加上之前的累计编辑时间 - consumingMap.put(ATTR_TIME_CONSUME, timeConsume); - } void updateProcessMap(TemplateProcessInfo processInfo) { HashMap processMap = new HashMap<>(); @@ -253,11 +236,13 @@ public class TemplateInfo extends AbstractPointInfo { processMap.put(ATTR_FLOAT_COUNT, processInfo.getFloatCount()); processMap.put(ATTR_BLOCK_COUNT, processInfo.getBlockCount()); processMap.put(ATTR_WIDGET_COUNT, processInfo.getWidgetCount()); - + processMap.put(ATTR_PARA_APPLY, processInfo.useParaPane() ? 1 : 0); + processMap.put(ATTR_COMPONENTS_INFO, processInfo.getComponentsInfo().toString()); this.processMap = processMap; } + int getIdleDayCount() { return this.idleDayCount; } -} \ No newline at end of file +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index 8c4e7f18d..bdc853796 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -1,6 +1,8 @@ package com.fr.design.mainframe.template.info; import com.fr.design.mainframe.burying.point.AbstractPointCollector; +import com.fr.design.mainframe.burying.point.AbstractPointInfo; +import com.fr.json.JSONObject; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; @@ -8,6 +10,10 @@ import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * 做模板的过程和耗时收集,辅助类 @@ -19,8 +25,11 @@ public class TemplateInfoCollector extends AbstractPointCollector private static final String XML_FILE_NAME = "tpl.info"; private static TemplateInfoCollector instance; private DesignerOpenHistory designerOpenHistory; + //记录指定模板最新的模板耗时信息ID + private Map latestTemplateInfo; private TemplateInfoCollector() { + super(); } public static TemplateInfoCollector getInstance() { @@ -34,7 +43,7 @@ public class TemplateInfoCollector extends AbstractPointCollector * 根据模板ID是否在收集列表中,判断是否需要收集当前模板的信息 */ public boolean contains(String templateID) { - return StringUtils.isNotEmpty(templateID) && pointInfoMap.containsKey(templateID); + return StringUtils.isNotEmpty(templateID) && latestTemplateInfo.containsKey(templateID); } /** @@ -51,27 +60,43 @@ public class TemplateInfoCollector extends AbstractPointCollector if (!shouldCollectInfo()) { return; } + long saveTime = System.currentTimeMillis(); - TemplateInfo templateInfo; - if (this.contains(templateID)) { - templateInfo = pointInfoMap.get(templateID); - } else { - int originTime = this.contains(originID) ? pointInfoMap.get(originID).getTimeConsume() : 0; - templateInfo = TemplateInfo.newInstance(templateID, originID, originTime); - pointInfoMap.put(templateID, templateInfo); - } + TemplateInfo templateInfo = createTemplateInfo(templateID, originID, saveTime, timeConsume); + + pointInfoMap.put(templateInfo.getTemplateInfoID(), templateInfo); + + //更新下此模板最新保存记录 + updateLatestTemplateInfo(templateID, saveTime); - // 收集制作耗时 - templateInfo.addTimeConsume(timeConsume); // 收集模版基本信息 templateInfo.updateProcessMap(processInfo); + //设置是否是测试模板 + templateInfo.setTestTemplate(processInfo.isTestTemplate()); // 刷新闲置日计数器 templateInfo.resetIdleDayCount(); + // 每次更新之后,都同步到暂存文件中 saveInfo(); } + private TemplateInfo createTemplateInfo(String templateID, String originID, long saveTime, int timeConsume){ + JSONObject saveRecord = new JSONObject(); + saveRecord.put("time", saveTime); + saveRecord.put("consume", timeConsume); + if (this.contains(templateID)){ + return TemplateInfo.newInstance(templateID, originID, saveRecord.toString(), getTemplateCreateTime(templateID)); + } + return TemplateInfo.newInstance(templateID, originID, saveRecord.toString()); + } + + private String getTemplateCreateTime(String templateID) { + long latestSaveTime = latestTemplateInfo.get(templateID); + TemplateInfo latestTemplateInfo = pointInfoMap.get(templateID + "_" + latestSaveTime); + return latestTemplateInfo.getTemplateCreateTime(); + } + /** * 获取缓存文件存放路径 */ @@ -80,15 +105,6 @@ public class TemplateInfoCollector extends AbstractPointCollector return new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), XML_FILE_NAME)); } - TemplateInfo getOrCreateTemplateInfoByID(String templateID) { - if (pointInfoMap.containsKey(templateID)) { - return pointInfoMap.get(templateID); - } - TemplateInfo templateInfo = TemplateInfo.newInstance(templateID); - pointInfoMap.put(templateID, templateInfo); - return templateInfo; - } - /** * 更新 day_count:打开设计器却未编辑模板的连续日子 */ @@ -104,6 +120,20 @@ public class TemplateInfoCollector extends AbstractPointCollector designerOpenHistory.update(); } + private void updateLatestTemplateInfo(TemplateInfo templateInfo) { + String templateID = templateInfo.getTemplateID(); + if (latestTemplateInfo.containsKey(templateID)) { + long latestSaveTime = latestTemplateInfo.get(templateID); + updateLatestTemplateInfo(templateID, Math.max(latestSaveTime, templateInfo.getSaveTime())); + } else { + updateLatestTemplateInfo(templateID, templateInfo.getSaveTime()); + } + } + + private void updateLatestTemplateInfo(String templateID, long saveTime) { + latestTemplateInfo.put(templateID, saveTime); + } + @Override public void readXML(XMLableReader reader) { if (reader.isChildNode()) { @@ -116,7 +146,8 @@ public class TemplateInfoCollector extends AbstractPointCollector reader.readXMLObject(designerOpenHistory); } else if (TemplateInfo.XML_TAG.equals(name)) { TemplateInfo templateInfo = TemplateInfo.newInstanceByRead(reader); - pointInfoMap.put(templateInfo.getTemplateID(), templateInfo); + updateLatestTemplateInfo(templateInfo); + pointInfoMap.put(templateInfo.getTemplateInfoID(), templateInfo); } } catch (Exception ex) { // 什么也不做,使用默认值 @@ -138,4 +169,44 @@ public class TemplateInfoCollector extends AbstractPointCollector writer.end(); } + + + @Override + public void sendPointInfo() { + addIdleDayCount(); + List removeList = new ArrayList<>(); + List sendList = new ArrayList<>(); + for (String latestTemplateInfokey : latestTemplateInfo.keySet()) { + AbstractPointInfo pointInfo = pointInfoMap.get(latestTemplateInfokey + "_" + latestTemplateInfo.get(latestTemplateInfokey)); + if (pointInfo.isTestTemplate()) { + continue; + } + for (String key : pointInfoMap.keySet()) { + if (key.startsWith(latestTemplateInfokey)) { + sendList.add(key); + } + } + } + // 发送记录 + for (String key : sendList) { + if (SendHelper.sendPointInfo(pointInfoMap.get(key))) { + removeList.add(key); + } + } + + // 清空记录 + for (String key : removeList) { + pointInfoMap.remove(key); + } + + saveInfo(); + } + + + @Override + protected void loadFromFile() { + latestTemplateInfo = new ConcurrentHashMap<>(); + super.loadFromFile(); + } + } 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 427d48c73..e5872ae1d 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 @@ -1,6 +1,10 @@ package com.fr.design.mainframe.template.info; +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.json.JSONArray; /** * Created by plough on 2017/3/17. @@ -19,12 +23,52 @@ public abstract class TemplateProcessInfo { // 获取模板类型。0 代表普通报表,1 代表聚合报表,2 代表表单 public abstract int getReportType(); + // 获取模板格子数 public abstract int getCellCount(); + // 获取模板悬浮元素个数 public abstract int getFloatCount(); + // 获取模板聚合块个数 public abstract int getBlockCount(); + // 获取模板控件数 public abstract int getWidgetCount(); + + //是否是测试模板 + public abstract boolean isTestTemplate(); + + //是否使用参数面板 + public abstract boolean useParaPane(); + + //获取组件信息 + public abstract JSONArray getComponentsInfo(); + + + + protected boolean isTestCell(Object value, Style style) { + if (value instanceof ChartCollection && isTestChartCollection((ChartCollection) value)) { + return true; + } + if (value == null && Style.getInstance().equals(style)) { + return true; + } + return false; + } + + protected boolean isTestChartCollection(ChartCollection chartCollection) { + int chartCount = chartCollection.getChartCount(); + if (chartCount == 0) { + return true; + } + for (int i = 0; i < chartCount; i++) { + ChartProvider chart = chartCollection.getChart(i, ChartProvider.class); + if (chart.isTestChart()) { + return true; + } + } + return false; + } + } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index 3235473c6..73109f340 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -1,14 +1,16 @@ package com.fr.design.mainframe.template.info; import com.fr.config.MarketConfig; -import com.fr.general.GeneralUtils; +import com.fr.design.DesignerEnvManager; import com.fr.invoke.Reflect; +import com.fr.json.JSONArray; import com.fr.json.JSONObject; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.third.org.apache.commons.io.FileUtils; import org.easymock.EasyMock; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -29,7 +31,7 @@ import static org.junit.Assert.assertTrue; * Created by plough on 2019/4/18. */ @RunWith(PowerMockRunner.class) -@PrepareForTest({ProductConstants.class, MarketConfig.class, ProductConstants.class, GeneralUtils.class}) +@PrepareForTest({ProductConstants.class, MarketConfig.class, DesignerEnvManager.class}) public class TemplateInfoCollectorTest { private String filePath; private String initialFileContent; @@ -51,6 +53,9 @@ public class TemplateInfoCollectorTest { EasyMock.expect(mockProcessInfo.getFloatCount()).andReturn(1).anyTimes(); EasyMock.expect(mockProcessInfo.getReportType()).andReturn(0).anyTimes(); EasyMock.expect(mockProcessInfo.getWidgetCount()).andReturn(0).anyTimes(); + EasyMock.expect(mockProcessInfo.useParaPane()).andReturn(false).anyTimes(); + EasyMock.expect(mockProcessInfo.getComponentsInfo()).andReturn(new JSONArray()).anyTimes(); + EasyMock.expect(mockProcessInfo.isTestTemplate()).andReturn(true).anyTimes(); EasyMock.replay(mockProcessInfo); // 缓存 tpl.info @@ -72,36 +77,36 @@ public class TemplateInfoCollectorTest { assertEquals(",,", DesignerOpenHistory.getInstance().toString()); TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - assertEquals(7, ((Map) Reflect.on(collector).field("pointInfoMap").get()).size()); - assertEquals("2019-04-08,2019-04-03,2019-03-29", DesignerOpenHistory.getInstance().toString()); + assertEquals("2020-05-07,2020-05-06,2020-04-30", DesignerOpenHistory.getInstance().toString()); } @Test - public void testCollectInfo() { + public void testCollectInfo() throws Exception { + setUpMockForNewInstance(); TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; int timeConsume = 200; collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); // 检查是否写入成功 Reflect.on(collector).call("loadFromFile"); - TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo = getTemplateInfoByID(templateID); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); Map processMap = Reflect.on(templateInfo).field("processMap").get(); assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + - "\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"}", new JSONObject(processMap).toString()); - - assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\"," + - "\"jar_time\":\"不是安装版本\",\"create_time\":\"2019-03-26 16:13\"," + - "\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\",\"originID\":\"\"," + - "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":329,\"originTime\":0," + - "\"version\":\"10.0\",\"username\":\"plough\"}", new JSONObject(consumingMap).toString()); + "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", + new JSONObject(processMap).toString()); + + Assert.assertEquals(71113, consumingMap.get("uid")); + Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); + Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); + Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); } @Test @@ -110,7 +115,7 @@ public class TemplateInfoCollectorTest { TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID = "73a97777-8jnk-47cd-b57c-2ee89991279796"; + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; int timeConsume = 200; collector.collectInfo(templateID, StringUtils.EMPTY, mockProcessInfo, timeConsume); @@ -119,20 +124,20 @@ public class TemplateInfoCollectorTest { Reflect.on(collector).call("loadFromFile"); assertTrue(collector.contains(templateID)); - TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo = getTemplateInfoByID(templateID); Map processMap = Reflect.on(templateInfo).field("processMap").get(); assertEquals(templateID, templateInfo.getTemplateID()); assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + - "\"templateID\":\"73a97777-8jnk-47cd-b57c-2ee89991279796\"}", new JSONObject(processMap).toString()); + "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", new JSONObject(processMap).toString()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(StringUtils.EMPTY, consumingMap.get("originID")); - assertEquals(200, consumingMap.get("time_consume")); - assertEquals(0, consumingMap.get("originTime")); + Assert.assertEquals(71113, consumingMap.get("uid")); + Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); + Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); + Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); } @Test @@ -141,7 +146,7 @@ public class TemplateInfoCollectorTest { TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID = "423238d4-5223-22vj-vlsj-42jc49245iw3"; + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; String originID = "16a988ce-8529-42f5-b17c-2ee849355071"; int timeConsume = 200; @@ -149,18 +154,19 @@ public class TemplateInfoCollectorTest { // 检查是否写入成功 Reflect.on(collector).call("loadFromFile"); - TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo = getTemplateInfoByID(templateID); Map processMap = Reflect.on(templateInfo).field("processMap").get(); - assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + - "\"cell_count\":13,\"block_count\":3,\"report_type\":0," + - "\"templateID\":\"423238d4-5223-22vj-vlsj-42jc49245iw3\"}", new JSONObject(processMap).toString()); + assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0,\"cell_count\":13," + + "\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", new JSONObject(processMap).toString()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(originID, consumingMap.get("originID")); - assertEquals(329, consumingMap.get("time_consume")); - assertEquals(129, consumingMap.get("originTime")); + Assert.assertEquals(71113, consumingMap.get("uid")); + Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); + Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); + Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); + Assert.assertEquals("16a988ce-8529-42f5-b17c-2ee849355071", consumingMap.get("originID")); } @Test @@ -169,36 +175,71 @@ public class TemplateInfoCollectorTest { TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); - String templateID = "423238d4-5223-22vj-vlsj-42jc49245iw3"; + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; String originID = "3kha8jcs-31xw-42f5-h2ww-2ee84935312z"; int timeConsume = 200; collector.collectInfo(templateID, originID, mockProcessInfo, timeConsume); - TemplateInfo templateInfo = collector.getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo = getTemplateInfoByID(templateID); assertEquals(templateID, templateInfo.getTemplateID()); - assertEquals(originID, templateInfo.getOriginID()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(originID, consumingMap.get("originID")); - assertEquals(200, consumingMap.get("time_consume")); - assertEquals(0, consumingMap.get("originTime")); + Assert.assertEquals(71113, consumingMap.get("uid")); + Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); + Assert.assertEquals("e5d7dbb2-d1df-43d4-b974-67acb5ecbffa", consumingMap.get("templateID")); + Assert.assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); + Assert.assertEquals("3kha8jcs-31xw-42f5-h2ww-2ee84935312z", consumingMap.get("originID")); } @Test public void testAddIdleDateCount() { - String templateID = "16a988ce-8529-42f5-b17c-2ee849355071"; + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; TemplateInfoCollector collecter = TemplateInfoCollector.getInstance(); - TemplateInfo templateInfo = collecter.getOrCreateTemplateInfoByID(templateID); + TemplateInfo templateInfo = getTemplateInfoByID(templateID); - assertEquals(9, templateInfo.getIdleDayCount()); + assertEquals(0, templateInfo.getIdleDayCount()); Reflect.on(collecter).call("addIdleDayCount"); - assertEquals(10, templateInfo.getIdleDayCount()); + assertEquals(1, templateInfo.getIdleDayCount()); // 同一天内多次调用无效 Reflect.on(collecter).call("addIdleDayCount"); - assertEquals(10, templateInfo.getIdleDayCount()); + assertEquals(1, templateInfo.getIdleDayCount()); + } + + @Test + public void testContains() { + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + String templateID1 = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; + Assert.assertTrue(collector.contains(templateID1)); + String templateID2 = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffb"; + Assert.assertFalse(collector.contains(templateID2)); + } + + @Test + public void testGetTemplateCreateTime() throws Exception { + setUpMockForNewInstance(); + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + String templateID = "e5d7dbb2-d1df-43d4-b974-67acb5ecbffa"; + String createTime = Reflect.on(collector).call("getTemplateCreateTime", templateID).get(); + Assert.assertEquals("2020-05-07 17:25", createTime); + + templateID = "2521d03c-b238-41a5-9a1d-2498efff3a97"; + createTime = Reflect.on(collector).call("getTemplateCreateTime", templateID).get(); + Assert.assertEquals("2020-05-07 17:45", createTime); + } + + + private TemplateInfo getTemplateInfoByID(String templateID) { + TemplateInfoCollector collector = TemplateInfoCollector.getInstance(); + Map latestTemplateInfo = Reflect.on(collector).field("latestTemplateInfo").get(); + Map pointInfoMap = Reflect.on(collector).field("pointInfoMap").get(); + if (latestTemplateInfo.containsKey(templateID)) { + long latestSaveTime = latestTemplateInfo.get(templateID); + return pointInfoMap.get(templateID + "_" + latestSaveTime); + } else { + return TemplateInfo.newInstance(templateID); + } } } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java index 7f0ddd0bc..cf2fff3be 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java @@ -1,13 +1,13 @@ package com.fr.design.mainframe.template.info; import com.fr.config.MarketConfig; -import com.fr.general.GeneralUtils; +import com.fr.design.DesignerEnvManager; import com.fr.invoke.Reflect; import com.fr.json.JSONObject; -import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLableReader; import com.fr.third.javax.xml.stream.XMLStreamException; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -25,17 +25,17 @@ import static org.junit.Assert.assertEquals; * Created by plough on 2019/4/19. */ @RunWith(PowerMockRunner.class) -@PrepareForTest({MarketConfig.class, ProductConstants.class, GeneralUtils.class}) +@PrepareForTest({MarketConfig.class, DesignerEnvManager.class}) public class TemplateInfoTest { - private static final String NORMAL_INFO = "\n" + - "\n" + - "\n" + + private static final String NORMAL_INFO = "\n" + + "\n" + + "\n" + ""; - private static final String SAVE_AS_INFO = "\n" + - "\n" + - "\n" + + private static final String SAVE_AS_INFO = "\n" + + "\n" + + "\n" + ""; private TemplateInfo templateInfo; @@ -56,15 +56,14 @@ public class TemplateInfoTest { assertEquals(templateID, templateInfo.getTemplateID()); assertEquals(StringUtils.EMPTY, Reflect.on(templateInfo).field("originID").get()); assertEquals(0, (int) Reflect.on(templateInfo).field("idleDayCount").get()); + assertEquals(false, templateInfo.isTestTemplate()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(0, consumingMap.get("originTime")); assertEquals(StringUtils.EMPTY, consumingMap.get("originID")); - assertEquals(0, consumingMap.get("time_consume")); - assertEquals("不是安装版本", consumingMap.get("jar_time")); - assertEquals("plough", consumingMap.get("username")); - assertEquals("10.0", consumingMap.get("version")); + assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); + assertEquals(71113, consumingMap.get("uid")); + assertEquals(StringUtils.EMPTY, consumingMap.get("saveRecord")); } @Test @@ -73,26 +72,27 @@ public class TemplateInfoTest { String templateID = "24121212-u2c8-ncd2-82nx-8ud0i8138888"; String originID = "24avc8n2-1iq8-iuj2-wx24-8yy0i8132302"; - int originTime = 100; - TemplateInfo templateInfo = TemplateInfo.newInstance(templateID, originID, originTime); + String saveRecord = "{\"time\";:1588843629000,\"consume\":81}"; + String createTime = "2020-05-07 17:25"; + TemplateInfo templateInfo = TemplateInfo.newInstance(templateID, originID, saveRecord, createTime); assertEquals(templateID, templateInfo.getTemplateID()); assertEquals(originID, Reflect.on(templateInfo).field("originID").get()); assertEquals(0, (int) Reflect.on(templateInfo).field("idleDayCount").get()); + assertEquals(false, templateInfo.isTestTemplate()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); assertEquals(templateID, consumingMap.get("templateID")); - assertEquals(originTime, consumingMap.get("originTime")); assertEquals(originID, consumingMap.get("originID")); - assertEquals(originTime, consumingMap.get("time_consume")); - assertEquals("不是安装版本", consumingMap.get("jar_time")); - assertEquals("plough", consumingMap.get("username")); - assertEquals("10.0", consumingMap.get("version")); + assertEquals("6b6699ff-ec63-43b0-9deb-b580a5f10411", consumingMap.get("uuid")); + assertEquals(71113, consumingMap.get("uid")); + assertEquals(saveRecord, consumingMap.get("saveRecord")); + assertEquals(createTime, consumingMap.get("create_time")); } @Test public void testGetTemplateID() { - assertEquals("16a988ce-8529-42f5-b17c-2ee849355071", templateInfo.getTemplateID()); - assertEquals("49avd2c4-1104-92j2-wx24-3dd0k2136080", templateInfoSaveAs.getTemplateID()); + assertEquals("aac1139e-018b-4481-867a-a18fc6d6f3e6", templateInfo.getTemplateID()); + assertEquals("2521d03c-b238-41a5-9a1d-2498efff3a97", templateInfoSaveAs.getTemplateID()); } @Test @@ -102,19 +102,21 @@ public class TemplateInfoTest { Map processMap = Reflect.on(templateInfo).field("processMap").get(); Map consumingMap1 = Reflect.on(templateInfoSaveAs).field("consumingMap").get(); Map processMap1 = Reflect.on(templateInfoSaveAs).field("processMap").get(); - assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\",\"jar_time\":\"不是安装版本\"," + - "\"create_time\":\"2019-03-26 16:13\",\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\",\"originID\":\"\"," + - "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":129,\"originTime\":0,\"version\":\"10.0\"," + - "\"username\":\"plough\"}", new JSONObject(consumingMap).toString()); - - assertJsonStringEquals("{\"activitykey\":\"2e0ea413-fa9c241e0-9723-4354fce51e81\",\"jar_time\":\"不是安装版本\"," + - "\"create_time\":\"2019-03-26 16:13\",\"templateID\":\"49avd2c4-1104-92j2-wx24-3dd0k2136080\",\"originID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"," + - "\"uuid\":\"476ca2cc-f789-4c5d-8e89-ef146580775c\",\"time_consume\":429,\"originTime\":129,\"version\":\"10.0\"," + - "\"username\":\"plough\"}", new JSONObject(consumingMap1).toString()); - assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":1," + - "\"block_count\":0,\"report_type\":0,\"templateID\":\"16a988ce-8529-42f5-b17c-2ee849355071\"}", new JSONObject(processMap).toString()); - assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":1," + - "\"block_count\":0,\"report_type\":0,\"templateID\":\"49avd2c4-1104-92j2-wx24-3dd0k2136080\"}", new JSONObject(processMap1).toString()); + assertJsonStringEquals("{\"uid\":71113,\"originID\":\"\",\"create_time\":\"2020-05-07 17:28\"," + + "\"saveRecord\":\"{\\\"time\\\":1588843693000,\\\"consume\\\":4}\"," + + "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + + "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", new JSONObject(consumingMap).toString()); + + assertJsonStringEquals("{\"uid\":71113,\"originID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + + "\"create_time\":\"2020-05-07 17:45\",\"saveRecord\":\"{\\\"time\\\":1588844751000,\\\"consume\\\":1058}\"," + + "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"," + + "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", new JSONObject(consumingMap1).toString()); + assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + + "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + + "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"}", new JSONObject(processMap).toString()); + assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + + "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + + "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"}", new JSONObject(processMap1).toString()); } private TemplateInfo createTemplateInfo(String xmlContent) throws XMLStreamException { @@ -122,4 +124,18 @@ public class TemplateInfoTest { XMLableReader xmlReader = XMLableReader.createXMLableReader(sr); return TemplateInfo.newInstanceByRead(xmlReader); } + + @Test + public void testGetSaveTime(){ + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + String saveRecord = (String) consumingMap.get("saveRecord"); + JSONObject object = new JSONObject(saveRecord); + Assert.assertEquals(1588843693000L, object.optLong("time")); + } + + @Test + public void testGetTemplateCreateTime(){ + Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); + Assert.assertEquals("2020-05-07 17:28", (String)consumingMap.get("create_time")); + } } diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java index be2b58989..8ba027872 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTestHelper.java @@ -1,10 +1,10 @@ package com.fr.design.mainframe.template.info; +import com.fr.config.BBSAttr; import com.fr.config.MarketConfig; +import com.fr.design.DesignerEnvManager; import com.fr.general.ComparatorUtils; -import com.fr.general.GeneralUtils; import com.fr.json.JSONObject; -import com.fr.stable.ProductConstants; import org.easymock.EasyMock; import org.powermock.api.easymock.PowerMock; @@ -33,17 +33,21 @@ class TemplateInfoTestHelper { static void setUpMockForNewInstance() throws Exception { MarketConfig mockMarketConfig = EasyMock.mock(MarketConfig.class); - EasyMock.expect(mockMarketConfig.getBbsUsername()).andReturn("plough").anyTimes(); + BBSAttr bbsAttr = EasyMock.mock(BBSAttr.class); + EasyMock.expect(bbsAttr.getBbsUid()).andReturn(71113).anyTimes(); + EasyMock.expect(mockMarketConfig.getBBSAttr()).andReturn(bbsAttr).anyTimes(); PowerMock.mockStatic(MarketConfig.class); EasyMock.expect(MarketConfig.getInstance()).andReturn(mockMarketConfig).anyTimes(); - PowerMock.mockStatic(GeneralUtils.class); - EasyMock.expect(GeneralUtils.readBuildNO()).andReturn("不是安装版本").anyTimes(); + PowerMock.mockStatic(DesignerEnvManager.class); + DesignerEnvManager envManager = EasyMock.mock( DesignerEnvManager.class); + EasyMock.expect(envManager.getUUID()).andReturn("6b6699ff-ec63-43b0-9deb-b580a5f10411").anyTimes(); + EasyMock.expect(envManager.isJoinProductImprove()).andReturn(true).anyTimes(); + EasyMock.expect(DesignerEnvManager.getEnvManager()).andReturn(envManager).anyTimes(); + EasyMock.replay(mockMarketConfig, bbsAttr, envManager); - setFinalStatic(ProductConstants.class.getDeclaredField("VERSION"), "10.0"); - EasyMock.replay(mockMarketConfig); PowerMock.replayAll(); } } diff --git a/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info index eae77630f..ff65b74e9 100644 --- a/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info +++ b/designer-base/src/test/resources/com/fr/design/mainframe/template/info/tpl.info @@ -1,35 +1,35 @@ - + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index 052ae0539..33312483e 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -10,6 +10,7 @@ import com.fr.design.designer.creator.*; import com.fr.design.designer.creator.cardlayout.XWCardLayout; import com.fr.design.designer.creator.cardlayout.XWCardMainBorderLayout; import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; +import com.fr.design.form.util.FormDesignerUtils; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.FormDesigner; import com.fr.design.mainframe.FormSelection; @@ -261,8 +262,11 @@ public class SelectionModel { creator.removeAll(); // 清除被选中的组件 selection.reset(); + FormDesignerUtils.removeWidgetProcessInfo(creator.toData()); } + + setSelectedCreator(isInPara ? designer.getParaComponent() : designer.getRootComponent()); // 触发事件 designer.getEditListenerTable().fireCreatorModified(DesignerEvent.CREATOR_DELETED); 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 d976816f5..532f04c16 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 @@ -1,8 +1,14 @@ package com.fr.design.form.util; +import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.Widget; import com.fr.form.ui.container.WFitLayout; +import java.util.UUID; + public class FormDesignerUtils { /** * body布局是否设置了手机重布局 @@ -25,4 +31,20 @@ public class FormDesignerUtils { return root.getBodyLayoutType() == com.fr.form.ui.container.WBodyLayoutType.ABSOLUTE; } -} \ No newline at end of file + + public static void addWidgetProcessInfo(Widget widget) { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate instanceof JForm) { + widget.setWidgetID(UUID.randomUUID().toString()); + ((JForm) jTemplate).addWidgetProcessInfo(widget); + } + } + + public static void removeWidgetProcessInfo(Widget widget) { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (jTemplate instanceof JForm) { + ((JForm) jTemplate).removeWidgetProcessInfo(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 5502274bc..ac237848a 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 @@ -133,6 +133,13 @@ public class JForm extends JTemplate implements BaseJForm implements BaseJForm { + + private static final String REGEX = "^" + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Title") + "\\d+$"; + + private static final Pattern PATTERN = Pattern.compile(REGEX); + + private Map componentProcessInfoMap = new ConcurrentHashMap(); + public JFormProcessInfo(Form form) { super(form); } @@ -20,14 +43,17 @@ public class JFormProcessInfo extends TemplateProcessInfo
{ public int getCellCount() { return 0; } + // 获取模板悬浮元素个数 public int getFloatCount() { return 0; } + // 获取模板聚合块个数 public int getBlockCount() { return 0; } + // 获取模板控件数 public int getWidgetCount() { int widgetCount = 0; @@ -37,4 +63,126 @@ public class JFormProcessInfo extends TemplateProcessInfo { } return widgetCount; } + + @Override + public boolean isTestTemplate() { + Iterator it = this.template.getTableDataNameIterator(); + if (!it.hasNext() || getWidgetCount() <= 1 || + hasEmptyParaPane() || hasTestAbsolutePane() + || hasTestTabLayout() || hasTestECReport() || hasTestChart()) { + return true; + } + return false; + } + + private boolean hasTestECReport() { + ElementCaseEditorProvider[] elementCaseEditorProviders = this.template.getElementCases(); + for (ElementCaseEditorProvider elementCaseEditorProvider : elementCaseEditorProviders) { + FormElementCaseProvider elementCase = elementCaseEditorProvider.getElementCase(); + Iterator it = elementCase.cellIterator(); + if (!it.hasNext()) { + return true; + } + while (it.hasNext()) { + DefaultTemplateCellElement ce = (DefaultTemplateCellElement) it.next(); + Object value = ce.getValue(); + if (isTestCell(value, ce.getStyle())) { + return true; + } + } + + } + return false; + } + + private boolean hasTestChart() { + final boolean[] hasTestChart = {false}; + Form.traversalWidget(this.template.getContainer(), new WidgetGather() { + @Override + public void dealWith(Widget widget) { + ChartCollection chartCollection = (ChartCollection) ((BaseChartEditor) widget).getChartCollection(); + if (isTestChartCollection(chartCollection)) { + hasTestChart[0] = true; + } + } + + @Override + public boolean dealWithAllCards() { + return true; + } + }, BaseChartEditor.class); + return hasTestChart[0]; + } + + + private boolean hasTestTabLayout() { + final boolean[] hasTestTabLayout = {false}; + Form.traversalWidget(this.template.getContainer(), new WidgetGather() { + @Override + public void dealWith(Widget widget) { + String title = ((CardSwitchButton) widget).getText(); + Matcher matcher = PATTERN.matcher(title); + if (matcher.find()) { + hasTestTabLayout[0] = true; + } + } + + @Override + public boolean dealWithAllCards() { + return true; + } + }, CardSwitchButton.class); + return hasTestTabLayout[0]; + } + + private boolean hasTestAbsolutePane() { + final boolean[] hasTestAbsolutePane = {false}; + Form.traversalWidget(this.template.getContainer(), new WidgetGather() { + @Override + public void dealWith(Widget widget) { + if (((WAbsoluteLayout) widget).getWidgetCount() == 0) { + hasTestAbsolutePane[0] = true; + } + } + + @Override + public boolean dealWithAllCards() { + return true; + } + }, WAbsoluteLayout.class); + return hasTestAbsolutePane[0]; + } + + private boolean hasEmptyParaPane() { + WLayout paraContainer = this.template.getParaContainer(); + return paraContainer != null && paraContainer.getWidgetCount() == 0; + } + + @Override + public boolean useParaPane() { + return this.template.getParaContainer() != null; + } + + @Override + public JSONArray getComponentsInfo() { + JSONArray ja = new JSONArray(); + for (ComponentProcessInfo value : componentProcessInfoMap.values()) { + ja.put(value.toJSONObject()); + } + this.componentProcessInfoMap.clear(); + return ja; + } + + public void addComponentCreateInfo(Widget widget) { + componentProcessInfoMap.put(widget.getWidgetID(), new ComponentProcessInfo(widget, System.currentTimeMillis())); + } + + public void addComponentRemoveInfo(Widget widget) { + ComponentProcessInfo info = componentProcessInfoMap.get(widget.getWidgetID()); + if (info == null) { + info = new ComponentProcessInfo(widget); + componentProcessInfoMap.put(widget.getWidgetID(), info); + } + info.updateDeleteTime(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/ComponentProcessInfoTest.java new file mode 100644 index 000000000..abed86959 --- /dev/null +++ b/designer-form/src/test/java/com/fr/design/mainframe/template/info/ComponentProcessInfoTest.java @@ -0,0 +1,39 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.FreeButton; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.json.JSONObject; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by kerry on 2020-05-08 + */ +public class ComponentProcessInfoTest { + @Test + public void testToJSONObject() { + Widget button = new FreeButton(); + button.setWidgetName("button1"); + 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())); + } +} 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 new file mode 100644 index 000000000..ee366cc7d --- /dev/null +++ b/designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java @@ -0,0 +1,149 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.form.main.Form; +import com.fr.form.ui.CardSwitchButton; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.FreeButton; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WBorderLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.form.ui.container.WFitLayout; +import com.fr.form.ui.container.WParameterLayout; +import com.fr.form.ui.container.cardlayout.WCardTagLayout; +import com.fr.invoke.Reflect; +import com.fr.json.JSONArray; +import com.fr.plugin.chart.vanchart.VanChart; +import com.fr.report.cell.DefaultTemplateCellElement; +import com.fr.report.worksheet.FormElementCase; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by kerry on 2020-05-08 + */ +public class JFormProcessInfoTest { + @Test + public void testHasTestECReport() { + Form form = new Form(); + WFitLayout wFitLayout = new WFitLayout(); + ElementCaseEditor editor = new ElementCaseEditor(); + FormElementCase elementCase = new FormElementCase(); + editor.setElementCase(elementCase); + wFitLayout.addWidget(editor); + form.setContainer(wFitLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + boolean result1 = Reflect.on(jFormProcessInfo).call("hasTestECReport").get(); + Assert.assertTrue(result1); + + elementCase.addCellElement(new DefaultTemplateCellElement()); + boolean result2 = Reflect.on(jFormProcessInfo).call("hasTestECReport").get(); + Assert.assertTrue(result2); + } + + @Test + public void testHasTestChart() { + Form form = new Form(); + WFitLayout wFitLayout = new WFitLayout(); + ChartEditor editor = new ChartEditor(); + ChartCollection collection = new ChartCollection(); + editor.resetChangeChartCollection(collection); + wFitLayout.addWidget(editor); + form.setContainer(wFitLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + boolean result1 = Reflect.on(jFormProcessInfo).call("hasTestChart").get(); + Assert.assertTrue(result1); + + collection.addChart(new VanChart()); + boolean result2 = Reflect.on(jFormProcessInfo).call("hasTestChart").get(); + Assert.assertTrue(result2); + + } + + @Test + public void testHasTestTabLayout() { + Form form = new Form(); + WFitLayout wFitLayout = new WFitLayout(); + WCardLayout editor = new WCardLayout(); + wFitLayout.addWidget(editor); + form.setContainer(wFitLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + boolean result1 = Reflect.on(jFormProcessInfo).call("hasTestTabLayout").get(); + Assert.assertFalse(result1); + + WCardTagLayout tagLayout = new WCardTagLayout(); + CardSwitchButton button = new CardSwitchButton(); + button.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Title") + "0"); + tagLayout.addWidget(button); + editor.addWidget(tagLayout); + boolean result2 = Reflect.on(jFormProcessInfo).call("hasTestTabLayout").get(); + Assert.assertTrue(result2); + + button.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Title") + "test"); + boolean result3 = Reflect.on(jFormProcessInfo).call("hasTestTabLayout").get(); + Assert.assertFalse(result3); + + } + + @Test + public void testHasTestAbsolutePane() { + Form form = new Form(); + WFitLayout wFitLayout = new WFitLayout(); + WAbsoluteLayout editor = new WAbsoluteLayout(); + wFitLayout.addWidget(editor); + form.setContainer(wFitLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + boolean result1 = Reflect.on(jFormProcessInfo).call("hasTestAbsolutePane").get(); + Assert.assertTrue(result1); + + editor.addWidget(new FreeButton()); + boolean result2 = Reflect.on(jFormProcessInfo).call("hasTestAbsolutePane").get(); + Assert.assertFalse(result2); + } + + @Test + public void testHasEmptyParaPane() { + Form form = new Form(); + WBorderLayout borderLayout = new WBorderLayout(); + form.setContainer(borderLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + boolean result1 = Reflect.on(jFormProcessInfo).call("hasEmptyParaPane").get(); + Assert.assertFalse(result1); + + borderLayout.addNorth(new WParameterLayout()); + boolean result2 = Reflect.on(jFormProcessInfo).call("hasEmptyParaPane").get(); + Assert.assertTrue(result2); + } + + @Test + public void testUseParaPane() { + Form form = new Form(); + WBorderLayout borderLayout = new WBorderLayout(); + form.setContainer(borderLayout); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + Assert.assertFalse(jFormProcessInfo.useParaPane()); + + borderLayout.addNorth(new WParameterLayout()); + Assert.assertTrue(jFormProcessInfo.useParaPane()); + + } + + @Test + public void testGetComponentsInfo() { + Form form = new Form(); + JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); + FreeButton button1 = new FreeButton(); + FreeButton button2 = new FreeButton(); + button1.setWidgetID("xxxx1"); + button2.setWidgetID("xxxx2"); + jFormProcessInfo.addComponentCreateInfo(button1); + jFormProcessInfo.addComponentRemoveInfo(button2); + JSONArray ja = jFormProcessInfo.getComponentsInfo(); + Assert.assertEquals(2, ja.size()); + + + ja = jFormProcessInfo.getComponentsInfo(); + Assert.assertEquals(0, ja.size()); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/JPolyWorkBook.java b/designer-realize/src/main/java/com/fr/design/mainframe/JPolyWorkBook.java index b68e49e16..48ddb6a05 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/JPolyWorkBook.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/JPolyWorkBook.java @@ -3,6 +3,8 @@ */ package com.fr.design.mainframe; +import com.fr.design.mainframe.template.info.JPolyWorkBookProcessInfo; +import com.fr.design.mainframe.template.info.TemplateProcessInfo; import com.fr.file.FILEChooserPane; import com.fr.main.impl.WorkBook; import com.fr.report.poly.PolyWorkSheet; @@ -49,4 +51,14 @@ public class JPolyWorkBook extends JWorkBook { protected void addExtraChooseFILEFilter(FILEChooserPane fileChooser) { } + + + @Override + public TemplateProcessInfo getProcessInfo() { + if (processInfo == null) { + processInfo = new JPolyWorkBookProcessInfo(template); + } + return processInfo; + } + } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java new file mode 100644 index 000000000..ec5d05c7f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/mainframe/template/info/JPolyWorkBookProcessInfo.java @@ -0,0 +1,77 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.main.impl.WorkBook; +import com.fr.report.block.Block; +import com.fr.report.poly.PolyChartBlock; +import com.fr.report.poly.PolyWorkSheet; +import com.fr.report.report.Report; + +import java.util.Iterator; + +/** + * Created by kerry on 2020-05-06 + */ +public class JPolyWorkBookProcessInfo extends JWorkBookProcessInfo { + public JPolyWorkBookProcessInfo(WorkBook template) { + super(template); + } + + @Override + public int getReportType() { + return 1; + } + + @Override + public int getCellCount() { + return 0; + } + + @Override + public int getFloatCount() { + return 0; + } + + @Override + public int getBlockCount() { + int blockCount = 0; + if (!template.isElementCaseBook()) { // 如果是聚合报表 + for (int i = 0; i < template.getReportCount(); i++) { + Report report = template.getReport(i); + // 考虑多个sheet下 包含WorkSheet的情况 需要判断下 + if (report instanceof PolyWorkSheet) { + PolyWorkSheet r = (PolyWorkSheet) report; + blockCount += r.getBlockCount(); + } + } + } + return blockCount; + } + + + @Override + public boolean isTestTemplate() { + Iterator it = this.template.getTableDataNameIterator(); + if (!it.hasNext() || getBlockCount() <= 1 || isTestECReport() || isTestChartBlock()) { + return true; + } + return false; + } + + + private boolean isTestChartBlock() { + int count = this.template.getReportCount(); + for (int m = 0; m < count; m++) { + PolyWorkSheet report = (PolyWorkSheet) this.template.getReport(m); + int blockCount = report.getBlockCount(); + for (int i = 0; i < blockCount; i++) { + Block block = report.getBlock(i); + if (block instanceof PolyChartBlock && isTestChartCollection((ChartCollection) ((PolyChartBlock) block).getChartCollection())) { + return true; + } + } + } + return false; + } + +} 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 85266b7cd..a4b86b189 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 @@ -1,10 +1,15 @@ package com.fr.design.mainframe.template.info; + +import com.fr.base.Style; import com.fr.base.parameter.ParameterUI; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.json.JSONArray; import com.fr.main.impl.WorkBook; import com.fr.main.parameter.ReportParameterAttr; +import com.fr.report.cell.TemplateCellElement; import com.fr.report.cellcase.CellCase; -import com.fr.report.poly.PolyWorkSheet; +import com.fr.report.elementcase.TemplateElementCase; import com.fr.report.report.Report; import com.fr.report.worksheet.WorkSheet; @@ -34,7 +39,7 @@ public class JWorkBookProcessInfo extends TemplateProcessInfo { for (int j = 0; j < cc.getRowCount(); j++) { Iterator iter = cc.getRow(j); while (iter.hasNext()) { - cellCount ++; + cellCount++; iter.next(); } } @@ -42,6 +47,7 @@ public class JWorkBookProcessInfo extends TemplateProcessInfo { } return cellCount; } + // 获取模板悬浮元素个数 public int getFloatCount() { int chartCount = 0; @@ -50,28 +56,19 @@ public class JWorkBookProcessInfo extends TemplateProcessInfo { WorkSheet r = (WorkSheet) template.getReport(i); Iterator fiter = r.getBlock().floatIterator(); while (fiter.hasNext()) { - chartCount ++; + chartCount++; fiter.next(); } } } return chartCount; } + // 获取模板聚合块个数 public int getBlockCount() { - int blockCount = 0; - if (!template.isElementCaseBook()) { // 如果是聚合报表 - for (int i = 0; i < template.getReportCount(); i++) { - Report report = template.getReport(i); - // 考虑多个sheet下 包含WorkSheet的情况 需要判断下 - if (report instanceof PolyWorkSheet) { - PolyWorkSheet r = (PolyWorkSheet) report; - blockCount += r.getBlockCount(); - } - } - } - return blockCount; + return 0; } + // 获取模板控件数 public int getWidgetCount() { ReportParameterAttr attr = template.getReportParameterAttr(); @@ -82,4 +79,60 @@ public class JWorkBookProcessInfo extends TemplateProcessInfo { ParameterUI pui = attr.getParameterUI(); return pui == null ? 0 : (pui.getAllWidgets().length - 1); } + + @Override + public boolean isTestTemplate() { + Iterator it = this.template.getTableDataNameIterator(); + if (!it.hasNext() || isTestECReport() || getCellCount() <= 5) { + return true; + } + return false; + } + + protected boolean isTestECReport() { + int count = this.template.getReportCount(); + for (int m = 0; m < count; m++) { + Report report = this.template.getReport(m); + Iterator iterator = report.iteratorOfElementCase(); + while (iterator.hasNext()) { + TemplateElementCase templateElementCase = (TemplateElementCase) iterator.next(); + int columnLength = templateElementCase.getColumnCount(); + int rowLength = templateElementCase.getRowCount(); + for (int i = 0; i < columnLength; i++) { + for (int j = 0; j < rowLength; j++) { + TemplateCellElement templateCellElement = templateElementCase.getTemplateCellElement(i, j); + Object value = templateCellElement.getValue(); + if (isTestCell(value, templateCellElement.getStyle())) { + return true; + } + + } + } + } + } + return false; + } + + protected boolean isTestCell(Object value, Style style) { + if (value instanceof ChartCollection && isTestChartCollection((ChartCollection) value)) { + return true; + } + return false; + } + + + @Override + public boolean useParaPane() { + ReportParameterAttr parameterAttr = this.template.getReportParameterAttr(); + if (parameterAttr == null) { + return false; + } + return parameterAttr.getParameterUI() != null; + } + + + @Override + public JSONArray getComponentsInfo() { + return new JSONArray(); + } } diff --git a/designer-realize/src/test/java/com.fr/design/mainframe/template/info/JWorkBookProcessInfoTest.java b/designer-realize/src/test/java/com.fr/design/mainframe/template/info/JWorkBookProcessInfoTest.java new file mode 100644 index 000000000..2629fc462 --- /dev/null +++ b/designer-realize/src/test/java/com.fr/design/mainframe/template/info/JWorkBookProcessInfoTest.java @@ -0,0 +1,49 @@ +package com.fr.design.mainframe.template.info; + +import com.fr.base.Style; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.form.main.parameter.FormParameterUI; +import com.fr.invoke.Reflect; +import com.fr.json.JSONArray; +import com.fr.main.impl.WorkBook; +import com.fr.main.parameter.ReportParameterAttr; +import com.fr.plugin.chart.vanchart.VanChart; +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by kerry on 2020-05-08 + */ +public class JWorkBookProcessInfoTest { + + @Test + public void testIsTestCell() { + ChartCollection chartCollection = new ChartCollection(); + chartCollection.addChart(new VanChart()); + JWorkBookProcessInfo processInfo = new JWorkBookProcessInfo(new WorkBook()); + boolean result = Reflect.on(processInfo).call("isTestCell", chartCollection, Style.getInstance()).get(); + Assert.assertTrue(result); + } + + + @Test + public void testUseParaPane(){ + WorkBook workBook = new WorkBook(); + JWorkBookProcessInfo processInfo = new JWorkBookProcessInfo(workBook); + Assert.assertFalse(processInfo.useParaPane()); + + ReportParameterAttr attr = new ReportParameterAttr(); + workBook.setReportParameterAttr(attr); + Assert.assertFalse(processInfo.useParaPane()); + + attr.setParameterUI(new FormParameterUI()); + Assert.assertTrue(processInfo.useParaPane()); + } + + @Test + public void testGetComponentsInfo() { + JWorkBookProcessInfo processInfo = new JWorkBookProcessInfo(new WorkBook()); + JSONArray ja = processInfo.getComponentsInfo(); + Assert.assertEquals(0, ja.size()); + } +} From 901faae84c406c64ae1d500f1cf82a19d6a0d5d0 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 8 May 2020 14:32:16 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 10 +++- .../template/info/TemplateProcessInfo.java | 6 +++ .../design/form/util/FormDesignerUtils.java | 11 +--- .../java/com/fr/design/mainframe/JForm.java | 6 ++- .../template/info/ComponentProcessInfo.java | 52 +++++++++++++------ 5 files changed, 58 insertions(+), 27 deletions(-) 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 03248efb1..b780f5be0 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 @@ -130,7 +130,7 @@ public abstract class JTemplate> consumeTimer.setEnabled(shouldInitForCollectInfo(isNewFile)); } - + void onGetFocus() { consumeTimer.start(); } @@ -1262,6 +1262,14 @@ public abstract class JTemplate> template.setTemplateID(templateId); } + public void addWidgetProcessInfo(Widget widget) { + + } + + public void removeWidgetProcessInfo(Widget widget) { + + } + public abstract String route(); public String getTemplateName() { 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 e5872ae1d..eb1404ab0 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,6 +4,7 @@ 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; /** @@ -45,7 +46,12 @@ public abstract class TemplateProcessInfo { //获取组件信息 public abstract JSONArray getComponentsInfo(); + public void addComponentCreateInfo(Widget widget) { + } + + public void addComponentRemoveInfo(Widget widget) { + } 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 532f04c16..d5dad2e89 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 @@ -2,12 +2,10 @@ package com.fr.design.form.util; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.FormDesigner; -import com.fr.design.mainframe.JForm; import com.fr.design.mainframe.JTemplate; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WFitLayout; -import java.util.UUID; public class FormDesignerUtils { /** @@ -34,17 +32,12 @@ public class FormDesignerUtils { public static void addWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (jTemplate instanceof JForm) { - widget.setWidgetID(UUID.randomUUID().toString()); - ((JForm) jTemplate).addWidgetProcessInfo(widget); - } + jTemplate.addWidgetProcessInfo(widget); } public static void removeWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (jTemplate instanceof JForm) { - ((JForm) jTemplate).removeWidgetProcessInfo(widget); - } + jTemplate.removeWidgetProcessInfo(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 ac237848a..8ca0252b9 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 @@ -105,6 +105,7 @@ 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"; @@ -223,14 +224,15 @@ public class JForm extends JTemplate implements BaseJForm Date: Fri, 8 May 2020 17:15:11 +0800 Subject: [PATCH 03/12] =?UTF-8?q?CHART-13810=20=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=BB=84=E5=90=88=E5=9B=BE=E4=B8=AD=E4=BB=AA=E8=A1=A8=E7=9B=98?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E7=89=87=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/images/custom/icon/cuvette.png | Bin 574 -> 739 bytes .../custom/images/custom/icon/pointer_180.png | Bin 1164 -> 1340 bytes .../custom/images/custom/icon/pointer_360.png | Bin 1581 -> 1745 bytes .../chart/custom/images/custom/icon/ring.png | Bin 1223 -> 1387 bytes .../images/custom/icon/selected/cuvette.png | Bin 15905 -> 771 bytes .../custom/icon/selected/pointer_180.png | Bin 16412 -> 1360 bytes .../custom/icon/selected/pointer_360.png | Bin 16831 -> 1768 bytes .../images/custom/icon/selected/ring.png | Bin 16874 -> 1405 bytes .../images/custom/icon/selected/slot.png | Bin 16717 -> 1299 bytes .../chart/custom/images/custom/icon/slot.png | Bin 1113 -> 1274 bytes 10 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/cuvette.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_180.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_360.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/ring.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/cuvette.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_180.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_360.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/ring.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/slot.png mode change 100644 => 100755 designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/slot.png diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/cuvette.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/cuvette.png old mode 100644 new mode 100755 index 39f034740e050c304fb21313a81f0f93d0ce370a..c2220b4b5246f694144a454d7c77642f846ca439 GIT binary patch delta 695 zcmV;o0!aP71mgveIDZ0_NklljQ5P-iH1Vd4!AhQBVr%b7o^U?v9WN(M| zC-f&Y*+{ko@dwIJphLSi12C}UERiWw6Tyn5NDUwb37O>?nKlV=>K2>6ldSli@15W0 zyLa!Dl^_VX4RSZ_3+#5g+du;-Mbtf@;kxe0qJCCW4%q;XFMmK{#>eLQLb8(9)HRVj zUchu`k;tYwqBEoAI1c%I{;zgf0WHmg9FNCy?J@z{?RKAr_xXGt$8r9E91e&0zCYDI zi+ePP!uh_B<2aWf0bJKz$@1~i14<#(v`9wmGJTGQM+?61GaiqbOeV34Rwjy(IWn5z zcm`y1(WW8Q4S$2{x(#4wN_zIp`I-HOA!%9VmWTzlpceE$0rfm@)APK|Wnc8K=f~-c zw$1OyP|@%AHvx*p;#}RV`7wP=oqtn*rA&Ky+yy1!!|u^#B6@NKU0i(}zqSR89nn|s zzr5|A-+P|K3m>oF0pQ8~uRMG7eHj0NHG$TGSC7lM)got zM;og9t*UJiX#u;&uBxg75qSd)RJERV&@*5F)B#l06On!35ZD9CKn)N;jjjfC zfFs}(*nd#fQ5u^1S&$W=V1^2KB2ta$IuY}NiEfy>BLmz9YQ|URIwG6I9t{^=2da_i z&62uF=YhG(fM@2^Bf#m3s97Xt!JSB?!ZfUyX8@k64uIDt8&1uA_^}2TK3?kfXw5_< z2OO#Dp3z?_Mv*zYKuc9OBG3g>l&Xnu(jW*DyD-Y-a&8e_ocT#zw%4_w7Sw`TPz!27 dEvN+zB2$?rD-o z$Rotpg>*LJ1;QgF4Siey1=XxX=Zce{rLYtcB#_XhnM0=#o7{OrPV$Vj^7;49?0z@1 zqm|c+qF@#59xGxF>YxtlpbqMw4(gx|>Y)F!5JE46&}+KjU4QxCZ?M)2`}|Z2)9JJa z(Cu~?YV-VS#<eut% zy!v?Yr*s?Ik$*QMzw0`vgDx}?>4-?@s&?JH{{=jDWsLk5qLgBFDf!FayS_ zIu?-;uxs-Ms+x<)36QI5)^^a(Kn`R8sv1OOA2;1XTY|q&f0LP zp9k3o68ow^5RpMen^dMJmff;+X9he5h8AlQGqW+zXn(os3>Z|hH_tLF=iEjL1oO!% z!0pPYZ4%q?q>`z!4Ey#QKv2~jcw^OYX3yoz%CEe<)}7IzWuya~s_LHUe>J0u&n_@h z)$Iy&VohlfZF5CYL?3CIc5b58@n3fMUDrV!)IlB8K^@dV9n?V`)IlAzRdxxC(Ol7# TwNsh^015yANkvXXu0mjf$@>Iq diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_180.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_180.png old mode 100644 new mode 100755 index 213a052d4c6f169670a8d37e5b566fbb0ddf588f..a0fa2b2147b92dd1fefe4793d1b777a339077b95 GIT binary patch delta 1300 zcmV+v1?&2Z3A_rBIe+d+L_t(&-tCx8NMlzN$Nx89#y2K$LQIFmj|PS)WkAG9nTjsD zXl67bNoYnf!CjLeAsS%|~)ZgXvAJkv*>w-8WhehXWpu=TN(9 z0qr~pGL=dlXjc`Wb8~aA?usdmsV8=kt+j zE-woJI(MK-MSrr$uBz+kPH6$haY&_7kR++Bq*WEkC|@$}?acRqyjM=saBdq0pU*c2 z;AV;Axsb1))!#6jhUoB;NDZ`HA%y4%Aq*kJP6&C05aJ?)xQ2#?I(Ei+y*+PN(M>+~ z9VLY50aySqEX&?F@7<3Lpz0MJfIF)JZ9& zNB#k@`2GHl#l^)5p67WbSy}m7 z5QM_wbAP!UjYgwXmgPf1W3d<&MX@j!1cA=a&wp{6ut$mHrBEm|RSa1SyIYq`CN!2s_V#`VpsrGP)M&HWdJa9}^$Z$^N3bnq5uY4~y!uS_ zTwZ;K_~baYg)AC}M?mVCl71M5fyre0zn0nUuK_Ssq^T!_xH6ecw60Fu#wxKj#D6Ep zLB%X0J=gJ%*#@V`qmBIu#LU3{=_m}YR!zP{QA9&SgPT$sJ1*#ne;hNoT4A|y8-ITH zEvA0^qoDU2OnCjqZOxGTH6W*2UJQov_M`r4AL8CFl`ih>LjBdgGkfvYM4;E}RmHx! zxw&L(S1h*nE5K4nJwHUU*(}!A*MAFhuh(0-7jHs{OHq{QQJnwy^HT&vA$Tue#(VF+ zbF@ep3@36&HG!tn>F7?eucVx0GSYHK0rlX0NeycN0000< KMNUMnLSTZa+Iv(0 delta 1122 zcmV-o1fBc53XBPmIe$J$L_t(&-tCx8Xd6cq$N!_%O7ccu5m*gc%f1BJlz=e~B{lY; zht@5r$)PQln~R}P=&6QYf=Mqq_#$Xhaxg9E&_k$u@Flb~P(*v$mSTEP!Lh{}BV!4t zu|8H``=PC-hdQd)R$^P0Xmlub%WW+$FTV$%7l7@50}6l#aA|#g{VP>fn}e^{>ok+eP{S~e1kGl% zRMWI(T~$@Ova<4dCt*9Wl9yyzUfK`2ANHWGR4N_IPJh>RD$DXxr(jR(=>oDW-wTJs z)9G{?rBdmjV>;A85QJ6^%u?5N9h;k*2!%q^k|ccyAaHKsg%ILNBofy}QJm&D4&iVZ zyBn!PuqPE=*O6KM6Tx5*4u=E7!^8LD@%RWK@=Y5cv?Y{q)!dQ zpoKz#X0zFrUi0bwJM>BH7Oj^Lds&OeEtlw%*e&|>{+*WZi^U?{+1a70s?vBo{w4rd zx4f=P6vb;cn++b12f<*lrFZqu&H(^&cW=YYZnf;l%x)of_qN5p)oOaZUhq7R@$vEZ z0e?8Vbw+ug&o_4D7Vi<@pPfTPts%d-0Au5^<-M`-82QBoG}IdWvvVLlLd$*xL4d>I z_&1gX0OE#wy$K(!juW7qMQ%ZH$*U_kl-#3dl`$vo_# z{$ur}X&T&aw@4|?o)px6*7rbrs2`piH-GW_x8Gptm*1NDsNI3rZrnUJ)GD87Ko~pbV6O oGEfG}Kp7|lWuOd{f&M4|0JvPJyT%sjHvj+t07*qoM6N<$f-oyF`2YX_ diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_360.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/pointer_360.png old mode 100644 new mode 100755 index 58b1f0a35bf9f878eddb1c6e943fa660c465de73..f7c3f25b25206e0e618d583d0af3b2a5a6e97950 GIT binary patch delta 1709 zcmV;e22%O04ABjcIDZC%Nkl=1-M5`dBNRc8%$|*T;Dj)^P;*v;6T!<>=kg95oR3}xX9NZqFs)$3ekm96}f-M9l zU>w^l`{`ZGP7hg-jSbkwwm`{~Mw;23otfXxdv9jmP=pY?3x86+p9eQSKK>1WI{?lk zJ$?@0PFq{sZ@IKZ?_g8-_cE8T(wzK7MIMCG8 zv}?VC0(xdANS^0+tal(l$H&J%+{iaIHNoLZImR#MIsS69F8TX^2&{Ri9~`^Rn-@Z#U@8bM}NJ3{rU?4A^?#PqJI@#O$Z@*CmpbMY;5dSG#Z^( z6on)biIg-sIhpoMQ4|u5M(4-I#%=+q1z_FFII-F{lIDc9!*t{V9e!nXjawDy-u9CI2wUlQZ$EDR{SvIYns;b2A_q&P(n=7cp=kwiF z6opJrPm@?ImIjeeQdO1A&dw4^l8Ddey9>ZkXiz!_?^@w@yU#Z_H+Pqnm7$@b0g=Eo zIF8$sGt@K<3;(`=!C-*VXhd^!bGO^=K2K3pMSmfkE}bQ0SyxwAU3+``puu1O0GLcB z9F6mk$N%2b0HS|+UguYaD5|Wa%L@RT&*!_FN$t32Psz&T zhk2>&%HxNGd-gQrJ6(lsg;L#JHw^lQpn7$6^*@WnQb|$ihXrorM*u*@*WZI;EW7_) zS$_im`_BM?$}2ZA))7UKJAC-?#{j~G*idAnx@M2ZbCF?~%5XRgmSv%7sr^=7xq!>VyB$?kRiJ4adcUTE95}MD(Rxu7 zUz<$X^_N(jM{IZiOR|a)V;xpR2~}1LuBc0>V~nuh`~l_lA7s^*qA0Lhtqp{b#eb44 zFF8fT>pwunrK@lyDzGBHwbvC1YH@fBE-+B8dONFSZv|5p;z z)6<*z#>PfiEIThF3}c2Y$5YBj?DieMkt7KV3k#d&tHP17ICbM0AJD#10iJH<#H{}%*@=|IJsz=hF~z55!7rp!)!M1nBP1x7>x*r!<(?0reS7g z=AO&tS|Wt3mprbk|CAcP-+%8?6omu=0kW{LP>`6BD2n9Ot5-x6#i9ksa*EVb6lDN# zWO;e{Pm9I!X}-%wCRtx!2g|ZAYiepP0EiMo)(Yw5=p1K%4M4QJySrm~d3j{(0emk3 zvS2Vc(%s$NQ4GkuuO#$Kq#Cc++sE@fyBD?Pd7jmS*EIkP`|3&}$$w^TPN(y1AP{(z z={jPkBnSct1OktoPUl$wwqjmK>3WY`mK_FWr`LZk%K@dnN z6dIkFnCR>5>}=KVTTI2iV9MDU?H2ph16d3Jqtod;cIwor#*Oz=Q&S7Qy}dyIDgYTk zyr9cRDKCOEfF~aV6DFkuD;em16B_S`ya#;`dO+oW|8ziHQ3mWU00000NkvXXu0mjf DR+KOH delta 1544 zcmV+j2KV{V4Xq52IDZA-Nkl7fa5Xb+!jz88W!7(A<6seHZl(wg;T&T!} z3x^_ulEh;oUepJ+O&l?0jH5CJ2x8q3Z}zvEnKy5q86v`mAb%`A5UGLIKx?2i&>Cnp zrEWhbXBfr-zz)D_>e~8Y4FEX+YXCGN%Dz{i48yPhTmW46?%n(R?Af#5dOV&_Z8qB% zb#-+O8{=}hoT%%1B%MxAPfSew$}r3m05SlXh>VJp5>dsP3D`P0IeCNU`M9QOl*{Gv z+Vu2v!97jWh=1q#_~hi|4FIhGT$Ow;B0{AASpZGJV6d0x`M9p@r0Y6KlC&pKMNvr8 zG}3jQc%F|3gTY<^O#s*f18PDZ4Tr-+s;cI_d@`Bb6X?sAFDaABZ1z=ErEoYr1mI|; zU@HO{jYb1oAvfCU>ME_Rt>xVlMX_Lgw`YEEaThbl_EN7NRJY6&wx2 zz{0;zV6|Fdv)Rzq)#VEYgXb8Asjqs%z%Y!ZzrVk&r>AGcYPA9Y>~=ejW;0O#`Kv5Y z{?8C>sec4oTU!ADR;v{~Jv}4+{rznW!&s`iyZ~@VB9Yt0%uam#h*lonFUe$A9^NPM z@uQ;8OcQpOYP!tZRv65Lpm}w5^*^W6*}yPN!5DG;M*u+mH{XNdoV$N)RYB&rp8)_3 zm#-BaBg?XQ`0(LR0HjJuC`vJ1M<^7!z;RqdDu0!NAP6vwe7y~quVFp?3hBGUAXV8F zGJSU#>*-fTA&Cg8s)FOVhEOPU0f3`gK5FxNz2{k$MRRjA>~=d?ws0Ev)tj$go$`|3>?s)F>` zFn{#eOx|-nHiPuoFbq|J`|8bYP2A)0ps}$LEX%^wYcDB)mf)l9vMj%_+xMm~w-`ry zY#2+bj&WNXR%8W@E+;PQOK9V4@Lc}^b?qPRX)aCE;BvV-h-mS^?MLg{KSKS*D+uK3 zu_C|r*A-boAXkt2i&ypx`Ce?ixi7zlK!5qF1Y)6leEQ&Tyk}=;H?KQ8JK=Qhyo_+1 z1FD+M>mTuWcKnT^C|Fon*z6xae!Tji-QC@9HU7Ixm+;ds5AyoEiPP!K)1zrx=>>rj zf>Dbg2!9_sbm*;}OI1}QUcA7uj*e}k^-dy5Qrzu!e?>&g)$q|ZS(cxcI<$6~Ru_V)HZmSthFSoRd5ySux$z1~gc=jQ__PMo+- zL_#&!(agZWz%5v@SzqtV~r$ClSB*uL{UvDKKD|RGd z9wN1b!{MP!CL@$%wwX*uFpJkM0IUb|ip63N{C@u# z0Pad2M^qGa3$PtPQ(s@7cYkVXYABgZPDqkOZ&vbERV7K1D49%7OifJ<_4W06&GQy} zrQfOSV6%&4pP_V2I-G?fc3Sq7Bp(3=g38iR$ zs-sC}l9@^N!Nkqaj7~Hr6ZE_!bMHxVzxmF&_d91oq*5uI1b@@2eSvPbyB~lPfIVy2 z1HkEUIHr_-52s2Mps+mz)wk#G4Y&P40e$@ih zz8}b)ot=ICssgCn?LMD*Z?oB8u~>3IuC1*h6becDS7VN*vcZKyAy_Py0+0aUa5#u+ zK3+Tk>={r}On+wiRrNWVIa&}3g|M@;gLph%)TUJxn^F46xR<$>0eMfUXi&9aa5x-J z09Pf#(~~|wDlzuLIA&6Bq`6Qq5e)7E9i?{p9eIbnTIq@KT$PM*TQphE~^m9^7T8t!a+6}nSpiF~s z9EU(40DnOcq^21Fou$m#qC$5qLQPA7yx2^^`Aw~2kN}|9>(ScU3X{ns7sgL2lA|N@ z0hiRqbFrDik6lI>w8f_@Ns?%4YLWxnTgrS@4D>@xdtEAA2RjW%UWC6;OZCJVa& z+JEEg0~`o+@ELQUmYwze&zk!q58svu6Gfo6O@|nt!kf^pD9C`z`2W5T-DCW?tz?C_ zi6Su2u7{5i5#@K)RxJH$HIn%G>sqwcX>i`GL5D?)S$_f@RxM`U#?=9I?0fUpfu%>A z4pBaZi4_jL=X4lo*CWcOF#2x{ZDtL+T7M{5jU+lOTD)gO47BUfX4c?MP(W7;rJllj z@EKF!^y_zLa`H6Brx4{+uo_9p>ukSFE(c@DoOwYI;P?9rexIgkqAa1?tQQJcT@B}o zaU(_KEIR)>dwfq3<;}A!D_4}4Cr9gb$%5YLb8qQ45r$!;hF_Eo=vgW`nm^{>7Jmy^ zJ&JK0Cs(6Rl?~`nchl1bomdc8e|T81!qJ;+$z&3NKtQs2R;o^+;^U>&DEyT_7K$Y? zw!|KJ5y4jSb%dbf`8ZRJeId=F#WMMzm-zbCRtgVV_`Ol)v$o)-UR&H zV!>y>sEcQqt!#5FyRG8csu?^E1@moV?3W+DY#COC*1glyc=fa*$UX7(mUr3@_Gvn9$qS=Qn0eA>tp5wUnYORH+hBBI33Hx6qsf*FH z&2Bbt0L``y0Jk`fyW7y9{?*XXi#WZI?Y$yFv%P$YF6;_Lf~X^JIsE#ATlyr`ikK*d<9qI2?we zC}z_Ffc|oFwye;75vLc-AWwJFnEax-U`PO9Sr*;h-G6X8o%zD}Ze4P8Y9;J9+jvfQ z()ez`0XtQEx{@Rbuh*LocDS5;EgAGxlDcRXu4Dc7vNsO5+YO2`jfU@Q3VP@9&IL0u zaM@=s$&+TD^>{pHQ$C*O`)dZeCzDsrcGqHZvXGo*7{+Yse9b^(Y0_sLJI65a#O%aRFQviU)=PAr?idYKnKQEVpY0Pel2ng!IywU7-dp^}v zKM9yE1_FYLpH~xb(8K}MpU+Zo&;;hTBm@K%b6XPJP7=SpyBU#$mRnj;l}m-9LC5Y3 zM{3!nz<*x*`?ZX~t_mkjV7P}tQr7YG&Auqez<*_q|7A6C;PL-W;q9aejP|k!2r3ft zzWPeO`*b@<{P1}*dRlGx*kwas2Zg0z8hvgGi_cPx0Xp-wYxl^~qlZC4)-kswVfZ+M z(Own_S;zE0N%XjE80ezmc97`npzu;qG1|+b$7RFQh=PGGx^W8cvHL>KNk4sc>`GQl&?meuNmn0 zp!Z%oqvpibuNxvnrTiY0rfCR=!=}x%Qhz&zB|l!e9m?;YYSOX(;wu?Z(J`|wLY3ke`6!;V32_{Ew$!zjB^XXL%Og!>?wxuPk}s}l3TshMw-82j1Qmu*9^)qeK%}PL4%%d4A^p!** z%Iie4JaXl;&Xu}q-9ke7eJ`2v*0hW&o;;TJj}LZUYY0(aOcTxQwV}~_ZH%_jLTl6G xgWh}9S_@(Qp~?caKrK)U)B?3YEf~|dGn^U4su5TO77002ovPDHLkV1lieP(=U$ diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/cuvette.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/cuvette.png old mode 100644 new mode 100755 index 57847bc24a74fae1196c796b27b282a0d0790489..d0125c71c70a7ac9dc99d8eeea9bdd4a0e46f730 GIT binary patch delta 739 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 diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_180.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_180.png old mode 100644 new mode 100755 index 2c9cc913394f20e7c38c0527dc860abc57f83be9..8a4f9a333b894d767b387fbd4f03a79a99e9aa0d GIT binary patch delta 1334 zcmV-61*trbDM}(1$%}y9aT|#?(=^ zhwW~RA~cTLhKQszq0TnRO_SW4o4fw@uq5QRX?t6nG}Zjzz&U@v^Sg)hIlps$=XWk6 zBD@Gx@WfB^vQ1?q7C19L~B->+vZT?Io90JyaT64~~xY`gp5s|hZvTX#6r#fm zB301!3S&&i7~>dY4#wC^j4>Bu%+=G=)0(Si^^UAvSr>o#na?O=Ob@^Ufa7`oeYe|v z&}Oq8G8&CdOKmfm%(Nf~{N&{1&z+r}cL1aSED+JZB`1BB3-Dz!e7-?J5QKC( zO^TwZ%EZLPGMy~TBnX1w^Z5q7UT-S^OR2N1jRNWc>>eE*?Ty7^f}$vtNF-=(ZcY0wbk@U2o)b1OkCejg5`n z!C(;aczkJKTJ{0Qam50ds+~@!@%Zs$xLmGop67p00B~&C^}-mljE;^Tb-Uf&dc7Wv zjg6Rl)`YZ3%9T5b&@1OlB8AZdC1$>!RZ<5JC3OIcDuce=lN~`JIV%{T~)5Rx%tCn zG6_Xd)Mv1x6C@@P|Lz-*n1b1ChS_WefEDW`rn2@)a2=h?C#BP&rKRPw%>>mFX*r(f zKb2*fqR}XY!{MS)^XcXD^knc1Wfqo4Syg|;U5L|@!87#q^7*3uu~>{|XJ<(iMH(6! zdINyDTv6BTcDoPibUIip7C4>GqS4jf+Xn!czjzi(xadO}N_ZOc7tgBfi+R&(wZdpL z;_%_a?*XVO*BLe1Y_>ydZt+?U_TD}$iYY{{U4Z=Pp{ieg^bnD27qBR%VDIe%tL1-+ zj>B;rOeWL+cbUWS3IJ1Cl6uCNE167&YHGACtP-9^(QT$`J!6^x7=6?h; zb8vjr4}+^o(^!%up{}mZO+?{m1>N+&fCg6+EXPjbuiauTWXegT66^gB;4VVb1+iOTF zmBP%-Oup^$c*^(iW{kNMMG0+W@E?A<1Aia@&)&Uw`>i)O<_UvgQ_iR+&_p5;%3b#5 zl+6rATF$5(3VMrT sXce>yS_Q3wRza(vRnRJE6?ALmKgXAyo*CrT5&!@I07*qoM6N<$fjNv$svuOVwH2%aS_@dw?M@ONalkpA)9%@SX3l}+{=UC^ z?{7Z8dw-dKW?M+`lF8O{tN{R+92npmihuI)Kh{J`{Yd9|Km5Z=9T2Gn0Gk>5zi~kB zzS#i4yN`$?un18QUxq5(Byv;=yXll_d^P|G7V6Xz*%}z5N#S@zmxfea$ zUBncrec%KnAVmW&PYD*wQr5_La{5A{wLr(m11MokLenV~DlK2#JAjD=sJU)lRXEJGn z7hPzLe-mirar{tU|G{*)M2#V+il&b%k)ny17oDz8G<*%-mr^~PNTnTQhf@S~5;X|9F~PB% zza;!t9LKtQ42c`roaZ9xl^3oZ)*&x&(G@G33d2$LkSV!1Tnc(j zCUN94ejKV%N-!a!l*GfJS`{wswXGSPL!GfahGLe^k5!mx>#{uk7Eyf4Qe_F$ohyF1%m01}6Z9wCShRz&zB_&KcA zpC|74$!+i<3S&A(nmFP>MjTCqK}X|OnLL&mdeAtEKlI_xo8a&R=cx7^KE?jZFC%yK zS4JhoqLL7Rked`Pay|r=!bJc=Zc@0&`4ChJ7Xb*lN#P>rLr^JP1R&%lg^QdIL8WjJ zfRLLME^~~ zQn<+Z5L5~m0SLKC;UeclP$^slAmk>6i<}QZrEn2|ked`Pay|r=!bJc=Zc@0&`4ChJ z7Xb*lN#P>rLr^JP1R&%lDK6`gS2$r6{@!LX{(|N&_YR)HU+$#I0zyRqkm3XYX&C_U z`ycq{T>waA0>Ce^_{*c&0APn^t~%=v02YOTzTRS8>;3FiK`X-S&n@g|5;eLH*3dZ<2Tp8xH7PE*AfzA%&uv2C`cLa8l5x{&4E zlfH+tOG=iOPRzAz)!6j+ebnYK*CoPbSKXQ9JoKas^+NE*3za4?-uTu`9|7Xewj^O<^|Xs zKg-=eUf67&u&Zp@%2Q74`GMa?MMoA)eqh&lU{+4)l81Rbfi4W(p8wP0QyBl% zTyJb_EJUJ;>VICnvZe9FQAu<&7+sarB~48ou&4!WuiG8ZKi2lG?PAxv3$np!6FL3; z{d1cW*VA)?tlP>ue!p52{^%FidfUq4WxwIdRCBX$uG=LpzrAAD50j3ViTitdt7q>% z_nM+@R%P*yl9G~5i)1C)ThB_rDpNv2p@T5F`}-M-dP7r6-pZSj*ZrjT-oc#Dc-+T# z?;;S3MR%=_nvP+Z_@~RKklY_HW-UM&7FE;ptV8UqH>XUli{LofU30SC_GRVSP(jwx zZ6PjKs%GC$NiV)r8#2>+v+&n}XZvrdXGb@8)L1yJN~o`|e+0*b*=_%ukB`rlt5*{( zGfsD;6|N{*Wmi~v3cn8bb+sk8-crX#&T<@Ib7FnRjf7nPdA5;R{H2+`B9SO&VS#x2 z$@m7LrnB*1J?RC#;v0+O#8&2J19dpAhnxgj$itU z9_75U(=XeyyR7eN+KC{o_R$_`#zz(zr-S#_e>%?hP?I2{>uy~@ihWAzkz-em96M%_ zS61dxqsVD&%g8_1bU?VzPO*CR_L36Fe#(;DcfUK_)8O#>j`6Mf`f#xp9^9Rqn=80# zex#efy|BQ_ql@=0bMl581D+eJ)?JCT>K?cy2(9?IFud}ud(SL- zvx1x-rc{^Pyz0-rVNn*<6aSk{uesDl%&*I5Ozc}P(sgp5zR@H9qi*-jFsHIN!uKvJEG%xD6FnW%Xf*jpk3Q&f zb&QMM^;^xe%B;T!M9yCqdv?|#v8Vli8hiTZM(*+yFTI&%QI;JT9+r9hu+3bt^9Qfm zPuVyze|uJ?rtjp1ig8c&n0>N%>m|m7XJF2yKh7-8b856ruqri=GGnBFwCK$tv$Ej+ b!Eu1=WBzNcTOQ`>-`@}P3-&Eu9J}ei6K(u@ diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_360.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/pointer_360.png old mode 100644 new mode 100755 index db13dc1a26e921c3effe5ffa31b398a1953c461f..c2f0933d84dd10bc70974976b70534712cbd87d1 GIT binary patch delta 1745 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 CJ=gF6 diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/ring.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/ring.png old mode 100644 new mode 100755 index 88a25aa89839fd60b05ba583406ba73cba751819..2a89fb345485c154afc2d72cc836132901fb3d57 GIT binary patch delta 1379 zcmV-p1)Tcog8}^tkSu=^000XT0n*)m`~Uz2FG)l}RA}DqT5m`jXBhwGl8Z^SjS}NO zMB8If6j^MMF~QA_(SDj>K`51eD76UfT-isVFw#%$#sOaUZw!pqRdG#8RPfy z?7C&fGPpR`$G7W77Jof@E(7wqQqiDl!LW4NYX@*fB0Q%eOlC$f+%TJOePmFwA7SZdyu!c8t2a-}`mVo}ho$C^a7kG@hAT48z=0HPG(y z`MS4j^k6J|Ndk>!`2xc*@AeAlj&rngY~jYlvSDO9kP59Hz@)?BXjB!@j!}2_gxAm> z2x~McT#Fe%zr*3Upo-A#99y_C;Wf0&&6ge4;uNFDF^dis#Ij*TiphKvg^M;Lj#-q6EuQD$cDo^pqSQ1CpgNT~n^fq&U84u3 zKpromVgE8mF-QO~7z`*aEk$;AwpxRFzS*|SBj!gSXd|r zwmy~lsu<{dzphy-TwAJ*yIzFVYK2ZG84cg373hE6=L=`0#K1+HaYsx_F;eLc8J=qfhy>&TKYI4WCRKP^nEQo=qnk zLhm$(p*H~lz|fljdZ#%IyVjqV!>%BDr#U#;(8hec8I49c)s#627%K*xYzRM(`(UCq z8=!ywcpZR=)}U{Ohm#GVZ-$38o5Jsro3ZE%CtOozLrTwP)bfbkR?7}M|7Y#5IRVa< z5VC0v>dW=;3k0v0)d|FKue)u8> z<+)lMF>6toufwn_h)SytL$3qs0NV47d1Zgw(xY4tpFq$z!=t`TkERL(d;&q&-+q*v zwWukkVKq^x%-7)^8$wfs0p(^bUM-5KDW=s^c(*)a6P$kf`p~94^$P?(fxv2_B+q00 zqPe{24{w?mMG-DnVsD6H7)@G2x5ywSusZA6EXGZ=X49hM&tu0o6j9tf$8mB+d3t|x zG*2H+=$$@wq<#}&SypQJS=xXero&zFW3JUu0;{_*p6BIi)Pb}CZLKYQXwiof;_A04 z4xG6A=2|!$hTH9yY@Vg6Q>ggyQfd+t-UTfA!|0jhcD;zj#YMRS{8mOf4A=hjc;#x+ zmg?jy8BQeVndA`S*U(V1maqvi40C@nRX~#x3`cW>hAb-a&b*ixU>{jaDraXsBJ3k; zcrhc5Ec2#KIt91pJPUP`7rNVfpmPHYAB9Fhh7a(`cXw;Oxl2D?&j^C+|^oJ_z-C_&3^eW lAccKm2S5*i9spIh{Rgsl=&Sydc%c9Q002ovPDHLkV1kB4pf~^k literal 16874 zcmeI4dpuP68^=c}#jmuo5~*oQmW;WW!AxV6Tam#sl}PQFIXH}&F&8uGM@S{8Q1Bg^Xm25{k?wwoZ~f@=lgs=&vVZE`#j${ z{~XEQo=c}_8);)Om?>_{oPD5AI`kq>ny4Ci{HqJ}F1wFHCFnXY~X88EFw$f z1cZXiqQ!u3v?rSz9nPika1KmuhJp?ShybJHw~||13B@4<5{*V95Xl5G84u0COV$gd90gt= znKu|@IF2(Q;fg_#6ch@us<@mWp-gIz!>JOD97ER?AsR^}kPNYdC=wJL5rJeyB#b5E zaYr;FnV3ItYCJ9h-~$nWKq`TBq%n1(P@z;P2^D@K<%s)}iJ>)Nu|{%_dA<=5W2Tl! zU7{caLrBL|O4#c~0Ko^42xVd};1UI0%Dl0zUJ3?}F3ty$RGv?sJD>nRAyatr4OAN4 zO(2nS1YE$)nF$S8fgq30vmsIJI7B-DAh7h0#)mJwJL^cd0=Pr1tLEj9d_`+fgMW35laA7|Jmb)8*pSx8`-f` znt?v1bGWL#jmcHD2f$+xJ{TQ6tr6vr4E%UGKM%oRd^P!}bI3yh0aAMnh8mdl=^zqe zuvE?w14}}n3i+JQAB_5;3?80AQ2iG0!T-TRNH|e{Zy7$XtNz9^z;~$s-!hC=F*lSW z2myFZ!f*i(4}9Lr4X)>hoi*I8A9o@{_2Wc`x)`b`&OrB&7=(|;Ml%o2_fvHvUp6q` zmP~{W0!j5gBvp6ArK^#p>TbAnRJlR`N}1%LY_MT9mFgFCaC`TKZuS7C4V7vQ?OgC- zxWXG$0DM1Z5ZZ?&s{Mp&H>80(#uTnr6GA`+k_`ye97DpvrBb^s8|cBoQRt=*y5A&> z+;D!>o+G>1Klx?!ivG!{uvlmk7!YI=#f8iV=0$PAfFPSFE@VD1FNzBW1ldG!A@hNG zQCu(}$R>&lnGej1;(`G|Hc?#2d|+M_7YqopiQ+=$1M{M|U_g*f6c;idm>0zb1A=U# zxRCk4yeKXh5M&d@h0F)$MRCD^Ae$&IWIix2iVFq=*+g+6^MQF$TreQWCW;H056p|= zf&oD`QC!G;U|tj#3<$D`;zH&F^P;$5K#)xo7cw817sUkwf^4F=komy8C@vTfWD~`O z%m?O0alwEfnqii^xUQ#dO))dJ1-Y{ zxD(4==EK5ZqD?WFO$iuG-+Sn@9fOe(F_?~Tpod5IU@$X;>FX}JVlY|?H|Hg6#qF+r z0et<&nN=Gf?QaS^`SZ(omd^ZdFD7H}7GRI~?_5^g?viU7m$$;=dQzVGk`o7YLEl7+ zupA37(0P4p);2aSti?OqLa#9Ip@!x|4O}6m+~sR09T%mW$?4Lr0!37C$kq0WuFF@A z#@Vz|4VVpK@~eBBg{8H92ZWX>q~CR~?CUmu9BXF$&O?JRzD0B8xH%eCn^tv}&HTe> zpYq^~A|pf0UqLZxjSdc&OpQAw-|PIk0aIXNN1Lo?K7aZ7e|CQcX*; z=Ek}A_gH(b!qw&{MFs8E%#o)Kd5H>0 z$n+8C7sz^7#@;x$b$f55{^UEio=*I6>D8yrI$EGt(OmB)+7Gh0G)v$`se{eMg~!(3 zy`4S%cy<2W3pY1P9$)B`%B0xsh8{qEfE3Hk?Ynl-C6;_PDMFWjui)*vwQpM+rBP?O zlNYA^A(4x}h_uzLC@;V8T{`z=3hlUY5pX|Q(tbJ0(-nBF-V(-ox zNB_y2*^S+=YH!YKe9>2$_GrB#Q%mF?{LQu)bEgmLzZXTH`trEB<;FF=W? z8*ldP0={vHd*HMOGaE}oJm!=p|62s*BWJ1_km#Y7als&_q}g2deVNK;|^r$ znNPzR)t4sq+NU%aW@iMkC&l?_*A{r^^?s8=D$Y0dm#?zgy@=6yP|NfFy8iwzOIBIv z?Bs|4e*9%`VA7S^@A)y76(QD>EpP6>T-d-qwqnaA+yn7mw#7}&F1x9jkLGSx1Ru6s zWLoExu)F`-+S8slHk-C>i@kDpyVdLV={mpW9JVoS45L2lV`M(s?yPZ0b49hQ$6wT>?uB~%z^2(Oll;!0W}Ey@ z*Hd@Rn1>514V}EabOQqep$ongX%hXsuC7jk*TSKYNyCmtmx{zkl+cT6)*JHH-YU8uD(2d6-Fz zxkqk>Z7-ZbSetUsF4a$avEju*K%f;&8*=^${G)a1#$F z6B85G$`e&@&IL@QKRo4m@sWMYy>MMKT%)qyAoIsFXUdoC1H?^6(Fel~8 z-hKQ-P3ei+Kgl${n-L!ay}Iiw%3rqM{YL2xrg#h#`fcU-4nO9t*~R)Px@+PyDQ`}{Bf54O2T*5^!yPUTp7m!*+;8#KG2qq(=j`8> zO>Et;>Y(V$+xS~&_4&HYS-O=@#iI9(Nk#@~2YLjXD*^))NloOlii^WW{!1?rg3l)L17d!abh ziFN0@S5@UsbLT8L^g8UY;I1!zeBhq8{mHp8S(cs#9y$NvH!xE)y+D~V69 z35wSb*gl;BD8 z2Co~k9|L|VJ=&JH!Oc!TlF!fz2K(X$FgG5Ou@j8&fl8luN)|L z_5O0#b>vGg3a%U7>o?49cbloS<$m|(&BEHK-wxSipPXXW`7qJ^D&X7Jn)&X|ytBp0 r{SW5k&41;Vq4mS)U);<08W^|zA74KQP5gfW#6Q>Q diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/slot.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/selected/slot.png old mode 100644 new mode 100755 index 920cf6cc0b302c92b40187d5f803785f1c3a286a..4cb26a2e4c5a6003179fbb50c842ace5a9215d9f GIT binary patch delta 1272 zcmVYofMtF%vJ-p&47Qq*{-ji$NF*~__bdv>Eqy*G_*esD?7@0@>}oX`FK&N;txaww&E z6HLtH!Ick}wgBh_P^)v#0_a^h685Fimyp4by#Tx%Bv{$Y>XWvdOblJ7q&JDCt;s5z zsfs34t9{o|T(V!@wB2?AtxW{^t^GSpE=_FMZd-ts50}t+*5yctAv)_Dxs(DourgfdgJkRN-3qM?wzDso%ST#XQpm1vjA!}<&2cn zwR?S5-93eS@L=u1>$mE%!S`w91dx5HBn=sxFf1Gi_X21&2+vujfm8vFfU9??ogMotZe|?lh1*ZP_m%t>GY4ds zqCVHbovj%I`pwwFAM$GMyGC`zVqD#AQzwhWxGztj-s26G^8j!)5UhS4&uLv%g_cJV zv2jHe4A*}MQWTpz(_H@ED+f&knd*Eqn%AFvP=Jv?qj0^yaE%ah?3IBg3fHZKoYrS! zRUVGl7UJjMqp*vQ0l-BFxtMlP_jIW3*TsUL^uBz7(z?=U`&Jhb_jIW3$(s1%-golF zyMM3ai<*D5s=b7eyJ-bIGrAb&SJ#iq);~9ErIdeVxemZ@oO_%Q(!ABalTHB#rb1mj zq+N>o%-jx`axTu@B+GL8Kp#fLv;4wi#Wuj^#$bOgPQ&ll&Iq^ed%Kzf#Kk_`ZyM2C9w$nCILrmV+uWp+R5XZBr+81Fv`bl@S0- z0G59=5T{@Ho|TuJex;lF&H=dN^eb~tze1RAkokH0fh#v#4jNGfNnb7!dAp6`0 zV4ue!g`Iw-13(9W&j7dqoOAk>dH~%3dH{q0bTHo`0R0AkJI0l_6uLuc2Gka}1>zjxMJt|)I>?y4Jf4}ik} zG}RJW4^vuZPd$JcozfaG2qDXvbnu>GpY=NR!t4PH%X+P?$05lql)>h;TlcbL?&XA-NgEAgk+PZM6mLQvigu9bzwOgoW-9%aTgW1WkV` z1^jw=DWadJAHKcrGTL4|4k^5uFOl(WSvK^G{!)w(QfH~6HZiW~%d4vJzdg+eC|Sq^ zZTaowFUvz$%8du~Jm9P~s( zFa^dz2Y0rTqS#y-Ag`Hq1DNt0-OeW94Y4d} i7BmZ*1+Mu|2h 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 diff --git a/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/slot.png b/designer-chart/src/main/resources/com/fr/van/chart/custom/images/custom/icon/slot.png old mode 100644 new mode 100755 index e900e4ba89c965974e2b23c8944675ccfd31f4ed..6dc29a8dfaa09c659d7260185619798302707fec GIT binary patch delta 1233 zcmV;?1TOp82>J<-Ie)B4L_t(&-tCxAOdCfO#y_@eAP#7uv4SfF8BhP5kRWobl9C7x z$<0#np`|@kisA@y#EKLwVj}K;!Xvm-@HU>4eQ@dku1ZeI1e{>5i|(HCoWZNsYXk<%Ub zst)w#{b%9d<)$GcAE;Z%M*L@wd#eWY+Xd-QamVtZUSBJpS58=!hb??Q(#RFU7yIlR z0B|RkaJRZ za^bCk7Jm!Z!-SkVXMblSF7_P3Pk&_5&HoJmenQBtih~B1lf%DmHvg#gHF1SPZ+rIZ z!)_wM<>c@`FZmx%e$d1}{&yGObUjzQP7*>MR}}Q>{AP;XT|Ygx`;}2Ur6`KM0DfcK zi-eHD!_HlD2{^r!9AhE7g>1ygbU>B!GwuOV6n`rR`Xs|&V>cc%(g0nPiw8ZW918Sy zEOCZav(u_fR`AYfKorF;(?QcY?lPMv*%ac7%I&_W+|K&gx%7NGsxAQ7VBABdgUUIs zPuo6WRUT>{+~tePa{#sgY^fl=sQevmZ~3C~IQ3lz@W>aH*L+c#P~Qyov-UmH9yA>^ zqknLMw%x+#wFllA`h5z(sgOrV`J(a&fDr&+0tf=Q?u*JU0OJ4x08#)(sP7zrDV=}2 zz_bq)x+NXc*rQe>R|r!z&H*6Q{RqH{FDjqc_~x|{NdeW+O;PYE0ONG7`H)8l(0(>| z_L#0HYijMPdFTLu^8i%UidldvEz*w*z<-KHX%!fRknL(Zc(2fJmqxu5{eXt0OC1~X z2qFz-&~+WuyeyGAcdHreE~XF-N3#8K(u@Ju3s;`ggioOKVLCp$I@!(7wx4OA*9z-MSrb) zUe>mE6z+|jrUz6iWRbCKI{C}=&=oBCn6~{i!}nLBe}_R!jcIYn771@zYDm zF|!D1*g6<@#B|V0ef9_TW@US?BH!d%caacce(35I@rhl&?dJVwVH4CG12ACp>7{<~ z)-%UZWt8=8yx^w|6jbki$dJ9DEK1Ok(;fG^g=_?sGrtk{MF*;k{AZ7QNlR|60+4r& vx&bVEjn=Ypct@-bS_iFz)VB01>5QoMJ00000NkvXXu0mjf76xPg delta 1071 zcmV+~1kn5X3E2pcIe!aDL_t(&-tC!BXcJi+$G;t4+8SG?UByPQMBc8R3Ra>Rtzr*) z3)miZ>mC-wk4oFg_>NG?{6{`N0r=zxVR;KJ)v%_xrt2fvm`9a=63XOx2A&#HpB@L|J7WBca%|KGcbrid;r(d^PLpZ0t1TQ!$DD{9@y zbb8=jo( z*b}9prb^hiwOq&ZPSuE`K!MHrg75VzIL||7)e2NOUIM z_v$^lwP#xcdHgzu-*)_`H|?R6KDHI~?8HKb-(B}_&Yh^%PMJ(5y8-;knWreF-L_Rm zk?HgR57{B+0vO<|{gxPty!Rg(WgJxAhH0n)6iyPDt z_PH0p-dI4)NU{ZrR5){-{+i z6vvo1jsl>}{0P9TBrC@Zwh3cIGC)0aGYotPz#toIA{G$CtewxDyKO&s>$R(4(qRC{ z0O(#TC1K|2Bzt@SW(}U!fk7!zOjIqWT6bUuA_#RmE>OD z`hQ=gTu-FD0Kg`$dubfNXe=NO#R6iKL5#4rFzc&tU_S$(tnVm$N#iVZM_HBBQt3R) zE&+f4V=-%7r~7`$h0M}REFfl9vy~FQuSq%hH>I@GQjfZcrWo}VRroBYnE`z*WQo3f zI{DY~&=p-;!l=KpZFf4vd>r;kXs!1}6<0=~!&`f4Q(?{q$eWei09Ld{zbG|v p{vUNf9Z(0<0d+tfPzQ8X`3R82%=B--MP~p2002ovPDHLkV1h@O8;1Y@ From c1c7e06f284f08e8e588779af92b01a7ef41bd10 Mon Sep 17 00:00:00 2001 From: kerry Date: Fri, 8 May 2020 18:11:31 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mainframe/JTemplate.java | 7 +--- .../template/info/TemplateOperate.java | 20 +++++++++ .../template/info/TemplateProcessInfo.java | 6 +-- .../design/form/util/FormDesignerUtils.java | 6 ++- .../java/com/fr/design/mainframe/JForm.java | 17 ++------ .../template/info/ComponentCreateOperate.java | 36 ++++++++++++++++ .../template/info/ComponentDeleteOperate.java | 29 +++++++++++++ ...ProcessInfo.java => ComponentOperate.java} | 41 ++++++------------- .../template/info/JFormProcessInfo.java | 33 ++++++++++----- ...t.java => ComponentCreateOperateTest.java} | 15 ++++--- .../template/info/JFormProcessInfoTest.java | 4 +- .../template/info/JWorkBookProcessInfo.java | 5 +++ 12 files changed, 145 insertions(+), 74 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateOperate.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentCreateOperate.java create mode 100644 designer-form/src/main/java/com/fr/design/mainframe/template/info/ComponentDeleteOperate.java rename designer-form/src/main/java/com/fr/design/mainframe/template/info/{ComponentProcessInfo.java => ComponentOperate.java} (63%) rename designer-form/src/test/java/com/fr/design/mainframe/template/info/{ComponentProcessInfoTest.java => ComponentCreateOperateTest.java} (52%) 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) { + + } } From 61d773eb84b01719472e692ce9dd62a85492a41a Mon Sep 17 00:00:00 2001 From: kerry Date: Sat, 9 May 2020 09:27:23 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/JTemplate.java | 5 ----- .../java/com/fr/design/form/util/FormDesignerUtils.java | 4 ++-- .../src/main/java/com/fr/design/mainframe/JForm.java | 7 ------- 3 files changed, 2 insertions(+), 14 deletions(-) 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 db72357a3..66d7216c9 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,7 +38,6 @@ 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; @@ -1263,10 +1262,6 @@ public abstract class JTemplate> template.setTemplateID(templateId); } - public void updateTemplateOperationInfo(TemplateOperate operateInfo) { - - } - public abstract String route(); public String getTemplateName() { 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 d6931db5e..85ec9474d 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 @@ -34,12 +34,12 @@ public class FormDesignerUtils { public static void addWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - jTemplate.updateTemplateOperationInfo(new ComponentCreateOperate(widget)); + jTemplate.getProcessInfo().updateTemplateOperationInfo(new ComponentCreateOperate(widget)); } public static void removeWidgetProcessInfo(Widget widget) { JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - jTemplate.updateTemplateOperationInfo(new ComponentDeleteOperate(widget)); + jTemplate.getProcessInfo().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 01c70cb28..c538d55ef 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,7 +45,6 @@ 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; @@ -217,12 +216,6 @@ public class JForm extends JTemplate implements BaseJForm Date: Sat, 9 May 2020 09:51:14 +0800 Subject: [PATCH 06/12] =?UTF-8?q?CHART-13814=20=E6=A0=87=E8=AE=B0=E7=82=B9?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=9D=A2=E6=9D=BF=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../marker/VanChartCommonMarkerPane.java | 50 +++++++++++++------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java index f62604501..d4f7834a2 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java @@ -1,12 +1,14 @@ package com.fr.van.chart.designer.component.marker; import com.fr.chart.chartglyph.Marker; -import com.fr.design.i18n.Toolkit; import com.fr.design.beans.BasicBeanPane; +import com.fr.design.constants.LayoutConstants; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.xcombox.MarkerComboBox; +import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; import com.fr.plugin.chart.base.VanChartAttrMarker; import com.fr.plugin.chart.marker.type.MarkerType; import com.fr.van.chart.designer.TableLayout4VanChartHelper; @@ -42,11 +44,12 @@ public class VanChartCommonMarkerPane extends BasicBeanPane MarkerType.MARKER_TRIANGLE_HOLLOW }; private static Marker[] normalMarkers = null; + protected static Marker[] getNormalMarkers() { - if(normalMarkers == null){ + if (normalMarkers == null) { normalMarkers = new Marker[NORMAL_TYPES.length]; int i = 0; - for(MarkerType markerType : NORMAL_TYPES){ + for (MarkerType markerType : NORMAL_TYPES) { normalMarkers[i++] = Marker.createMarker(markerType); } } @@ -79,11 +82,12 @@ public class VanChartCommonMarkerPane extends BasicBeanPane MarkerType.MARKER_TRIANGLE_HOLLOW }; private static Marker[] mapMarkers = null; + protected static Marker[] getMapScatterMarkers() { - if(mapMarkers == null){ + if (mapMarkers == null) { mapMarkers = new Marker[MAP_TYPES.length]; int i = 0; - for(MarkerType markerType : MAP_TYPES){ + for (MarkerType markerType : MAP_TYPES) { mapMarkers[i++] = Marker.createMarker(markerType); } } @@ -98,11 +102,12 @@ public class VanChartCommonMarkerPane extends BasicBeanPane MarkerType.MARKER_STAR }; private static Marker[] ganttMarkers = null; + protected static Marker[] getGanttMarkers() { - if(ganttMarkers == null){ + if (ganttMarkers == null) { ganttMarkers = new Marker[GANTT_TYPES.length]; int i = 0; - for(MarkerType markerType : GANTT_TYPES){ + for (MarkerType markerType : GANTT_TYPES) { ganttMarkers[i++] = Marker.createMarker(markerType); } } @@ -119,11 +124,23 @@ public class VanChartCommonMarkerPane extends BasicBeanPane public VanChartCommonMarkerPane() { markerTypeComboBox = new MarkerComboBox(getMarkers()); - markerFillColor = new VanChartMarkerBackgroundPane(){ + markerFillColor = new VanChartMarkerBackgroundPane() { + protected JPanel initContentPanel() { + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + + double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + double[] columnSize = {f, e}; + double[] rowSize = {p, p, p}; + + return TableLayoutHelper.createGapTableLayoutPane(getPaneComponents(), rowSize, columnSize, 0, LayoutConstants.VGAP_MEDIUM); + } + protected Component[][] getPaneComponents() { - return new Component[][]{ - new Component[]{typeComboBox, null}, - new Component[]{centerPane, null}, + return new Component[][]{ + new Component[]{null, null}, + new Component[]{null, typeComboBox}, + new Component[]{null, centerPane}, }; } }; @@ -173,7 +190,7 @@ public class VanChartCommonMarkerPane extends BasicBeanPane protected double[] getColumnSize() { double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; double d = TableLayout4VanChartHelper.DESCRIPTION_AREA_WIDTH; - return new double[] {d, e}; + return new double[]{d, e}; } protected Marker[] getMarkers() { @@ -195,7 +212,7 @@ public class VanChartCommonMarkerPane extends BasicBeanPane @Override public void populateBean(VanChartAttrMarker marker) { - if(marker == null){ + if (marker == null) { marker = new VanChartAttrMarker(); marker.setCommon(true); } @@ -210,9 +227,10 @@ public class VanChartCommonMarkerPane extends BasicBeanPane markerFillColor.populate(marker.getColorBackground()); } - protected MarkerType populateMarkType(VanChartAttrMarker marker){ + protected MarkerType populateMarkType(VanChartAttrMarker marker) { return marker.getMarkerType(); } + /** * Update. */ @@ -223,14 +241,14 @@ public class VanChartCommonMarkerPane extends BasicBeanPane return marker; } - public void updateBean(VanChartAttrMarker marker){ + public void updateBean(VanChartAttrMarker marker) { marker.setCommon(true); updateColor(marker); marker.setRadius(radius.getValue()); marker.setMarkerType(MarkerType.parse(markerTypeComboBox.getSelectedMarkder().getMarkerType())); } - protected void updateColor(VanChartAttrMarker marker){ + protected void updateColor(VanChartAttrMarker marker) { marker.setColorBackground(markerFillColor.update()); } } From 4c219d51dde6bed3c89b491c827703dafa240e4d Mon Sep 17 00:00:00 2001 From: kerry Date: Sat, 9 May 2020 10:28:52 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/JForm.java | 4 ++++ 1 file changed, 4 insertions(+) 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 c538d55ef..ed695ea94 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 @@ -213,6 +213,10 @@ public class JForm extends JTemplate implements BaseJForm getProcessInfo() { + //这边需要判空,图表的埋点信息收集时可能没有初始化processInfo + if (processInfo == null) { + processInfo = new JFormProcessInfo(template); + } return processInfo; } From 7e020fd047387a2770e661340f8388310b2033dd Mon Sep 17 00:00:00 2001 From: kerry Date: Sat, 9 May 2020 11:24:33 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../burying/point/AbstractPointInfo.java | 4 ++-- .../mainframe/chart/info/ChartInfo.java | 1 - .../mainframe/template/info/TemplateInfo.java | 24 +++++++++---------- .../template/info/TemplateInfoCollector.java | 4 +++- .../info/TemplateInfoCollectorTest.java | 8 ++++--- .../template/info/TemplateInfoTest.java | 18 +++++++------- .../template/info/JFormProcessInfo.java | 4 ++-- 7 files changed, 34 insertions(+), 29 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java index 93ff42690..394691d57 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/burying/point/AbstractPointInfo.java @@ -12,7 +12,7 @@ public abstract class AbstractPointInfo implements BasePointInfo { protected int idleDayCount; // 到现在为止,埋点闲置的天数 //是否是测试模板 - protected boolean isTestTemplate; + protected boolean testTemplate; @Override public void resetIdleDayCount() { @@ -42,7 +42,7 @@ public abstract class AbstractPointInfo implements BasePointInfo { } public void setTestTemplate(boolean testTemplate) { - isTestTemplate = testTemplate; + testTemplate = testTemplate; } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java index 57bec3c45..4c546c4cd 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/chart/info/ChartInfo.java @@ -67,7 +67,6 @@ public class ChartInfo extends AbstractPointInfo { private BaseBook book; - private boolean testTemplate; private boolean testChart; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java index efd245bab..8faa727fe 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfo.java @@ -4,15 +4,15 @@ import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.mainframe.burying.point.AbstractPointInfo; import com.fr.general.CloudCenter; +import com.fr.json.JSON; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLableReader; - -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.HashMap; import java.util.Map; +import com.fr.third.joda.time.DateTime; /** * 对应一张模版的记录 @@ -78,7 +78,7 @@ public class TemplateInfo extends AbstractPointInfo { } public static TemplateInfo newInstance(String templateID, String originID, String saveRecord) { - String createTime = new SimpleDateFormat(SIMPLE_DATE_PATTRN).format(Calendar.getInstance().getTime()); + String createTime = DateTime.now().toString(SIMPLE_DATE_PATTRN); return newInstance(templateID, originID, saveRecord, createTime); } @@ -109,9 +109,9 @@ public class TemplateInfo extends AbstractPointInfo { } public long getSaveTime() { - String save_record = (String) consumingMap.get(ATTR_SAVE_RECORD); - JSONObject jo = new JSONObject(save_record); - return jo.optLong("time"); + String saveRecord = (String) consumingMap.get(ATTR_SAVE_RECORD); + JSONObject jo = JSONFactory.createJSON(JSON.OBJECT, saveRecord); + return jo.getLong("time"); } public String getTemplateCreateTime() { @@ -131,7 +131,7 @@ public class TemplateInfo extends AbstractPointInfo { if (idleDayCount >= 0) { writer.attr(ATTR_DAY_COUNT, this.idleDayCount); } - writer.attr(TEST_TEMPLATE_FLAG, this.isTestTemplate); + writer.attr(TEST_TEMPLATE_FLAG, this.testTemplate); writeProcessMap(writer); writeConsumingMap(writer); @@ -164,7 +164,7 @@ public class TemplateInfo extends AbstractPointInfo { public void readXML(XMLableReader reader) { if (!reader.isChildNode()) { idleDayCount = reader.getAttrAsInt(ATTR_DAY_COUNT, 0); - isTestTemplate = reader.getAttrAsBoolean(TEST_TEMPLATE_FLAG, false); + testTemplate = reader.getAttrAsBoolean(TEST_TEMPLATE_FLAG, false); templateID = reader.getAttrAsString(ATTR_TEMPLATE_ID, StringUtils.EMPTY); originID = reader.getAttrAsString(ATTR_ORIGIN_ID, StringUtils.EMPTY); } else { @@ -196,7 +196,7 @@ public class TemplateInfo extends AbstractPointInfo { @Override public boolean isTestTemplate() { - return isTestTemplate; + return testTemplate; } public static boolean isTestTemplate(int reportType, int cellCount, int floatCount, int blockCount, int widgetCount) { @@ -219,8 +219,8 @@ public class TemplateInfo extends AbstractPointInfo { @Override public Map getSendInfo() { Map sendMap = new HashMap<>(); - sendMap.put(CONSUMING_URL, new JSONObject(consumingMap).toString()); - sendMap.put(PROCESS_URL, new JSONObject(processMap).toString()); + sendMap.put(CONSUMING_URL, JSONFactory.createJSON(JSON.OBJECT, consumingMap).toString()); + sendMap.put(PROCESS_URL, JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); return sendMap; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java index bdc853796..42e7acce6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/template/info/TemplateInfoCollector.java @@ -2,6 +2,8 @@ package com.fr.design.mainframe.template.info; import com.fr.design.mainframe.burying.point.AbstractPointCollector; import com.fr.design.mainframe.burying.point.AbstractPointInfo; +import com.fr.json.JSON; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; @@ -82,7 +84,7 @@ public class TemplateInfoCollector extends AbstractPointCollector } private TemplateInfo createTemplateInfo(String templateID, String originID, long saveTime, int timeConsume){ - JSONObject saveRecord = new JSONObject(); + JSONObject saveRecord = JSONFactory.createJSON(JSON.OBJECT); saveRecord.put("time", saveTime); saveRecord.put("consume", timeConsume); if (this.contains(templateID)){ diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java index 73109f340..bd25f7368 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoCollectorTest.java @@ -3,7 +3,9 @@ package com.fr.design.mainframe.template.info; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.invoke.Reflect; +import com.fr.json.JSON; import com.fr.json.JSONArray; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; @@ -101,7 +103,7 @@ public class TemplateInfoCollectorTest { assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", - new JSONObject(processMap).toString()); + JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); Assert.assertEquals(71113, consumingMap.get("uid")); Assert.assertEquals("2020-05-07 17:25", consumingMap.get("create_time")); @@ -131,7 +133,7 @@ public class TemplateInfoCollectorTest { assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0," + "\"cell_count\":13,\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", new JSONObject(processMap).toString()); + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); Assert.assertEquals(71113, consumingMap.get("uid")); @@ -159,7 +161,7 @@ public class TemplateInfoCollectorTest { assertJsonStringEquals("{\"process\":\"\",\"float_count\":1,\"widget_count\":0,\"cell_count\":13," + "\"paraApply\":0,\"block_count\":3,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", new JSONObject(processMap).toString()); + "\"templateID\":\"e5d7dbb2-d1df-43d4-b974-67acb5ecbffa\"}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); Assert.assertEquals(71113, consumingMap.get("uid")); diff --git a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java index cf2fff3be..1808736f3 100644 --- a/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java +++ b/designer-base/src/test/java/com/fr/design/mainframe/template/info/TemplateInfoTest.java @@ -3,6 +3,8 @@ package com.fr.design.mainframe.template.info; import com.fr.config.MarketConfig; import com.fr.design.DesignerEnvManager; import com.fr.invoke.Reflect; +import com.fr.json.JSON; +import com.fr.json.JSONFactory; import com.fr.json.JSONObject; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLableReader; @@ -105,18 +107,18 @@ public class TemplateInfoTest { assertJsonStringEquals("{\"uid\":71113,\"originID\":\"\",\"create_time\":\"2020-05-07 17:28\"," + "\"saveRecord\":\"{\\\"time\\\":1588843693000,\\\"consume\\\":4}\"," + "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + - "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", new JSONObject(consumingMap).toString()); + "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", JSONFactory.createJSON(JSON.OBJECT, consumingMap).toString()); assertJsonStringEquals("{\"uid\":71113,\"originID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"," + "\"create_time\":\"2020-05-07 17:45\",\"saveRecord\":\"{\\\"time\\\":1588844751000,\\\"consume\\\":1058}\"," + "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"," + - "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", new JSONObject(consumingMap1).toString()); + "\"uuid\":\"6b6699ff-ec63-43b0-9deb-b580a5f10411\"}", JSONFactory.createJSON(JSON.OBJECT, consumingMap1).toString()); assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"}", new JSONObject(processMap).toString()); + "\"templateID\":\"aac1139e-018b-4481-867a-a18fc6d6f3e6\"}", JSONFactory.createJSON(JSON.OBJECT, processMap).toString()); assertJsonStringEquals("{\"process\":\"\",\"float_count\":0,\"widget_count\":0,\"cell_count\":3," + "\"paraApply\":0,\"block_count\":0,\"report_type\":0,\"components_info\":\"[]\"," + - "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"}", new JSONObject(processMap1).toString()); + "\"templateID\":\"2521d03c-b238-41a5-9a1d-2498efff3a97\"}", JSONFactory.createJSON(JSON.OBJECT, processMap1).toString()); } private TemplateInfo createTemplateInfo(String xmlContent) throws XMLStreamException { @@ -126,16 +128,16 @@ public class TemplateInfoTest { } @Test - public void testGetSaveTime(){ + public void testGetSaveTime() { Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); String saveRecord = (String) consumingMap.get("saveRecord"); - JSONObject object = new JSONObject(saveRecord); + JSONObject object = JSONFactory.createJSON(JSON.OBJECT, saveRecord); Assert.assertEquals(1588843693000L, object.optLong("time")); } @Test - public void testGetTemplateCreateTime(){ + public void testGetTemplateCreateTime() { Map consumingMap = Reflect.on(templateInfo).field("consumingMap").get(); - Assert.assertEquals("2020-05-07 17:28", (String)consumingMap.get("create_time")); + Assert.assertEquals("2020-05-07 17:28", (String) consumingMap.get("create_time")); } } 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 a77a0f58a..8496e2592 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 @@ -185,12 +185,12 @@ public class JFormProcessInfo extends TemplateProcessInfo { } } private void addComponentCreateInfo(JSONObject jsonObject) { - String componentID = jsonObject.optString("componentID"); + String componentID = jsonObject.getString("componentID"); componentProcessInfoMap.put(componentID, jsonObject); } private void addComponentRemoveInfo(JSONObject jsonObject) { - String componentID = jsonObject.optString("componentID"); + String componentID = jsonObject.getString("componentID"); JSONObject info = componentProcessInfoMap.get(componentID); if (info == null) { info = jsonObject; From 262f967fcbf0b3c9389d658a1d1edf372a8232f5 Mon Sep 17 00:00:00 2001 From: kerry Date: Sat, 9 May 2020 13:35:30 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mainframe/JForm.java | 6 ------ 1 file changed, 6 deletions(-) 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 ed695ea94..ff59a52d4 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 @@ -133,14 +133,8 @@ public class JForm extends JTemplate implements BaseJForm Date: Sat, 9 May 2020 15:18:03 +0800 Subject: [PATCH 10/12] =?UTF-8?q?REPORT-30735=E3=80=9010.0.6=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E5=86=85=E6=94=B9=E5=8A=A8=E3=80=91frm?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=90=8D=E7=A7=B0=E8=A7=84=E8=8C=83=E7=BB=9F?= =?UTF-8?q?=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/EastRegionContainerPane.java | 54 +++++++++---------- .../mainframe/widget/BasicPropertyPane.java | 2 +- .../widget/WidgetBoundsPaneFactory.java | 8 +-- .../designer/creator/XWBorderLayout.java | 10 ++-- .../design/form/util/XCreatorConstants.java | 4 +- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java index cf8f4f74d..a1f88d77c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/EastRegionContainerPane.java @@ -130,13 +130,13 @@ public class EastRegionContainerPane extends UIEastResizableContainer { defaultAuthorityPane = getDefaultPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Not_Support_Authority_Edit")); switchMode(PropertyMode.REPORT); setContainerWidth(CONTAINER_WIDTH); - + initPluginPane(); listenPlugin(); } - + private void listenPlugin() { - + PluginFilter filter = new PluginFilter() { @Override public boolean accept(PluginContext context) { @@ -167,15 +167,15 @@ public class EastRegionContainerPane extends UIEastResizableContainer { Set providers = runtime.get(PropertyItemPaneProvider.XML_TAG); for (PropertyItemPaneProvider provider : providers) { removePropertyItem(provider); - + } updateAllPropertyPane(); } }, filter); } - + private void removePropertyItem(PropertyItemPaneProvider provider) { - + propertyItemMap.remove(provider.key()); String replaceKey = provider.replaceKey(); if (replaceKey == null) { @@ -186,18 +186,18 @@ public class EastRegionContainerPane extends UIEastResizableContainer { replaceItem.setReplace(false); } } - + private void initPluginPane() { - + ExtraDesignClassManager classManager = PluginModule.getAgent(PluginModule.ExtraDesign); Set providers = classManager.getArray(PropertyItemPaneProvider.XML_TAG); for (PropertyItemPaneProvider provider : providers) { addPropertyItem(provider); } } - + private void addPropertyItem(PropertyItemPaneProvider provider) { - + String key = provider.key(); PropertyItemBean itemBean = provider.getItem(); PropertyItem propertyItem = new PropertyItem(itemBean.getName(), @@ -212,7 +212,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { button.addActionListener(buttonListener); } propertyItemMap.put(key, propertyItem); - + String replaceKey = provider.replaceKey(); if (replaceKey == null) { return; @@ -221,11 +221,11 @@ public class EastRegionContainerPane extends UIEastResizableContainer { if (replaceItem != null) { replaceItem.setReplace(true); } - + } - + private void initPropertyItemList() { - + propertyItemMap = new LinkedHashMap<>(); // 有序map // 单元格元素 PropertyItem cellElement = new PropertyItem(KEY_CELL_ELEMENT, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Cell_Element"), @@ -240,7 +240,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { "floatelement", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_FLOAT, PropertyMode.POLY, PropertyMode.POLY_CHART}, new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_FLOAT, PropertyMode.POLY_REPORT}); // 控件设置 - PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Settings"), + PropertyItem widgetSettings = new PropertyItem(KEY_WIDGET_SETTINGS, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Settings"), "widgetsettings", new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.REPORT_FLOAT, PropertyMode.FORM, PropertyMode.POLY}, new PropertyMode[]{PropertyMode.REPORT, PropertyMode.REPORT_PARA, PropertyMode.FORM, PropertyMode.POLY_REPORT, PropertyMode.POLY_CHART}); // 条件属性 @@ -482,9 +482,9 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void replaceConfiguredRolesPane(JComponent pane) { propertyItemMap.get(KEY_CONFIGURED_ROLES).replaceContentPane(pane); } - + public void replaceKeyPane(String key, JComponent pane) { - + propertyItemMap.get(key).replaceContentPane(pane); } @@ -653,8 +653,8 @@ public class EastRegionContainerPane extends UIEastResizableContainer { private String iconSuffix = ICON_SUFFIX_NORMAL; // normal, diabled, selected, 三者之一 private final Color selectedBtnBackground = new Color(0xF5F5F7); private Color originBtnBackground; - - + + public PropertyItem(String name, String title, String btnIconName, PropertyMode[] visibleModes, PropertyMode[] enableModes) { this(name, title, btnIconName, ICON_BASE_DIR, visibleModes, enableModes); } @@ -705,12 +705,12 @@ public class EastRegionContainerPane extends UIEastResizableContainer { public void setVisible(boolean isVisible) { this.isVisible = isVisible; } - + public void setReplace(boolean replace) { - + this.replace = replace; } - + public boolean isEnabled() { return isEnabled; } @@ -720,16 +720,16 @@ public class EastRegionContainerPane extends UIEastResizableContainer { this.isEnabled = isEnabled; button.setEnabled(isEnabled); } - + public void setIconBaseDir(String iconBaseDir) { this.iconBaseDir = iconBaseDir; } - + private String getIconBaseDir() { - + return StringUtils.isEmpty(iconBaseDir) ? ICON_BASE_DIR : iconBaseDir; } - + private void initPropertyPanel() { propertyPanel = new JPanel(); propertyPanel.setBackground(Color.pink); @@ -810,7 +810,7 @@ public class EastRegionContainerPane extends UIEastResizableContainer { } private String getBtnIconUrl() { - + return getIconBaseDir() + btnIconName + iconSuffix; } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/widget/BasicPropertyPane.java b/designer-base/src/main/java/com/fr/design/mainframe/widget/BasicPropertyPane.java index d675aceb2..099684a81 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/widget/BasicPropertyPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/widget/BasicPropertyPane.java @@ -63,7 +63,7 @@ public class BasicPropertyPane extends BasicPane { double[] columnSize = {p, f}; int[][] rowCount = {{1, 1}}; Component[][] components = new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Name")), widgetName}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Name")), widgetName}, }; JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_W1, IntervalConstants.INTERVAL_L1); panel.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); diff --git a/designer-base/src/main/java/com/fr/design/widget/WidgetBoundsPaneFactory.java b/designer-base/src/main/java/com/fr/design/widget/WidgetBoundsPaneFactory.java index 5476cb3a1..c4c840227 100644 --- a/designer-base/src/main/java/com/fr/design/widget/WidgetBoundsPaneFactory.java +++ b/designer-base/src/main/java/com/fr/design/widget/WidgetBoundsPaneFactory.java @@ -25,7 +25,7 @@ public class WidgetBoundsPaneFactory { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ - new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Size")), createRightPane(width, height)}, + new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Size")), createRightPane(width, height)}, new Component[]{null, createRightPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tree_Width"), SwingConstants.CENTER), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tree_Height"), SwingConstants.CENTER))}, }; double[] rowSize = {p, p}; @@ -53,11 +53,11 @@ public class WidgetBoundsPaneFactory { double p = TableLayout.PREFERRED; Component[][] northComponents = new Component[][]{ - new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Position")), createRightPane(x, y)}, + new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Position")), createRightPane(x, y)}, new Component[]{null, createRightPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_X_Coordinate"), SwingConstants.CENTER), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Y_Coordinate"), SwingConstants.CENTER))}, }; Component[][] centerComponents = new Component[][]{ - new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Size")), createRightPane(width, height)}, + new Component[]{FRWidgetFactory.createLineWrapLabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Size")), createRightPane(width, height)}, new Component[]{null, createRightPane(new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tree_Width"), SwingConstants.CENTER), new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Tree_Height"), SwingConstants.CENTER))}, }; double[] rowSize = {p, p}; @@ -79,7 +79,7 @@ public class WidgetBoundsPaneFactory { double f = TableLayout.FILL; double p = TableLayout.PREFERRED; Component[][] components = new Component[][]{ - new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Size")), width}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Component_Size")), width}, }; double[] rowSize = {p}; double[] columnSize = {p, f}; diff --git a/designer-form/src/main/java/com/fr/design/designer/creator/XWBorderLayout.java b/designer-form/src/main/java/com/fr/design/designer/creator/XWBorderLayout.java index ff67634e4..6d2003e21 100644 --- a/designer-form/src/main/java/com/fr/design/designer/creator/XWBorderLayout.java +++ b/designer-form/src/main/java/com/fr/design/designer/creator/XWBorderLayout.java @@ -28,7 +28,7 @@ public class XWBorderLayout extends XLayoutContainer { public XWBorderLayout(){ super(new WBorderLayout(),new Dimension(WBorderLayout.DEFAULT_WIDTH, WBorderLayout.DEFAULT_HEIGHT)); } - + public XWBorderLayout(WBorderLayout widget, Dimension initSize) { super(widget, initSize); } @@ -77,7 +77,7 @@ public class XWBorderLayout extends XLayoutContainer { @Override public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { return new CRPropertyDescriptor[] { - new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Toolkit.i18nText("Fine-Design_Form_Form_Widget_Name")), + new CRPropertyDescriptor("widgetName", this.data.getClass()).setI18NName(Toolkit.i18nText("Fine-Design_Basic_Component_Name")), new CRPropertyDescriptor("customTitleName", this.data.getClass()).setI18NName(Toolkit.i18nText("Fine-Design_Form_Title")) }; } @@ -101,7 +101,7 @@ public class XWBorderLayout extends XLayoutContainer { } isRefreshing = false; } - + /** * 设计界面中有组件添加时,要通知WLayout容器重新paint @@ -202,9 +202,9 @@ public class XWBorderLayout extends XLayoutContainer { creator.setDirections(new int[]{Direction.RIGHT}); } } - + @Override public LayoutAdapter getLayoutAdapter() { return new FRBorderLayoutAdapter(this); } -} \ No newline at end of file +} diff --git a/designer-form/src/main/java/com/fr/design/form/util/XCreatorConstants.java b/designer-form/src/main/java/com/fr/design/form/util/XCreatorConstants.java index 54b32ca6c..71ab3c002 100644 --- a/designer-form/src/main/java/com/fr/design/form/util/XCreatorConstants.java +++ b/designer-form/src/main/java/com/fr/design/form/util/XCreatorConstants.java @@ -19,7 +19,7 @@ public class XCreatorConstants { public static final String WIDGETNAME = "widgetName"; // 描述属性的分类 public static final String PROPERTY_CATEGORY = "category"; - public static final String DEFAULT_GROUP_NAME = "Fine-Design_Basic_Form_Basic_Properties"; + public static final String DEFAULT_GROUP_NAME = "Fine-Design_Report_Basic"; public static final String PROPERTY_VALIDATE = "Fine-Design_Basic_Validate"; public static final Color FORM_BG = new Color(255, 255, 255); // 拖拽标识块的大小 @@ -52,4 +52,4 @@ public class XCreatorConstants { // 不同粗细的线 public static final BasicStroke STROKE = new BasicStroke(2); -} \ No newline at end of file +} From 7a58515a00e4c8a2cc4b039719640525b689c7de Mon Sep 17 00:00:00 2001 From: Bruce Date: Sat, 9 May 2020 16:17:08 +0800 Subject: [PATCH 11/12] =?UTF-8?q?REPORT-31219=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=89=93=E5=8D=B0=E8=BE=B9=E8=B7=9D=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=B4=9F=E6=95=B0=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/report/UnitFieldPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/report/UnitFieldPane.java b/designer-realize/src/main/java/com/fr/design/report/UnitFieldPane.java index 4a6984d0f..6da8957b2 100644 --- a/designer-realize/src/main/java/com/fr/design/report/UnitFieldPane.java +++ b/designer-realize/src/main/java/com/fr/design/report/UnitFieldPane.java @@ -67,7 +67,7 @@ public class UnitFieldPane extends JPanel { this.unitType = unitType; - valueSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); + valueSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, Integer.MIN_VALUE, Double.MAX_VALUE, 1.0)); textField = ((JSpinner.DefaultEditor) valueSpinner.getEditor()).getTextField(); textField.setColumns(OperatingSystem.isWindows() ? TEXT_FIELD_COLUMNS_WINDOWS : TEXT_FIELD_COLUMNS); InputEventBaseOnOS.addBasicEditInputMap(textField); From b6052c4af2ea525d8f530706362c61869fed114d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=B2=B3?= <445798420@qq.com> Date: Mon, 11 May 2020 10:39:53 +0800 Subject: [PATCH 12/12] =?UTF-8?q?CHART-13814=20=20=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E7=82=B9=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/marker/VanChartCommonMarkerPane.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java b/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java index bda44ccf3..15cba5c8d 100644 --- a/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java +++ b/designer-chart/src/main/java/com/fr/van/chart/designer/component/marker/VanChartCommonMarkerPane.java @@ -2,7 +2,6 @@ package com.fr.van.chart.designer.component.marker; import com.fr.chart.chartglyph.Marker; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.constants.LayoutConstants; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ispinner.UISpinner; import com.fr.design.gui.xcombox.MarkerComboBox; @@ -57,6 +56,7 @@ public class VanChartCommonMarkerPane extends BasicBeanPane } private static Marker[] normalMarkersWithAuto = null; + protected static Marker[] getNormalMarkersWithAuto() { if (normalMarkersWithAuto == null) { normalMarkersWithAuto = new Marker[NORMAL_TYPES.length + 1]; @@ -130,17 +130,17 @@ public class VanChartCommonMarkerPane extends BasicBeanPane double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double e = TableLayout4VanChartHelper.EDIT_AREA_WIDTH; + double e = getColumnSize()[1]; double[] columnSize = {f, e}; double[] rowSize = {p, p, p}; - return TableLayoutHelper.createGapTableLayoutPane(getPaneComponents(), rowSize, columnSize, 0, LayoutConstants.VGAP_MEDIUM); + return TableLayoutHelper.createTableLayoutPane(getPaneComponents(), rowSize, columnSize); } protected Component[][] getPaneComponents() { return new Component[][]{ new Component[]{null, null}, - new Component[]{null, typeComboBox}, + new Component[]{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Fill_Color")), typeComboBox}, new Component[]{null, centerPane}, }; } @@ -175,7 +175,7 @@ public class VanChartCommonMarkerPane extends BasicBeanPane protected Component[][] getMarkerConfigComponent() { return new Component[][]{ - new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Fill_Color")), markerFillColor}, + new Component[]{markerFillColor, null}, new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Radius")), radius} }; }