diff --git a/README.md b/README.md index ffcb652..b0216b4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ # open-JSD-6177 -JSD-6177 多层级选择树控件 \ No newline at end of file +JSD-6177 多层级选择树控件\ +免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ +仅作为开发者学习参考使用!禁止用于任何商业用途!\ +为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。 \ No newline at end of file diff --git a/lib/finekit-10.0.jar b/lib/finekit-10.0.jar new file mode 100644 index 0000000..546f2f5 Binary files /dev/null and b/lib/finekit-10.0.jar differ diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..f5356fe --- /dev/null +++ b/plugin.xml @@ -0,0 +1,21 @@ + + com.fr.plugin.third.party.xxxx + + yes + 0.1 + 10.0 + 2019-01-01 + fr.open + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionEditor.java b/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionEditor.java new file mode 100644 index 0000000..0c02e90 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionEditor.java @@ -0,0 +1,490 @@ +package com.fr.plugin.third.party.xxxx; + +import com.fanruan.api.util.StringKit; +import com.fanruan.api.xml.XmlKit; +import com.fr.base.TableData; +import com.fr.data.core.DataCoreUtils; +import com.fr.data.core.db.DBUtils; +import com.fr.data.core.db.dialect.DialectFactory; +import com.fr.data.impl.Connection; +import com.fr.data.impl.DBTableData; +import com.fr.file.TableDataConfig; +import com.fr.form.ui.DataControl; +import com.fr.form.ui.DirectWriteEditor; +import com.fr.form.ui.concept.data.ValueInitializer; +import com.fr.general.data.DataModel; +import com.fr.general.data.TableDataException; +import com.fr.json.JSONArray; +import com.fr.json.JSONException; +import com.fr.json.JSONObject; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionaryConfig; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionarySettings; +import com.fr.plugin.third.party.xxxx.data.CustomReturnDataConfig; +import com.fr.plugin.third.party.xxxx.data.CustomWidgetConfig; +import com.fr.script.Calculator; +import com.fr.stable.core.NodeVisitor; +import com.fr.stable.script.CalculatorProvider; +import com.fr.stable.web.Repository; +import com.fr.stable.web.SessionProvider; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.web.core.TemplateSessionIDInfo; +import com.fr.web.utils.WebUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +public class MultilevelSelectionEditor extends DirectWriteEditor implements DataControl { + private CustomWidgetConfig widgetConfig = new CustomWidgetConfig(); + private CustomReturnDataConfig returnDataConfig = new CustomReturnDataConfig(); + + + @Override + public int[] getValueType() { + return new int[0]; + } + + @Override + public void setWidgetValue(ValueInitializer valueInitializer) { + + } + + @Override + public ValueInitializer getWidgetValue() { + return null; + } + + @Override + public void createValueResult(CalculatorProvider calculatorProvider, JSONObject jsonObject) { + + } + + @Override + public String getFormatText() { + return null; + } + + @Override + public String getDataBindDefaultValue(CalculatorProvider calculatorProvider) { + return null; + } + + @Override + public String getXType() { + /*只能小写*/ + return "honormultilevelselectionwidget"; + } + + + public CustomWidgetConfig getWidgetConfig() { + return widgetConfig; + } + + public void setWidgetConfig(CustomWidgetConfig widgetConfig) { + this.widgetConfig = widgetConfig; + } + + public CustomReturnDataConfig getReturnDataConfig() { + return returnDataConfig; + } + + public void setReturnDataConfig(CustomReturnDataConfig returnData) { + this.returnDataConfig = returnData; + } + + public JSONObject createJSONConfig(Repository paramRepository, Calculator paramCalculator, NodeVisitor paramNodeVisitor) throws JSONException { + JSONObject jSONObject = super.createJSONConfig(paramRepository, paramCalculator, paramNodeVisitor); + jSONObject.put("widgetConfig_" + "returnArray", this.returnDataConfig.isReturnArray()); + jSONObject.put("widgetConfig_" + "delimiter", this.returnDataConfig.getDelimiter()); + jSONObject.put("widgetConfig_" + "startSymbol", this.returnDataConfig.getStartSymbol()); + jSONObject.put("widgetConfig_" + "endSymbol", this.returnDataConfig.getEndSymbol()); + + //jSONObject.put("widgetConfig_" + "windowTitle", this.widgetConfig.getWindowTitle()); + //jSONObject.put("widgetConfig_" + "filterTitle", this.widgetConfig.getFilterTitle()); + //jSONObject.put("widgetConfig_" + "candidateTitle", this.widgetConfig.getCandidateTitle()); + //jSONObject.put("widgetConfig_" + "selectedTitle", this.widgetConfig.getSelectedTitle()); + jSONObject.put("widgetConfig_" + "width", this.widgetConfig.getWidth()); + jSONObject.put("widgetConfig_" + "height", this.widgetConfig.getHeight()); + jSONObject.put("widgetConfig_" + "fontSize", this.widgetConfig.getFontSize()); + + CustomLevelDictionarySettings settings = this.widgetConfig.getDicSettings(); + + JSONArray jsonArray = createLevelSettings(); + int levelCount = jsonArray.size(); + jSONObject.put("widgetConfig_" + "levelCount", levelCount); + jSONObject.put("widgetConfig_" + "levelSettings", jsonArray); + return jSONObject; + } + + private JSONArray createLevelSettings() { + JSONArray jsonArray = new JSONArray(); + CustomLevelDictionarySettings settings = this.widgetConfig.getDicSettings(); + if (settings == null) { + return jsonArray; + } + + CustomLevelDictionaryConfig[] configs = settings.getConfigs(); + if ((configs == null) || (configs.length <= 0)) { + return jsonArray; + } + JSONObject configObject; + CustomLevelDictionaryConfig config; + for (int i = 0, max = configs.length - 1; i <= max; i++) { + config = configs[i]; + if (config == null) { + continue; + } + configObject = new JSONObject(); + configObject.put("valueColumnName", config.getValueColumnName()); + configObject.put("nameColumnName", config.getNameColumnName()); + configObject.put("title", config.getTitle()); + configObject.put("levelWidth", config.getLevelWidth()); + jsonArray.add(configObject); + } + return jsonArray; + } + + public JSONArray createJSONData(SessionProvider sessionProvider, Calculator calculator, HttpServletRequest request) throws Exception { + return createJSONData(sessionProvider, (CalculatorProvider) calculator, request); + } + + public JSONArray createJSONData(SessionProvider sessionProvider, CalculatorProvider calculatorProvider, HttpServletRequest request) throws Exception { + String dataType = WebUtils.getHTTPRequestParameter(request, "dataType"); + JSONArray jsonArray = new JSONArray(); + TemplateSessionIDInfo templateSessionIDInfo = null; + if ((sessionProvider != null) && (sessionProvider instanceof TemplateSessionIDInfo)) { + templateSessionIDInfo = (TemplateSessionIDInfo) sessionProvider; + } + if ("ALL".equalsIgnoreCase(dataType)) { + jsonArray = getUpperData((Calculator) calculatorProvider, templateSessionIDInfo); + } else if ("VALUE".equalsIgnoreCase(dataType)) { + String upperValue = WebUtils.getHTTPRequestParameter(request, "upperValue"); + //jsonArray = getValueData((Calculator) calculatorProvider, upperValue, templateSessionIDInfo); + jsonArray = getValueData((Calculator) calculatorProvider , templateSessionIDInfo,request); + } + return jsonArray; + } + + + /** + * 获取父级所有数据 + * + * @param calculator + * @return + * @throws TableDataException + */ + private JSONArray getUpperData(Calculator calculator, TemplateSessionIDInfo templateSessionIDInfo) throws TableDataException { + JSONArray jsonArray = new JSONArray(); + DataModel dataModel = getDataModel(calculator, templateSessionIDInfo); + if (dataModel == null) { + return jsonArray; + } + + int upperValueIndex = dataModel.getColumnIndex(this.widgetConfig.getUpperValue()); + int upperNameIndex = dataModel.getColumnIndex(this.widgetConfig.getUpperName()); + if ((upperValueIndex <= -1) || (upperNameIndex <= -1)) { + return jsonArray; + } + List values = new ArrayList<>(); + int rowCount = dataModel.getRowCount(); + String value, name; + JSONObject jsonObject; + for (int i = 0, max = rowCount - 1; i <= max; i++) { + value = (String) dataModel.getValueAt(i, upperValueIndex); + name = (String) dataModel.getValueAt(i, upperNameIndex); + if (StringKit.isEmpty(value) || StringKit.isEmpty(name)) { + continue; + } + if (values.contains(value)) { + continue; + } + values.add(value); + jsonObject = new JSONObject(); + jsonObject.put("value", value); + jsonObject.put("text", name); + jsonArray.add(jsonObject); + } + values.clear(); + return jsonArray; + } + + + /** + * 获取子级数据 + * + * @param calculator + * @param templateSessionIDInfo + * @param request + * @return + * @throws TableDataException + */ + private JSONArray getValueData(Calculator calculator, TemplateSessionIDInfo templateSessionIDInfo, HttpServletRequest request) throws TableDataException { + JSONArray jsonArray = new JSONArray(); + + String upperValue = WebUtils.getHTTPRequestParameter(request, "upperValue"); + String currentValue = WebUtils.getHTTPRequestParameter(request, "currentValue"); + String levelIndexValue = WebUtils.getHTTPRequestParameter(request, "levelIndex"); + + int levelIndex = Integer.valueOf(levelIndexValue); + List upperValues = getValues(upperValue); + + DataModel dataModel = getDataModel(calculator, templateSessionIDInfo); + if (dataModel == null) { + return jsonArray; + } + + String upperValueColName = getColumnName(levelIndex, "UPPER_VALUE"); + String valueColName = getColumnName(levelIndex, "VALUE"); + String nameColName = getColumnName(levelIndex, "NAME"); + + int upperValueIndex = dataModel.getColumnIndex(upperValueColName); + int valueIndex = dataModel.getColumnIndex(valueColName); + int nameIndex = dataModel.getColumnIndex(nameColName); + if ((valueIndex <= -1) || (nameIndex <= -1)) { + return jsonArray; + } + List values = new ArrayList<>(); + int rowCount = dataModel.getRowCount(); + String value, name, tempUpperValue = ""; + JSONObject jsonObject; + for (int i = 0, max = rowCount - 1; i <= max; i++) { + if ((levelIndex >= 1) && (upperValues.size() >= 1)) { + tempUpperValue = (String) dataModel.getValueAt(i, upperValueIndex); + } + value = (String) dataModel.getValueAt(i, valueIndex); + name = (String) dataModel.getValueAt(i, nameIndex); + if (StringKit.isEmpty(value) || StringKit.isEmpty(name)) { + continue; + } + + if (StringKit.isNotEmpty(currentValue) && (name.indexOf(currentValue) <= 0)) { + continue; + } + + if (values.contains(value)) { + continue; + } + if ((levelIndex >= 1) && (upperValues.size() >= 1) && (!upperValues.contains(tempUpperValue))) { + continue; + } + values.add(value); + jsonObject = new JSONObject(); + jsonObject.put("value", value); + jsonObject.put("text", name); + jsonArray.add(jsonObject); + } + values.clear(); + return jsonArray; + } + + private String getColumnName(int level, String type) { + if (level <= -1) { + return ""; + } + if (StringKit.isEmpty(type)) { + return ""; + } + + if (type.startsWith("UPPER") && (level <= 0)) { + return ""; + } + + CustomLevelDictionarySettings settings = this.widgetConfig.getDicSettings(); + CustomLevelDictionaryConfig[] configs = settings.getConfigs(); + if ((configs == null) || (configs.length <= level)) { + return ""; + } + + int index = level; + if (type.startsWith("UPPER")) { + index = level - 1; + } + CustomLevelDictionaryConfig config = configs[index]; + if ("UPPER_NAME".equalsIgnoreCase(type) || "NAME".equalsIgnoreCase(type)) { + return config.getNameColumnName(); + } + + if ("UPPER_VALUE".equalsIgnoreCase(type) || "VALUE".equalsIgnoreCase(type)) { + return config.getValueColumnName(); + } + return ""; + } + + + private List getValues(String content) { + List values = new ArrayList<>(); + if (StringKit.isEmpty(content)) { + return values; + } + String[] tempValues = content.split(","); + if ((tempValues == null) || (tempValues.length <= 0)) { + return values; + } + + String tempValue; + for (int i = 0, max = tempValues.length - 1; i <= max; i++) { + tempValue = tempValues[i]; + if (StringKit.isEmpty(tempValue)) { + continue; + } + values.add(tempValue); + } + return values; + } + + + /** + * 获取子级数据 + * + * @param calculator + * @param upperValue + * @return + * @throws TableDataException + */ + private JSONArray getValueData(Calculator calculator, String upperValue, TemplateSessionIDInfo templateSessionIDInfo) throws TableDataException { + JSONArray jsonArray = new JSONArray(); + if (StringKit.isEmpty(upperValue)) { + return jsonArray; + } + DataModel dataModel = getDataModel(calculator, templateSessionIDInfo); + if (dataModel == null) { + return jsonArray; + } + + int upperValueIndex = dataModel.getColumnIndex(this.widgetConfig.getUpperValue()); + int valueIndex = dataModel.getColumnIndex(this.widgetConfig.getValue()); + int nameIndex = dataModel.getColumnIndex(this.widgetConfig.getName()); + if ((upperValueIndex <= -1) || (valueIndex <= -1) || (nameIndex <= -1)) { + return jsonArray; + } + List values = new ArrayList<>(); + int rowCount = dataModel.getRowCount(); + String value, name, tempUpperValue; + JSONObject jsonObject; + for (int i = 0, max = rowCount - 1; i <= max; i++) { + tempUpperValue = (String) dataModel.getValueAt(i, upperValueIndex); + value = (String) dataModel.getValueAt(i, valueIndex); + name = (String) dataModel.getValueAt(i, nameIndex); + if (StringKit.isEmpty(tempUpperValue) || StringKit.isEmpty(value) || StringKit.isEmpty(name)) { + continue; + } + if (values.contains(value)) { + continue; + } + if (!upperValue.equals(tempUpperValue)) { + continue; + } + values.add(value); + jsonObject = new JSONObject(); + jsonObject.put("value", value); + jsonObject.put("text", name); + jsonArray.add(jsonObject); + } + values.clear(); + return jsonArray; + } + + private DataModel getDataModel(Calculator calculator, TemplateSessionIDInfo templateSessionIDInfo) throws TableDataException { + TableData tableData = null; + /*if (this.widgetConfig.getDicTypeIndex() == 0) { + tableData = getDsTableData(templateSessionIDInfo); + } else { + tableData = getDbTableData(); + }*/ + tableData = getDsTableData(templateSessionIDInfo); + if (tableData == null) { + return null; + } + if (calculator == null) { + calculator = Calculator.createCalculator(); + } + DataModel dataModel = tableData.createDataModel(calculator); + if (dataModel.getRowCount() <= 0) { + return null; + } + return dataModel; + } + + private TableData getDsTableData(TemplateSessionIDInfo templateSessionIDInfo) { + TableData tableData = null; + if (templateSessionIDInfo != null) { + tableData = templateSessionIDInfo.getTableDataSource().getTableData(this.widgetConfig.getDsName()); + } + if (tableData == null) { + tableData = TableDataConfig.getInstance().getTableData(this.widgetConfig.getDsName()); + } + return tableData; + } + + + private TableData getDbTableData() { + Connection connection = DBUtils.checkDBConnection(this.widgetConfig.getDbName()); + DBTableData tableData = new DBTableData(connection, DataCoreUtils.createSelectSQL(this.widgetConfig.getSchemaName(), this.widgetConfig.getTableName(), DialectFactory.getDialectByName(this.widgetConfig.getDbName()))); + return tableData; + } + + public void readXML(XMLableReader paramXMLableReader) { + super.readXML(paramXMLableReader); + if (paramXMLableReader.isChildNode()) { + String tagName = paramXMLableReader.getTagName(); + if (tagName.equals("DicAttr")) { + this.widgetConfig.setDsName(paramXMLableReader.getAttrAsString("dsName", "")); + } else if ("RetAttr".equals(tagName)) { + this.returnDataConfig.setReturnArray(paramXMLableReader.getAttrAsBoolean("returnArray", true)); + this.returnDataConfig.setDelimiter(paramXMLableReader.getAttrAsString("delimiter", "")); + this.returnDataConfig.setStartSymbol(paramXMLableReader.getAttrAsString("startSymbol", "")); + this.returnDataConfig.setEndSymbol(paramXMLableReader.getAttrAsString("endSymbol", "")); + } else if ("PopupAttr".equals(tagName)) { + this.widgetConfig.setWidth(paramXMLableReader.getAttrAsDouble("width", 0)); + this.widgetConfig.setHeight(paramXMLableReader.getAttrAsDouble("height", 0)); + this.widgetConfig.setFontSize(paramXMLableReader.getAttrAsInt("fontSize", 12)); + } + + if (CustomLevelDictionaryConfig.XML_TAG.equals(tagName)) { + CustomLevelDictionaryConfig config = (CustomLevelDictionaryConfig) XmlKit.readXMLable(paramXMLableReader); + CustomLevelDictionarySettings settings = this.widgetConfig.getDicSettings(); + if (settings == null) { + settings = new CustomLevelDictionarySettings(); + this.widgetConfig.setDicSettings(settings); + } + settings.addConfig(config); + } + } + } + + public void writeXML(XMLPrintWriter paramXMLPrintWriter) { + super.writeXML(paramXMLPrintWriter); + paramXMLPrintWriter.startTAG("DicAttr"); + paramXMLPrintWriter.attr("dsName", this.widgetConfig.getDsName()); + paramXMLPrintWriter.end(); + + paramXMLPrintWriter.startTAG("RetAttr"); + paramXMLPrintWriter.attr("returnArray", this.returnDataConfig.isReturnArray()); + paramXMLPrintWriter.attr("delimiter", this.returnDataConfig.getDelimiter()); + paramXMLPrintWriter.attr("startSymbol", this.returnDataConfig.getStartSymbol()); + paramXMLPrintWriter.attr("endSymbol", this.returnDataConfig.getEndSymbol()); + paramXMLPrintWriter.end(); + + paramXMLPrintWriter.startTAG("PopupAttr"); + paramXMLPrintWriter.attr("width", this.widgetConfig.getWidth()); + paramXMLPrintWriter.attr("height", this.widgetConfig.getHeight()); + paramXMLPrintWriter.attr("fontSize", this.widgetConfig.getFontSize()); + paramXMLPrintWriter.end(); + + CustomLevelDictionarySettings settings = this.widgetConfig.getDicSettings(); + if (settings == null) { + return; + } + CustomLevelDictionaryConfig[] configs = settings.getConfigs(); + if (configs == null) { + return; + } + for (CustomLevelDictionaryConfig config : configs) { + XmlKit.writeXMLable(paramXMLPrintWriter, config, CustomLevelDictionaryConfig.XML_TAG); + } + + + } + +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionWidgetOptionProvider.java b/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionWidgetOptionProvider.java new file mode 100644 index 0000000..547252a --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/MultilevelSelectionWidgetOptionProvider.java @@ -0,0 +1,30 @@ +package com.fr.plugin.third.party.xxxx; + +import com.fr.design.fun.impl.AbstractFormWidgetOptionProvider; +import com.fr.intelli.record.Focus; +import com.fr.intelli.record.Original; +import com.fr.record.analyzer.EnableMetrics; + +@EnableMetrics +public class MultilevelSelectionWidgetOptionProvider extends AbstractFormWidgetOptionProvider { + @Override + @Focus(id = "com.fr.plugin.third.party.xxxx", text = "plugin-jsd-6177", source = Original.PLUGIN) + public Class classForWidget() { + return MultilevelSelectionEditor.class; + } + + @Override + public Class appearanceForWidget() { + return XMsw.class; + } + + @Override + public String iconPathForWidget() { + return "com/fr/plugin/third/party/xxxx/images/selection_16.png"; + } + + @Override + public String nameForWidget() { + return "多层选择控件"; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/XMsw.java b/src/main/java/com/fr/plugin/third/party/xxxx/XMsw.java new file mode 100644 index 0000000..857c273 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/XMsw.java @@ -0,0 +1,81 @@ +package com.fr.plugin.third.party.xxxx; + +import com.fanruan.api.design.DesignKit; +import com.fr.design.designer.creator.CRPropertyDescriptor; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.designer.creator.XWScaleLayout; +import com.fr.design.designer.creator.XWidgetCreator; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.plugin.third.party.xxxx.ui.CustomDictionaryPropertyEditor; +import com.fr.plugin.third.party.xxxx.ui.ReturnTypePropertyEditor; +import com.fr.stable.ArrayUtils; + +import javax.swing.*; +import java.awt.*; +import java.beans.IntrospectionException; + + +public class XMsw extends XWidgetCreator { + LimpidButton btn; + + public XMsw(MultilevelSelectionEditor widget, Dimension dimension) { + super(widget, dimension); + } + + @Override + protected JComponent initEditor() { + if (this.editor == null) { + this.editor = FRGUIPaneFactory.createBorderLayout_S_Pane(); + UITextField var1 = new UITextField(5); + var1.setOpaque(false); + this.editor.add(var1, "Center"); + float opacity = this.toData().isVisible() ? 1.0F : 0.4F; + this.btn = new LimpidButton("", this.getIconPath(), opacity); + this.btn.setPreferredSize(new Dimension(21, 21)); + this.btn.setOpaque(true); + this.editor.add(this.btn, "East"); + this.editor.setBackground(Color.WHITE); + } + + return this.editor; + } + + public String getIconPath() { + return "/com/fr/plugin/third/party/xxxx/images/selection_16.png"; + } + + @Override + protected String getIconName() { + return "/com/fr/plugin/third/party/xxxx/images/selection_16.png"; + } + + @Override + public boolean shouldScaleCreator() { + return true; + } + + @Override + protected XLayoutContainer getCreatorWrapper(String var1) { + return new XWScaleLayout(); + } + + @Override + public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { + CRPropertyDescriptor[] oldValues = super.supportedDescriptor(); + CRPropertyDescriptor setDescriptor = new CRPropertyDescriptor("widgetConfig", this.data.getClass()); + //setDescriptor.setI18NName(DesignKit.i18nText("Fine-Design_Form_DS_Dictionary")); + setDescriptor.setI18NName(DesignKit.i18nText("Fine-Design_Basic_Widget_Settings")); + setDescriptor.putKeyValue("category", "Fine-Design_Basic_Advanced"); + setDescriptor.setEditorClass(CustomDictionaryPropertyEditor.class); + + CRPropertyDescriptor retDescriptor = new CRPropertyDescriptor("returnDataConfig", this.data.getClass()); + retDescriptor.setI18NName(DesignKit.i18nText("Fine-Design_Basic_Widget_Date_Selector_Return_Type")); + retDescriptor.putKeyValue("category", "Fine-Design_Basic_Advanced"); + retDescriptor.setEditorClass(ReturnTypePropertyEditor.class); + + return ArrayUtils.addAll(oldValues, setDescriptor,retDescriptor); + + //return ArrayUtils.addAll(oldValues, setDescriptor); + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionaryConfig.java b/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionaryConfig.java new file mode 100644 index 0000000..ba151ea --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionaryConfig.java @@ -0,0 +1,115 @@ +package com.fr.plugin.third.party.xxxx.config; + +import com.fanruan.api.util.AssistKit; +import com.fanruan.api.util.StringKit; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLable; +import com.fr.stable.xml.XMLableReader; + +public class CustomLevelDictionaryConfig implements XMLable { + public static final String XML_TAG = "CustomLevelDictionaryConfig"; + private String valueColumnName; + private String nameColumnName; + private String title; + private int levelWidth = 150; + + public CustomLevelDictionaryConfig() { + } + + public CustomLevelDictionaryConfig(final String valueColumnName, final String nameColumnName, final String title, final int levelWidth) { + this.valueColumnName = valueColumnName; + this.nameColumnName = nameColumnName; + this.title = title; + this.levelWidth = levelWidth; + } + + public String getValueColumnName() { + if (StringKit.isEmpty(valueColumnName)) { + return ""; + } + return valueColumnName; + } + + public void setValueColumnName(String valueColumnName) { + this.valueColumnName = valueColumnName; + } + + public String getNameColumnName() { + if (StringKit.isEmpty(nameColumnName)) { + return ""; + } + return nameColumnName; + } + + public void setNameColumnName(String nameColumnName) { + this.nameColumnName = nameColumnName; + } + + public String getTitle() { + if (StringKit.isEmpty(title)) { + return ""; + } + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getLevelWidth() { + return levelWidth; + } + + public void setLevelWidth(int levelWidth) { + this.levelWidth = levelWidth; + } + + public void readXML(final XMLableReader reader) { + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if ("valueColumnName".equals(tagName)) { + this.valueColumnName = reader.getElementValue(); + } else if ("nameColumnName".equals(tagName)) { + this.nameColumnName = reader.getElementValue(); + } else if ("title".equals(tagName)) { + this.title = reader.getElementValue(); + } else if ("levelWidth".equals(tagName)) { + this.levelWidth = Integer.parseInt(reader.getElementValue()); + } + } + } + + public void writeXML(final XMLPrintWriter writer) { + if (StringKit.isNotEmpty(valueColumnName)) { + writer.startTAG("valueColumnName").textNode(valueColumnName).end(); + } + if (StringKit.isNotEmpty(nameColumnName)) { + writer.startTAG("nameColumnName").textNode(nameColumnName).end(); + } + if (StringKit.isNotEmpty(title)) { + writer.startTAG("title").textNode(title).end(); + } + writer.startTAG("levelWidth").textNode(String.valueOf(levelWidth)).end(); + + } + + @Override + public boolean equals(final Object o) { + return o instanceof CustomLevelDictionaryConfig + && AssistKit.equals(((CustomLevelDictionaryConfig) o).valueColumnName, valueColumnName) + && AssistKit.equals(((CustomLevelDictionaryConfig) o).nameColumnName, nameColumnName) + && AssistKit.equals(((CustomLevelDictionaryConfig) o).title, title) + && AssistKit.equals(((CustomLevelDictionaryConfig) o).levelWidth, levelWidth); + } + + @Override + public Object clone() throws CloneNotSupportedException { + CustomLevelDictionaryConfig cloned = (CustomLevelDictionaryConfig) super.clone(); + cloned.valueColumnName = valueColumnName; + cloned.nameColumnName = nameColumnName; + cloned.title = title; + cloned.levelWidth = levelWidth; + return cloned; + } +} + diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionarySettings.java b/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionarySettings.java new file mode 100644 index 0000000..a86d144 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/config/CustomLevelDictionarySettings.java @@ -0,0 +1,77 @@ +package com.fr.plugin.third.party.xxxx.config; + +import com.fanruan.api.xml.XmlKit; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLReadable; +import com.fr.stable.xml.XMLable; +import com.fr.stable.xml.XMLableReader; + +import java.util.ArrayList; +import java.util.List; + +public class CustomLevelDictionarySettings implements XMLable { + public static final String XML_TAG = "CustomLevelDictionarySettings"; + private List settings = new ArrayList<>(); + private String dsName; + + public String getDsName() { + return dsName; + } + + public void setDsName(String dsName) { + this.dsName = dsName; + } + + public void addConfig(CustomLevelDictionaryConfig config) { + settings.add(config); + } + + public void clearConfigs() { + settings.clear(); + } + + public void removeConfig(CustomLevelDictionaryConfig config) { + settings.remove(config); + } + + public CustomLevelDictionaryConfig[] getConfigs() { + return settings.toArray(new CustomLevelDictionaryConfig[0]); + } + + + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + reader.readXMLObject(new XMLReadable() { + @Override + public void readXML(XMLableReader xmLableReader) { + if (xmLableReader.isChildNode()) { + String tagName = xmLableReader.getTagName(); + if (CustomLevelDictionaryConfig.XML_TAG.equals(tagName)) { + CustomLevelDictionaryConfig target = (CustomLevelDictionaryConfig) XmlKit.readXMLable(xmLableReader); + settings.add(target); + } + } + } + }); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + for (CustomLevelDictionaryConfig target : settings) { + XmlKit.writeXMLable(writer, target, CustomLevelDictionaryConfig.XML_TAG); + } + } + + @Override + public Object clone() throws CloneNotSupportedException { + CustomLevelDictionarySettings cloned = (CustomLevelDictionarySettings) super.clone(); + List list = new ArrayList(); + for (CustomLevelDictionaryConfig target : settings) { + list.add((CustomLevelDictionaryConfig) target.clone()); + } + cloned.settings = list; + return cloned; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomDictionaryData.java b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomDictionaryData.java new file mode 100644 index 0000000..f844552 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomDictionaryData.java @@ -0,0 +1,68 @@ +package com.fr.plugin.third.party.xxxx.data; + +/** + * 数据字典 + */ +public class CustomDictionaryData { + + /** + * 数据集名称 + */ + private String dsName; + /** + * 实际值列名 + */ + private String value; + /** + * 显示值列名 + */ + private String name; + /** + * 父级实际值列名 + */ + private String upperValue; + /** + * 父级显示值列名 + */ + private String upperName; + + public String getDsName() { + return dsName; + } + + public void setDsName(String dsName) { + this.dsName = dsName; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUpperValue() { + return upperValue; + } + + public void setUpperValue(String upperValue) { + this.upperValue = upperValue; + } + + public String getUpperName() { + return upperName; + } + + public void setUpperName(String upperName) { + this.upperName = upperName; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnData.java b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnData.java new file mode 100644 index 0000000..eda453a --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnData.java @@ -0,0 +1,63 @@ +package com.fr.plugin.third.party.xxxx.data; + +/** + * 返回值类型 + */ +public class CustomReturnData { + /** + * 返回值类型 数组,字符串 + */ + private boolean returnArray = false; + /** + * 分割符 + */ + private String delimiter = ","; + /** + * 起始符 + */ + private String startSymbol = ""; + /** + * 结束符 + */ + private String endSymbol = ""; + + public boolean isReturnArray() { + return returnArray; + } + + public void setReturnArray(boolean option) { + this.returnArray = option; + } + + public boolean isReturnString() { + return !this.returnArray; + } + + public void setReturnString(boolean option) { + this.returnArray = !option; + } + + public String getDelimiter() { + return delimiter; + } + + public void setDelimiter(String delimiter) { + this.delimiter = delimiter; + } + + public String getStartSymbol() { + return startSymbol; + } + + public void setStartSymbol(String startSymbol) { + this.startSymbol = startSymbol; + } + + public String getEndSymbol() { + return endSymbol; + } + + public void setEndSymbol(String endSymbol) { + this.endSymbol = endSymbol; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnDataConfig.java b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnDataConfig.java new file mode 100644 index 0000000..f848b27 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomReturnDataConfig.java @@ -0,0 +1,63 @@ +package com.fr.plugin.third.party.xxxx.data; + +/** + * 返回值类型 + */ +public class CustomReturnDataConfig { + /** + * 返回值类型 数组,字符串 + */ + private boolean returnArray = false; + /** + * 分割符 + */ + private String delimiter = ","; + /** + * 起始符 + */ + private String startSymbol = ""; + /** + * 结束符 + */ + private String endSymbol = ""; + + public boolean isReturnArray() { + return returnArray; + } + + public void setReturnArray(boolean option) { + this.returnArray = option; + } + + public boolean isReturnString() { + return !this.returnArray; + } + + public void setReturnString(boolean option) { + this.returnArray = !option; + } + + public String getDelimiter() { + return delimiter; + } + + public void setDelimiter(String delimiter) { + this.delimiter = delimiter; + } + + public String getStartSymbol() { + return startSymbol; + } + + public void setStartSymbol(String startSymbol) { + this.startSymbol = startSymbol; + } + + public String getEndSymbol() { + return endSymbol; + } + + public void setEndSymbol(String endSymbol) { + this.endSymbol = endSymbol; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomWidgetConfig.java b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomWidgetConfig.java new file mode 100644 index 0000000..9703d69 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/data/CustomWidgetConfig.java @@ -0,0 +1,274 @@ +package com.fr.plugin.third.party.xxxx.data; + +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionarySettings; + +/** + * 控件设置 + */ +public class CustomWidgetConfig { + /** + * 数据字典类型索引号 + */ + private int dicTypeIndex = 0; + /** + * 数据集名称 + */ + private String dsName; + + + /** + * 数据库名称 + */ + private String dbName; + + /** + * 模式名称 + */ + private String schemaName; + /** + * 表名称 + */ + private String tableName; + + /** + * 实际值列名 + */ + private String value; + /** + * 显示值列名 + */ + private String name; + /** + * 父级实际值列名 + */ + private String upperValue; + /** + * 父级显示值列名 + */ + private String upperName; + + private int fontSize = 12; + + public int getDicTypeIndex() { + return dicTypeIndex; + } + + public void setDicTypeIndex(int dicTypeIndex) { + this.dicTypeIndex = dicTypeIndex; + } + + public String getDsName() { + return dsName; + } + + public void setDsName(String dsName) { + this.dsName = dsName; + } + + public String getDbName() { + return dbName; + } + + public void setDbName(String dbName) { + this.dbName = dbName; + } + + public String getSchemaName() { + return schemaName; + } + + public void setSchemaName(String schemaName) { + this.schemaName = schemaName; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUpperValue() { + return upperValue; + } + + public void setUpperValue(String upperValue) { + this.upperValue = upperValue; + } + + public String getUpperName() { + return upperName; + } + + public void setUpperName(String upperName) { + this.upperName = upperName; + } + + + /** + * 返回值类型 数组,字符串 + */ + private boolean returnArray = false; + /** + * 分割符 + */ + private String delimiter = ","; + /** + * 起始符 + */ + private String startSymbol = ""; + /** + * 结束符 + */ + private String endSymbol = ""; +/* + public boolean isReturnArray() { + return returnArray; + } + + public void setReturnArray(boolean option) { + this.returnArray = option; + } + + public boolean isReturnString() { + return !this.returnArray; + } + + public void setReturnString(boolean option) { + this.returnArray = !option; + } + + public String getDelimiter() { + return delimiter; + } + + public void setDelimiter(String delimiter) { + this.delimiter = delimiter; + } + + public String getStartSymbol() { + return startSymbol; + } + + public void setStartSymbol(String startSymbol) { + this.startSymbol = startSymbol; + } + + public String getEndSymbol() { + return endSymbol; + } + + public void setEndSymbol(String endSymbol) { + this.endSymbol = endSymbol; + } +*/ + + /** + * 弹出框的标题 + */ + private String windowTitle; + /** + * 筛选列标题 + */ + private String filterTitle; + /** + * 待选列表标题 + */ + private String candidateTitle; + /** + * 选中列表标题 + */ + private String selectedTitle; + /** + * 弹出框宽度 + */ + private double width; + /** + * 弹出框高度 + */ + private double height; + + public String getWindowTitle() { + return windowTitle; + } + + public void setWindowTitle(String windowTitle) { + this.windowTitle = windowTitle; + } + + public String getFilterTitle() { + return filterTitle; + } + + public void setFilterTitle(String filterTitle) { + this.filterTitle = filterTitle; + } + + public String getCandidateTitle() { + return candidateTitle; + } + + public void setCandidateTitle(String candidateTitle) { + this.candidateTitle = candidateTitle; + } + + public String getSelectedTitle() { + return selectedTitle; + } + + public void setSelectedTitle(String selectedTitle) { + this.selectedTitle = selectedTitle; + } + + public double getWidth() { + return width; + } + + public void setWidth(double width) { + this.width = width; + } + + public double getHeight() { + return height; + } + + public void setHeight(double height) { + this.height = height; + } + + public int getFontSize() { + return fontSize; + } + + public void setFontSize(int fontSize) { + this.fontSize = fontSize; + } + + + private CustomLevelDictionarySettings dicSettings; + + public CustomLevelDictionarySettings getDicSettings() { + return dicSettings; + } + + public void setDicSettings(CustomLevelDictionarySettings dicSettings) { + this.dicSettings = dicSettings; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/function/GetLevelValue.java b/src/main/java/com/fr/plugin/third/party/xxxx/function/GetLevelValue.java new file mode 100644 index 0000000..a747b06 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/function/GetLevelValue.java @@ -0,0 +1,23 @@ +package com.fr.plugin.third.party.xxxx.function; + +import com.fr.json.JSONArray; +import com.fr.script.AbstractFunction; + +public class GetLevelValue extends AbstractFunction { + public Object run(Object[] args) { + if ((args == null) || (args.length <= 1)) { + return ""; + } + String content = String.valueOf(args[0]); + int index = Integer.valueOf(String.valueOf(args[1])); + if (index <= -1) { + return ""; + } + JSONArray jsonArray = new JSONArray(content); + if ((jsonArray == null) || (jsonArray.size() <= index)) { + return ""; + } + Object object = jsonArray.get(index); + return object; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDatabaseDictPane.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDatabaseDictPane.java new file mode 100644 index 0000000..c7acbab --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDatabaseDictPane.java @@ -0,0 +1,42 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fr.base.TableData; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.present.dict.DatabaseDictPane; + +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.List; + +public class CustomDatabaseDictPane extends DatabaseDictPane { + private List listeners = new ArrayList<>(); + + public CustomDatabaseDictPane() { + if (this.getComponentCount() >= 2) { + this.getComponent(1).setVisible(false); + } + } + + public List getColumnNames() { + TableData var1 = this.chooseTable.createSelectTableData(); + List var2 = DesignTableDataManager.getColumnNamesByTableData(var1); + return var2; + } + + + public void dbChange() { + super.dbChange(); + ItemListener listener; + for (int i = 0, max = listeners.size() - 1; i <= max; i++) { + listener = listeners.get(i); + listener.itemStateChanged(null); + } + } + + public void addListener(ItemListener listener) { + if (listener == null) { + return; + } + this.listeners.add(listener); + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryEditor.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryEditor.java new file mode 100644 index 0000000..9f88353 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryEditor.java @@ -0,0 +1,65 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.mainframe.widget.accessibles.UneditableAccessibleEditor; +import com.fr.design.mainframe.widget.wrappers.DictionaryWrapper; +import com.fr.plugin.third.party.xxxx.data.CustomWidgetConfig; + +import javax.swing.*; + +public class CustomDictionaryEditor extends UneditableAccessibleEditor { + //import com.fr.design.mainframe.widget.accessibles.AccessibleDictionaryEditor; + private CustomDictionaryPane dictPane; + + public CustomDictionaryEditor() { + super(new DictionaryWrapper()); + this.dictPane = new CustomDictionaryPane(); + } + + protected void showEditorPane() { + if (this.dictPane == null) { + this.dictPane = new CustomDictionaryPane(); + } + + BasicDialog var1 = this.dictPane.showWindow(SwingUtilities.getWindowAncestor(this)); + var1.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + //CustomDictionaryData var1 = (CustomDictionaryData) CustomDictionaryEditor.this.dictPane.updateBean(); + //CustomDictionaryEditor.this.setValue(var1); + CustomDictionaryEditor.this.fireStateChanged(); + } + }); + this.dictPane.populateBean((CustomWidgetConfig) this.getValue()); + var1.setVisible(true); + } + + @Override + public Object getValue() { + //System.out.println("CustomDictionaryEditor:getValue"); + return this.dictPane.updateBean(); + } + + @Override + public void setValue(Object value) { + //System.out.println("CustomDictionaryEditor:setValue"); + if (value == null) { + return; + } + if (!(value instanceof CustomWidgetConfig)) { + return; + } + CustomWidgetConfig data = (CustomWidgetConfig) value; + this.dictPane.populateBean(data); + } + + public void populateBean(CustomWidgetConfig data) { + //System.out.println("CustomDictionaryEditor:populateBean"); + this.setValue(data); + } + + public CustomWidgetConfig updateBean() { + //System.out.println("CustomDictionaryEditor:updateBean"); + return (CustomWidgetConfig)this.getValue(); + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPane.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPane.java new file mode 100644 index 0000000..ba0446a --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPane.java @@ -0,0 +1,90 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fanruan.api.design.DesignKit; +import com.fanruan.api.design.ui.component.UILabel; +import com.fanruan.api.design.ui.component.UITitledBorder; +import com.fanruan.api.design.ui.layout.TableLayoutKit; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.data.DataCreatorUI; +import com.fr.design.widget.ui.designer.component.FontSizeComboPane; +import com.fr.design.widget.ui.designer.component.UIBoundSpinner; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionarySettings; +import com.fr.plugin.third.party.xxxx.data.CustomWidgetConfig; + +import javax.swing.*; +import java.awt.*; + +public class CustomDictionaryPane extends BasicBeanPane implements DataCreatorUI { + private CustomDictionarySettingsPane settingsPane; + + private UIBoundSpinner widthBoundSpinner = new UIBoundSpinner(0.0D, 2.147483647E9D, 1.0D, 0.0D); + private UIBoundSpinner heightBoundSpinner = new UIBoundSpinner(0.0D, 2.147483647E9D, 1.0D, 0.0D); + private FontSizeComboPane fontSizeComboPane = new FontSizeComboPane(); + + public CustomDictionaryPane() { + initLayout(); + } + + private void initLayout() { + this.setLayout(new BorderLayout(0, 4)); + double p = TableLayoutKit.PREFERRED; + double[] columnSize = new double[]{p, 400}; + double[] rowSize = new double[]{p, p}; + fontSizeComboPane.setValue(12); + Component[][] components = new Component[][]{ + //{new UILabel("宽度:"), widthBoundSpinner}, + {new UILabel("高度:"), heightBoundSpinner}, + {new UILabel("字体大小:"), fontSizeComboPane} + }; + + JPanel settingsUI1 = TableLayoutKit.createTableLayoutPane(components, rowSize, columnSize); + settingsUI1.setBorder(UITitledBorder.createBorderWithTitle(DesignKit.i18nText("FR-Plugin-Two-Way-Selection_Popup_UI"))); + + this.add(settingsUI1, "North"); + + settingsPane = new CustomDictionarySettingsPane(); + this.add(settingsPane, "Center"); + } + + + @Override + public JComponent toSwingComponent() { + return this; + } + + @Override + protected String title4PopupWindow() { + return DesignKit.i18nText("Fine-Design_Basic_Widget_Settings"); + } + + @Override + public void populateBean(CustomWidgetConfig widgetConfig) { + if (widgetConfig == null) { + return; + } + this.widthBoundSpinner.setValue(widgetConfig.getWidth()); + this.heightBoundSpinner.setValue(widgetConfig.getHeight()); + this.fontSizeComboPane.setValue(widgetConfig.getFontSize()); + + CustomLevelDictionarySettings settings = widgetConfig.getDicSettings(); + if (settings != null) { + settings.setDsName(widgetConfig.getDsName()); + this.settingsPane.populateBean(settings); + } + } + + @Override + public CustomWidgetConfig updateBean() { + CustomWidgetConfig widgetConfig = new CustomWidgetConfig(); + double width = widthBoundSpinner.getValue(); + double height = heightBoundSpinner.getValue(); + int fontSize = this.fontSizeComboPane.getValue(); + CustomLevelDictionarySettings settings = this.settingsPane.updateBean(); + widgetConfig.setDicSettings(settings); + widgetConfig.setDsName(settings.getDsName()); + widgetConfig.setWidth(width); + widgetConfig.setHeight(height); + widgetConfig.setFontSize(fontSize); + return widgetConfig; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPropertyEditor.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPropertyEditor.java new file mode 100644 index 0000000..d1fe3dd --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionaryPropertyEditor.java @@ -0,0 +1,9 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; + +public class CustomDictionaryPropertyEditor extends AccessiblePropertyEditor { + public CustomDictionaryPropertyEditor() { + super(new CustomDictionaryEditor()); + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionarySettingsPane.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionarySettingsPane.java new file mode 100644 index 0000000..3eca078 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomDictionarySettingsPane.java @@ -0,0 +1,153 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fanruan.api.design.ui.component.UIComboBox; +import com.fanruan.api.design.ui.component.UILabel; +import com.fanruan.api.design.ui.component.table.UITableEditorPane; +import com.fanruan.api.log.LogKit; +import com.fr.base.TableData; +import com.fr.data.TableDataSource; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.data.datapane.TableDataComboBox; +import com.fr.design.data.tabledata.wrapper.TableDataWrapper; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.data.DataModel; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionaryConfig; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionarySettings; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.List; + +import com.fr.script.Calculator; + +public class CustomDictionarySettingsPane extends BasicBeanPane { + private TableDataComboBox tableDataComboBox; + private UITableEditorPane tableEditorPane; + private CustomLevelDictionaryConfigTableModel model = new CustomLevelDictionaryConfigTableModel(); + + public CustomDictionarySettingsPane() { + setLayout(new BorderLayout()); + this.tableEditorPane = new UITableEditorPane<>(model); + this.add(tableEditorPane, BorderLayout.CENTER); + + this.tableDataComboBox = new TableDataComboBox(this.getTableDataSource()); + this.tableDataComboBox.addItemListener(this.tableDataComboBoxListener); + + Dimension dimension = this.tableDataComboBox.getPreferredSize(); + Dimension newDimension = new Dimension(); + newDimension.setSize(dimension.getWidth() + 40, dimension.getHeight()); + this.tableDataComboBox.setPreferredSize(newDimension); + this.add(GUICoreUtils.createFlowPane(new Component[]{new UILabel("数据集名称:"), this.tableDataComboBox}, 0, 12), BorderLayout.NORTH); + } + + @Override + public void populateBean(CustomLevelDictionarySettings settings) { + model.clear(); + if (settings != null) { + this.tableDataComboBox.setSelectedTableDataByName(settings.getDsName()); + this.tableEditorPane.populate(settings.getConfigs()); + } + setColumnNames(); + } + + @Override + public CustomLevelDictionarySettings updateBean() { + CustomLevelDictionarySettings settings = new CustomLevelDictionarySettings(); + List configs = tableEditorPane.update(); + for (CustomLevelDictionaryConfig config : configs) { + settings.addConfig(config); + } + TableDataWrapper tableDataWrapper = this.tableDataComboBox.getSelectedItem(); + String dsName = ""; + if (tableDataWrapper != null) { + dsName = tableDataWrapper.getTableDataName(); + settings.setDsName(dsName); + } + return settings; + } + + private void setColumnNames() { + List values = getTableDataColumnNames(); + setColumnValues(values, 0); + setColumnValues(values, 1); + } + + private void setColumnValues(List values, int columnIndex) { + JTable table = model.createTable(); + //int rowCount = table.getRowCount(); + // if (rowCount <= 0) { + // return; + // } + + Component comp; + UIComboBox comboBox; + DefaultComboBoxModel comboBoxModel; + + comp = table.getCellEditor(0, columnIndex).getTableCellEditorComponent(null, null, false, 0, columnIndex); + if (!(comp instanceof UIComboBox)) { + return; + } + comboBox = (UIComboBox) comp; + comboBoxModel = (DefaultComboBoxModel) comboBox.getModel(); + comboBoxModel.removeAllElements(); + comboBoxModel.addElement(""); + + if ((values == null) || (values.isEmpty())) { + return; + } + for (int i = 0, max = values.size() - 1; i <= max; i++) { + comboBoxModel.addElement(values.get(i)); + } + } + + private ItemListener tableDataComboBoxListener = new ItemListener() { + public void itemStateChanged(ItemEvent var1) { + setColumnNames(); + } + }; + + protected TableDataSource getTableDataSource() { + return DesignTableDataManager.getEditingTableDataSource(); + } + + private List getTableDataColumnNames() { + TableDataWrapper tdw = this.tableDataComboBox.getSelectedItem(); + if (tdw == null) { + return new ArrayList(); + } + //List var1 = tdw.calculateColumnNameList(); + List var1 = createTableDataColNames(tdw.getTableData()); + if (var1 != null) { + return var1; + } + return new ArrayList(); + } + + private List createTableDataColNames(TableData tableData) { + List names = new ArrayList<>(); + if (tableData == null) { + return names; + } + try { + DataModel dataModel = tableData.createDataModel(Calculator.createCalculator()); + int count = dataModel.getColumnCount(); + for (int i = 0; i < count; i++) { + names.add(dataModel.getColumnName(i)); + } + dataModel.release(); + } catch (Exception e) { + LogKit.error(e.getMessage(), e); + } + return names; + } + + + @Override + protected String title4PopupWindow() { + return "Path"; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomLevelDictionaryConfigTableModel.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomLevelDictionaryConfigTableModel.java new file mode 100644 index 0000000..0d7f46d --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/CustomLevelDictionaryConfigTableModel.java @@ -0,0 +1,274 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fanruan.api.design.ui.component.UIComboBox; +import com.fanruan.api.design.ui.component.UINumberField; +import com.fanruan.api.design.ui.component.UITextField; +import com.fanruan.api.design.ui.component.table.action.UITableEditAction; +import com.fanruan.api.design.ui.component.table.model.UITableModelAdapter; +import com.fanruan.api.util.GeneralKit; +import com.fr.base.BaseUtils; +import com.fr.plugin.third.party.xxxx.config.CustomLevelDictionaryConfig; + +import javax.swing.*; +import javax.swing.event.CellEditorListener; +import javax.swing.event.ChangeEvent; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import java.awt.*; +import java.awt.event.ActionEvent; + +public class CustomLevelDictionaryConfigTableModel extends UITableModelAdapter { + public CustomLevelDictionaryConfigTableModel() { + super(new String[]{"实际值列名", "显示值列名", "标题", "宽度"}); + + this.setColumnClass(new Class[]{ValueColumnEditor.class, NameColumnEditor.class, TitleEditor.class,LevelWidthEditor.class}); + this.setDefaultEditor(ValueColumnEditor.class, new ValueColumnEditor()); + this.setDefaultRenderer(ValueColumnEditor.class, new SimpleRenderer()); + + this.setDefaultEditor(NameColumnEditor.class, new NameColumnEditor()); + this.setDefaultRenderer(NameColumnEditor.class, new SimpleRenderer()); + + this.setDefaultEditor(TitleEditor.class, new TitleEditor()); + this.setDefaultRenderer(TitleEditor.class, new SimpleRenderer()); + + this.setDefaultEditor(LevelWidthEditor.class, new LevelWidthEditor()); + this.setDefaultRenderer(LevelWidthEditor.class, new SimpleRenderer()); + } + + @Override + public Object getValueAt(final int row, final int column) { + final CustomLevelDictionaryConfig config = this.getList().get(row); + switch (column) { + case 0: { + return config.getValueColumnName(); + } + case 1: { + return config.getNameColumnName(); + } + case 2: { + return config.getTitle(); + } + case 3: { + return config.getLevelWidth(); + } + default: { + return null; + } + } + } + + @Override + public boolean isCellEditable(final int row, final int column) { + return true; + } + + @Override + public UITableEditAction[] createAction() { + return new UITableEditAction[]{ + new AddPathAction(), + new DeleteAction() + }; + } + + private void addPath() { + this.addRow(new CustomLevelDictionaryConfig()); + this.fireTableDataChanged(); + this.table.getSelectionModel().setSelectionInterval(this.table.getRowCount() - 1, this.table.getRowCount() - 1); + } + + private void deletePath() { + if (this.getRowCount() <= 0) { + return; + } + + int[] selectedRows = this.table.getSelectedRows(); + if ((selectedRows != null) && (selectedRows.length >= 1)) { + for (int i = 0, max = selectedRows.length - 1; i <= max; i++) { + this.removeRow(selectedRows[i]); + } + } else { + int selectedRowIndex = this.table.getRowCount() - 1; + if (selectedRowIndex >= 0) { + this.removeRow(selectedRowIndex); + } + } + + this.fireTableDataChanged(); + this.table.getSelectionModel().setSelectionInterval(this.table.getRowCount() - 1, this.table.getRowCount() - 1); + } + + + private class ValueColumnEditor extends AbstractCellEditor implements TableCellEditor { + private static final long serialVersionUID = 1L; + private UIComboBox valuesComboBox; + + public ValueColumnEditor() { + valuesComboBox = new UIComboBox(); + this.addCellEditorListener(new CellEditorListener() { + @Override + public void editingCanceled(final ChangeEvent changeEvent) { + } + + @Override + public void editingStopped(final ChangeEvent changeEvent) { + if (table.getSelectedRow() == -1) { + return; + } + CustomLevelDictionaryConfig config = getList().get(table.getSelectedRow()); + config.setValueColumnName(GeneralKit.objectToString(getCellEditorValue())); + fireTableDataChanged(); + } + }); + } + + @Override + public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) { + valuesComboBox.setSelectedItem(value); + return this.valuesComboBox; + } + + @Override + public Object getCellEditorValue() { + return this.valuesComboBox.getSelectedItem(); + } + } + + private class NameColumnEditor extends AbstractCellEditor implements TableCellEditor { + private static final long serialVersionUID = 1L; + private UIComboBox namesComboBox; + + public NameColumnEditor() { + namesComboBox = new UIComboBox(); + this.addCellEditorListener(new CellEditorListener() { + @Override + public void editingCanceled(final ChangeEvent changeEvent) { + } + + @Override + public void editingStopped(final ChangeEvent changeEvent) { + if (table.getSelectedRow() == -1) { + return; + } + CustomLevelDictionaryConfig config = getList().get(table.getSelectedRow()); + config.setNameColumnName(GeneralKit.objectToString(getCellEditorValue())); + fireTableDataChanged(); + } + }); + } + + @Override + public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) { + namesComboBox.setSelectedItem(value); + return this.namesComboBox; + } + + @Override + public Object getCellEditorValue() { + return this.namesComboBox.getSelectedItem(); + } + } + + private class TitleEditor extends AbstractCellEditor implements TableCellEditor { + private static final long serialVersionUID = 1L; + private UITextField titleTextField; + + public TitleEditor() { + titleTextField = new UITextField(); + this.addCellEditorListener(new CellEditorListener() { + @Override + public void editingCanceled(final ChangeEvent changeEvent) { + } + + @Override + public void editingStopped(final ChangeEvent changeEvent) { + if (table.getSelectedRow() == -1) { + return; + } + CustomLevelDictionaryConfig config = getList().get(table.getSelectedRow()); + config.setTitle(GeneralKit.objectToString(getCellEditorValue())); + fireTableDataChanged(); + } + }); + } + + @Override + public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) { + titleTextField.setText(GeneralKit.objectToString(value)); + return this.titleTextField; + } + + @Override + public Object getCellEditorValue() { + return this.titleTextField.getText(); + } + } + + private class LevelWidthEditor extends AbstractCellEditor implements TableCellEditor { + private static final long serialVersionUID = 1L; + private UINumberField levelWidthTextField; + + public LevelWidthEditor() { + levelWidthTextField = new UINumberField(); + this.addCellEditorListener(new CellEditorListener() { + @Override + public void editingCanceled(final ChangeEvent changeEvent) { + } + + @Override + public void editingStopped(final ChangeEvent changeEvent) { + if (table.getSelectedRow() == -1) { + return; + } + CustomLevelDictionaryConfig config = getList().get(table.getSelectedRow()); + Object value = getCellEditorValue(); + Double valueDouble = Double.valueOf(String.valueOf(value)); + Integer width = valueDouble.intValue(); + config.setLevelWidth(width); + fireTableDataChanged(); + } + }); + } + + @Override + public Component getTableCellEditorComponent(final JTable table, final Object value, final boolean isSelected, final int row, final int column) { + levelWidthTextField.setValue(Double.valueOf(String.valueOf(value))); + return this.levelWidthTextField; + } + + @Override + public Object getCellEditorValue() { + return this.levelWidthTextField.getValue(); + } + } + + private class SimpleRenderer extends DefaultTableCellRenderer { + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + this.setText(GeneralKit.objectToString(value)); + return this; + } + } + + private class AddPathAction extends AddTableRowAction { + public AddPathAction() { + super(); + } + + public void actionPerformed(final ActionEvent actionEvent) { + super.actionPerformed(actionEvent); + CustomLevelDictionaryConfigTableModel.this.addPath(); + } + } + + private class DeleteAction extends UITableEditAction { + public DeleteAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Delete")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/base/images/cell/control/remove.png")); + } + + public void actionPerformed(ActionEvent actionEvent) { + CustomLevelDictionaryConfigTableModel.this.deletePath(); + } + } +} + + diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePane.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePane.java new file mode 100644 index 0000000..3314ccd --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePane.java @@ -0,0 +1,85 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fr.design.gui.ibutton.UIButtonGroup; +import com.fr.design.gui.icombobox.DictionaryComboBox; +import com.fr.design.gui.icombobox.DictionaryConstants; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.plugin.third.party.xxxx.data.CustomReturnDataConfig; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class ReturnTypePane extends JPanel { + private DictionaryComboBox delimiterComboBox; + private UIButtonGroup returnTypeComboBox; + private DictionaryComboBox startComboBox; + private DictionaryComboBox endComboBox; + private JPanel returnStringPane; + private ActionListener doChangeListener; + + public ReturnTypePane() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + this.delimiterComboBox = new DictionaryComboBox(DictionaryConstants.delimiters, DictionaryConstants.delimiterDisplays); + this.delimiterComboBox.setEditable(true); + this.startComboBox = new DictionaryComboBox(DictionaryConstants.symbols, DictionaryConstants.symbolDisplays); + this.startComboBox.setEditable(true); + this.endComboBox = new DictionaryComboBox(DictionaryConstants.symbols, DictionaryConstants.symbolDisplays); + this.endComboBox.setEditable(true); + doChangeListener = new ActionListener() { + public void actionPerformed(ActionEvent var1) { + ReturnTypePane.this.doChange(); + } + }; + this.delimiterComboBox.addActionListener(doChangeListener); + this.startComboBox.addActionListener(doChangeListener); + this.endComboBox.addActionListener(doChangeListener); + + + Component[][] var1 = new Component[][]{{new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Delimiter")), this.delimiterComboBox}, {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Combo_CheckBox_Start_Symbol")), this.startComboBox}, {new UILabel(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Combo_CheckBox_End_Symbol")), this.endComboBox}}; + this.returnStringPane = TableLayoutHelper.createGapTableLayoutPane(var1, 1, 37.0D, 10.0D); + this.returnTypeComboBox = new UIButtonGroup(new String[]{com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Widget_Array"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_String")}); + this.returnTypeComboBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent var1) { + ReturnTypePane.this.checkVisible(ReturnTypePane.this.returnTypeComboBox.getSelectedIndex()); + } + }); + this.returnTypeComboBox.addActionListener(doChangeListener); + + JPanel var2 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{{ this.returnTypeComboBox}}, 1, 13.0D, 10.0D); + JPanel var3 = FRGUIPaneFactory.createBorderLayout_S_Pane(); + var3.add(var2, "North"); + var3.add(this.returnStringPane, "Center"); + this.returnStringPane.setBorder(BorderFactory.createEmptyBorder(10, 12, 0, 0)); + this.add(var3); + } + + public void checkVisible(int var1) { + this.returnStringPane.setVisible(var1 == 1); + } + + public void populate(CustomReturnDataConfig var1) { + this.delimiterComboBox.setSelectedItem(var1.getDelimiter()); + this.returnTypeComboBox.setSelectedIndex(var1.isReturnString() ? 1 : 0); + this.startComboBox.setSelectedItem(var1.getStartSymbol()); + this.endComboBox.setSelectedItem(var1.getEndSymbol()); + this.checkVisible(this.returnTypeComboBox.getSelectedIndex()); + } + + public CustomReturnDataConfig update() { + CustomReturnDataConfig var1 = new CustomReturnDataConfig(); + var1.setDelimiter((String)this.delimiterComboBox.getSelectedItem()); + var1.setReturnString(this.returnTypeComboBox.getSelectedIndex() != 0); + var1.setStartSymbol((String)this.startComboBox.getSelectedItem()); + var1.setEndSymbol((String)this.endComboBox.getSelectedItem()); + return var1; + } + + public void doChange() + { + + } +} \ No newline at end of file diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePropertyEditor.java b/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePropertyEditor.java new file mode 100644 index 0000000..1dd93b5 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/ui/ReturnTypePropertyEditor.java @@ -0,0 +1,54 @@ +package com.fr.plugin.third.party.xxxx.ui; + +import com.fr.design.Exception.ValidationException; +import com.fr.design.mainframe.widget.editors.AbstractPropertyEditor; +import com.fr.plugin.third.party.xxxx.data.CustomReturnDataConfig; + +import java.awt.*; + +public class ReturnTypePropertyEditor extends AbstractPropertyEditor { + private ReturnTypePane returnTypePane ; + + public ReturnTypePropertyEditor() { + returnTypePane = new ReturnTypePane(){ + @Override + public void doChange() { + //System.out.println("ReturnTypePropertyEditor.doChange"); + //需要调用这个方法,否则修改属性不保存 + ReturnTypePropertyEditor.this.firePropertyChanged(); + } + }; + CustomReturnDataConfig config = new CustomReturnDataConfig(); + config.setReturnString(false); + this.returnTypePane.populate(config); + + } + + @Override + public void setValue(Object value) { + //System.out.println("ReturnTypePropertyEditor:setValue"); + if (value == null) { + return; + } + if (!(value instanceof CustomReturnDataConfig)) { + return; + } + CustomReturnDataConfig data = (CustomReturnDataConfig) value; + this.returnTypePane.populate(data); + } + + @Override + public Object getValue() { + //System.out.println("ReturnTypePropertyEditor:getValue"); + CustomReturnDataConfig data = this.returnTypePane.update(); + return data; + } + + public Component getCustomEditor() { + return this.returnTypePane; + } + + public void validateValue() throws ValidationException { + } +} + diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/web/CssFileLoader.java b/src/main/java/com/fr/plugin/third/party/xxxx/web/CssFileLoader.java new file mode 100644 index 0000000..4055430 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/web/CssFileLoader.java @@ -0,0 +1,10 @@ +package com.fr.plugin.third.party.xxxx.web; + +import com.fr.stable.fun.impl.AbstractCssFileHandler; + +public class CssFileLoader extends AbstractCssFileHandler { + @Override + public String[] pathsForFiles() { + return new String[]{"/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.css"}; + } +} diff --git a/src/main/java/com/fr/plugin/third/party/xxxx/web/JavaScriptFileLoader.java b/src/main/java/com/fr/plugin/third/party/xxxx/web/JavaScriptFileLoader.java new file mode 100644 index 0000000..cf228f7 --- /dev/null +++ b/src/main/java/com/fr/plugin/third/party/xxxx/web/JavaScriptFileLoader.java @@ -0,0 +1,10 @@ +package com.fr.plugin.third.party.xxxx.web; + +import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; + +public class JavaScriptFileLoader extends AbstractJavaScriptFileHandler { + @Override + public String[] pathsForFiles() { + return new String[]{"/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.js"}; + } +} diff --git a/src/main/resources/com/fr/plugin/third/party/xxxx/images/arrows_icons.png b/src/main/resources/com/fr/plugin/third/party/xxxx/images/arrows_icons.png new file mode 100644 index 0000000..616f0bd Binary files /dev/null and b/src/main/resources/com/fr/plugin/third/party/xxxx/images/arrows_icons.png differ diff --git a/src/main/resources/com/fr/plugin/third/party/xxxx/images/search_24.png b/src/main/resources/com/fr/plugin/third/party/xxxx/images/search_24.png new file mode 100644 index 0000000..bc06a34 Binary files /dev/null and b/src/main/resources/com/fr/plugin/third/party/xxxx/images/search_24.png differ diff --git a/src/main/resources/com/fr/plugin/third/party/xxxx/images/selection_16.png b/src/main/resources/com/fr/plugin/third/party/xxxx/images/selection_16.png new file mode 100644 index 0000000..fb6f821 Binary files /dev/null and b/src/main/resources/com/fr/plugin/third/party/xxxx/images/selection_16.png differ diff --git a/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.css b/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.css new file mode 100644 index 0000000..318e70b --- /dev/null +++ b/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.css @@ -0,0 +1,18 @@ +.two-way-selection-widget-selected { + background-color: #1dd6c1; +} + +.huawei-honor-multilevel-selection-widget-btn { + width: 50px; + height: 20px; + background: #47a8ea; + line-height: 9px; + border-width: 0px; + border-radius: 3px; + cursor: pointer; + outline: none; + color: white; + float: right; + margin-left: 10px ; + font-size: 12px; +} \ No newline at end of file diff --git a/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.js b/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.js new file mode 100644 index 0000000..8d54cc0 --- /dev/null +++ b/src/main/resources/com/fr/plugin/third/party/xxxx/web/MultilevelSelectionWidget.js @@ -0,0 +1,416 @@ +; +(function ($) { + FR.HonorMultilevelSelectionWidget = FR.extend(FR.Widget, { + _defaultConfig: function () { + return $.extend(FR.HonorMultilevelSelectionWidget.superclass._defaultConfig.apply(), {}); + }, + _init: function () { + debugger; + FR.HonorMultilevelSelectionWidget.superclass._init.apply(this, arguments); + var o = this.options; + var element = this.element; + var widget = element[0]; + + var widgetWidth = this.options.width; + var widgetHeight = this.options.height; + var fontSize = this.options.widgetConfig_fontSize; + var optionsType = this.options.type; + var inputDivWidth = widgetWidth - 24; + if (inputDivWidth <= 0) { + inputDivWidth = 0; + } + + var inputDivHeight = widgetHeight - 4; + if (inputDivHeight <= 0) { + inputDivHeight = 0; + } + + var divWidth = widgetWidth - 20; + if (divWidth <= 0) { + divWidth = 0; + } + + if (fontSize <= 0) { + fontSize = 12; + } + + var iconUrl = FR.servletURL + "?op=resource&resource=/com/fr/plugin/third/party/xxxx/images/selection_16.png"; + + var inputValueElementId = this.options.widgetName + '-input-value'; + var widgetContent = '
\n' + + '
\n' + + '\n' + + '
\n' + + '
\n' + + ' \n' + + '
\n' + + '
'; + var $widget = $(widgetContent); + var widgetId = $widget.appendTo(element); + + var inputElement = $widget.find("input").first(); + var popupButtonElement = $widget.find("button").first(); + //inputElement.val("Hello World"); + // var showEditorEvent = this.showEditor(); + this.options.widget_value_input_element = inputElement; + + var popupWidth = this.options.widgetConfig_width; + var popupHeight = this.options.widgetConfig_height; + //默认值 + if (popupWidth <= 0) { + popupWidth = 480; + } + if (popupHeight <= 0) { + popupHeight = 400; + } + + //最小值 + if (popupWidth <= 300) { + popupWidth = 300; + } + if (popupHeight <= 200) { + popupHeight = 200; + } + + var leftValue = ($(window).width() - popupWidth) / 2; + var topValue = ($(window).height() - popupHeight) / 4; + leftValue = leftValue.toFixed(2); + topValue = topValue.toFixed(2); + if (leftValue <= 0) { + leftValue = 0; + } + if (topValue <= 0) { + topValue = 0; + } + + var tableDivHeight = popupHeight - 55; + if (tableDivHeight <= 0) { + tableDivHeight = 0; + } + var tableContentHeight = tableDivHeight - 20; + if (tableContentHeight <= 0) { + tableContentHeight = 0; + } + + var iconWidth = 20; + if (popupWidth <= iconWidth) { + iconWidth = 0; + } + var divContentWidth = (popupWidth - iconWidth) / 3; + divContentWidth = divContentWidth.toFixed(2) - 5; + if (divContentWidth <= 0) { + divContentWidth = 0; + } + + var dataDivContentWidth = divContentWidth.toFixed(0) - 2; + + popupHeight = popupHeight + 10; + debugger; + var _tempGetTableElementContent = this._getHonorMultilevelSelectionContent(); + + var dataDivId = this.options.widgetName + '-div-widget-content-data'; + + var arrowsImgUrl = FR.fineServletURL + "/resources?path=/com/fr/plugin/third/party/xxxx/images/arrows_icons.png"; + var alertBoxId = this.options.widgetName + '-popup-window-content'; + var alertBox = $(''); + $('body').append(alertBox); + + var dataUrl = FR.servletURL + "?op=widget&widgetname=" + this.options.widgetName; + var levelCount = this.options.widgetConfig_levelCount; + popupButtonElement.click(function () { + var dataDivElement = alertBox.find("div#" + dataDivId); + dataDivElement.empty(); + if (levelCount <= 0) { + alert("没有层级"); + return; + } + dataDivElement.append(_tempGetTableElementContent); + alertBox.css("display", "block"); + $("body").css("overflow", "auto"); + }); + + var queryClass = this.options.widgetName + '-content-element-data-button-query'; + var dataElementId = this.options.widgetName + '-content-element-data-values-index'; + + var valueElementId = this.options.widgetName + '-value-index'; + var valueCheckboxElementId = this.options.widgetName + '-value-checkbox-index'; + var queryInputElementId = this.options.widgetName + '-content-element-data-input-query-text-index'; + var selectAllElementId = this.options.widgetName + '-content-element-data-checkbox-select-all-index'; + $("body").on("click", '.' + queryClass, function () { + debugger; + var temp = this; + var tempLevelIndex = $(this).attr("level-index"); + console.log(tempLevelIndex); + var tempDataElementId = '#' + dataElementId + tempLevelIndex; + var tempDataElement = $(tempDataElementId); + tempDataElement.empty(); + var frSessionID = FR.SessionMgr.getSessionID(); + var tempUpperValues = getUpperValues(tempLevelIndex); + var tempValueInputElementId = '#' + queryInputElementId + tempLevelIndex; + var tempCurrentValue = $(tempValueInputElementId).val(); + $.ajax({ + url: dataUrl, + //contentType: "application/json", + type: "post", + dataType: 'json', + data: { + dataType: "VALUE", + currentValue: tempCurrentValue, + upperValue: tempUpperValues, + levelIndex: tempLevelIndex + }, + headers: {'sessionID': frSessionID}, + //async: false, + success: function (dataJson) { + console.log(dataJson); + if ((dataJson == null) || (dataJson == undefined) || (dataJson.length <= 0)) { + return; + } + var valueJson, valueContent = ''; + for (var i = 0, max = dataJson.length - 1; i <= max; i++) { + valueJson = dataJson[i]; + valueContent = valueContent + ''; + } + tempDataElement.append(valueContent); + } + }); + }); + + var selectAllClass = this.options.widgetName + '-content-element-data-checkbox-select-all'; + $("body").on("click", '.' + selectAllClass, function () { + var tempLevelIndex = $(this).attr("level-index"); + var tempEleId = '.' + valueCheckboxElementId + tempLevelIndex; + if ($(this).is(':checked')) { + $(tempEleId).prop('checked', true); + return; + } + $(tempEleId).prop('checked', false); + }); + + var restClass = this.options.widgetName + '-content-element-data-button-reset'; + $("body").on("click", '.' + restClass, function () { + var tempLevelIndex = $(this).attr("level-index"); + var tempDataElementId = '#' + dataElementId + tempLevelIndex; + var tempDataElement = $(tempDataElementId); + tempDataElement.empty(); + + var tempEleId = '#' + selectAllElementId + tempLevelIndex; + $(tempEleId).prop('checked', false); + + tempEleId = '#' + queryInputElementId + tempLevelIndex; + $(tempEleId).val(""); + }); + + + var okButtonElementId = "button#" + this.options.widgetName + '-popup-window-content-button-ok'; + var cancelButtonElementId = "button#" + this.options.widgetName + '-popup-window-content-button-cancel'; + $("body").on("click", cancelButtonElementId, function () { + $('#' + alertBoxId).css("display", "none"); + $("body").css("overflow", "hidden"); + }); + + var tempOptions = this.options; + $("body").on("click", okButtonElementId, function () { + $('#' + alertBoxId).css("display", "none"); + $("body").css("overflow", "hidden"); + var parameterValues = ""; + if (levelCount <= 0) { + inputElement.val(parameterValues); + return; + } + var tempValue = _getHonorLevelValuesContent(tempOptions); + parameterValues = JSON.stringify(tempValue); + inputElement.val(parameterValues); + }); + + function getUpperValues(index) { + var tempLevelIndex = parseInt(index); + if (tempLevelIndex <= 0) { + return ""; + } + var tempLevelIndex = tempLevelIndex - 1; + var tempEleId = 'input[type=checkbox]:checked.' + valueCheckboxElementId + tempLevelIndex; + var tempEles = $(tempEleId); + if (tempEles.length <= 0) { + return ""; + } + + var tempEle, tempValue, content = ""; + for (var i = 0, max = tempEles.length - 1; i <= max; i++) { + tempEle = tempEles[i]; + tempValue = $(tempEle).val(); + if (i >= 1) { + content = content + ","; + } + content = content + tempValue; + } + return content; + } + + function _getHonorLevelValuesContent(options) { + if (levelCount <= 0) { + return ""; + } + var values = [], tempValue; + if (levelCount == 0) { + tempValue = _getHonorLevelValues(0, options); + return tempValue; + } + + for (var i = 0, max = levelCount - 1; i <= max; i++) { + tempValue = _getHonorLevelValues(i, options); + values.push(tempValue); + } + return values; + } + + function _getHonorLevelValues(levelIndex, options) { + if ((options == undefined) || (options == null)) { + return ""; + } + + var tempEleId = 'input[type=checkbox]:checked.' + valueCheckboxElementId + levelIndex; + var tempEles = $(tempEleId); + if (tempEles.length <= 0) { + return ""; + } + + var tempEle, tempValue, content = ""; + var parameterValueArray = []; + for (var i = 0, max = tempEles.length - 1; i <= max; i++) { + tempEle = tempEles[i]; + tempValue = $(tempEle).val(); + if (options.widgetConfig_returnArray) { + parameterValueArray.push(tempValue); + } else { + content = content + tempValue; + } + if ((i < max) && (!options.widgetConfig_returnArray)) { + content = content + options.widgetConfig_delimiter; + } + } + if (options.widgetConfig_returnArray) { + return parameterValueArray; + } + content = options.widgetConfig_startSymbol + content + options.widgetConfig_endSymbol; + return content; + } + }, + getValue: function () { +//__parameters__: {"TWOWAYSELECTIONWIDGET0":"1256","COMBOCHECKBOX0":[5b]"b","c"[5d],"NEWCOMBOBOXTREEEDITOR0":[5b][5d],"COMBOCHECKBOX0_C":"a,b"} + var inputValue = this.options.widget_value_input_element.val(); + if (!(inputValue)) { + return ""; + } + if (inputValue.length <= 0) { + return ""; + } + var parameterValue = inputValue; + return parameterValue; + }, + setValue: function (value) { + this.options.widget_value_input_element.val(value); + }, + _getHonorMultilevelSelectionContent: function () { + console.log(this.options); + if (this.options.widgetConfig_levelCount <= 0) { + return ""; + } + var fontSize = this.options.widgetConfig_fontSize; + if (fontSize <= 0) { + fontSize = 12; + } + + var tableElementContent = '\n' + + ' \n' + + ' \n' + + this._getHonorMultilevelSelectionContentTitles() + + ' \n' + + ' \n' + + this._getHonorMultilevelSelectionContentQuery() + + ' \n' + + ' \n' + + this._getHonorMultilevelSelectionContentValues() + + ' \n' + + ' \n' + + this._getHonorMultilevelSelectionContentOpt() + + ' \n' + + ' \n' + + '
'; + return tableElementContent; + }, + _getHonorMultilevelSelectionContentTitles: function () { + if (this.options.widgetConfig_levelCount <= 0) { + return ""; + } + var max = this.options.widgetConfig_levelCount - 1; + var content = "", config; + for (var i = 0; i <= max; i++) { + config = this.options.widgetConfig_levelSettings[i]; + content = content + '' + config.title + '\n'; + } + return content; + }, + _getHonorMultilevelSelectionContentOpt: function () { + if (this.options.widgetConfig_levelCount <= 0) { + return ""; + } + var max = this.options.widgetConfig_levelCount - 1; + var content = "", config; + for (var i = 0; i <= max; i++) { + config = this.options.widgetConfig_levelSettings[i]; + content = content + '\n' + + '
' + + '全选' + + '' + + '
' + + '\n'; + } + return content; + }, + _getHonorMultilevelSelectionContentQuery: function () { + if (this.options.widgetConfig_levelCount <= 0) { + return ""; + } + var max = this.options.widgetConfig_levelCount - 1; + var content = "", config; + var inputWidth = 0; + for (var i = 0; i <= max; i++) { + config = this.options.widgetConfig_levelSettings[i]; + inputWidth = config.levelWidth - 60; + content = content + '\n' + + '
' + + '' + + '' + + '
' + + '\n'; + } + return content; + }, + _getHonorMultilevelSelectionContentValues: function () { + if (this.options.widgetConfig_levelCount <= 0) { + return ""; + } + var max = this.options.widgetConfig_levelCount - 1; + var content = "", config; + for (var i = 0; i <= max; i++) { + config = this.options.widgetConfig_levelSettings[i]; + content = content + '\n' + + '
\n' + + '\n'; + } + return content; + } + }); + + /*只能小写*/ + $.shortcut("honormultilevelselectionwidget", FR.HonorMultilevelSelectionWidget); +})(jQuery);