Browse Source

Merging in latest from upstream (DESIGN/design:refs/heads/release/10.0)

* commit 'd3988b4ff3e0445a88b49582588f576fa21fff62':
  REPORT-70011 国际化适配
  REPORT-70092 重定向报错,帮助文档跳转异常
  REPORT-69229 设计器偶发启动不了
  REPORT-69163 新安装的kr设计器 无法使用frm
  REPORT-68443 聚合报表报表块单元格也可以进行权限编辑
  REPORT-69009 mac新系统下getSelectedFiles方法返回为空
  updated
  REPORT-68607 数据连接全量保存改为增量保存
  REPORT-68161 填报-模板web属性-切换设置时,编辑行背景设置的点击逻辑确认
  REPORT-68161 填报-模板web属性-切换设置时,编辑行背景设置的点击逻辑确认
  REPORT-48999 填报-填报属性设置-填报属性快捷设置远程设计修改无效
security/10.0
Link.Zhao 2 years ago
parent
commit
3eadc4016c
  1. 53
      designer-base/src/main/java/com/fr/design/data/MapCompareUtils.java
  2. 37
      designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java
  3. 6
      designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java
  4. 7
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
  5. 2
      designer-base/src/main/java/com/fr/env/HelpLink.java
  6. 57
      designer-base/src/test/java/com/fr/design/data/MapCompareUtilsTest.java
  7. 7
      designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java
  8. 77
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java
  9. 1
      designer-realize/src/main/java/com/fr/design/webattr/WriteToolBarPane.java
  10. 2
      designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java
  11. 2
      designer-realize/src/main/java/com/fr/poly/creator/ECBlockPane.java

53
designer-base/src/main/java/com/fr/design/data/MapCompareUtils.java

@ -0,0 +1,53 @@
package com.fr.design.data;
import org.jetbrains.annotations.NotNull;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author rinoux
* @version 10.0
* Created by rinoux on 2022/3/28
*/
public final class MapCompareUtils {
/**
* 对比两个map 查找出相比origother中有哪些是新增的删除的或者被修改的并分别进行处理
*
* @param orig 原始map
* @param other 参考的新map
* @param eventHandler 有区别时的事件处理器
* @param <K> K
* @param <V> V
*/
public static <K, V> void contrastMapEntries(@NotNull Map<K, V> orig, @NotNull Map<K, V> other, @NotNull EventHandler<K, V> eventHandler) {
Map<K, V> copiedOrig = new LinkedHashMap<>(orig);
other.forEach((k, v) -> {
V existedV = copiedOrig.remove(k);
if (existedV != null) {
if (!v.equals(existedV)) {
eventHandler.on(EntryEventKind.UPDATED, k, v);
}
} else {
eventHandler.on(EntryEventKind.ADDED, k, v);
}
});
copiedOrig.forEach((k, v) -> eventHandler.on(EntryEventKind.REMOVED, k, v));
}
public interface EventHandler<K, V> {
void on(EntryEventKind entryEventKind, K k, V v);
}
public enum EntryEventKind {
ADDED,
REMOVED,
UPDATED;
}
}

37
designer-base/src/main/java/com/fr/design/data/datapane/connect/ConnectionListPane.java

@ -4,6 +4,7 @@ import com.fr.data.impl.Connection;
import com.fr.data.impl.JDBCDatabaseConnection;
import com.fr.data.impl.JNDIDatabaseConnection;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.data.MapCompareUtils;
import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.fun.ConnectionProvider;
import com.fr.design.gui.controlpane.JListControlPane;
@ -14,6 +15,7 @@ import com.fr.design.i18n.Toolkit;
import com.fr.file.ConnectionConfig;
import com.fr.general.ComparatorUtils;
import com.fr.general.NameObject;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Nameable;
import com.fr.stable.StringUtils;
@ -23,6 +25,7 @@ import javax.swing.SwingUtilities;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@ -34,7 +37,8 @@ import java.util.UUID;
public class ConnectionListPane extends JListControlPane implements ConnectionShowPane {
public static final String TITLE_NAME = Toolkit.i18nText("Fine-Design_Basic_Server_Define_Data_Connection");
private boolean isNamePermitted = true;
private HashMap<String, String> renameMap = new HashMap<String, String>();
private final HashMap<String, String> renameMap = new HashMap<>();
private final Map<String, Connection> populatedConnectionsSnapshot = new LinkedHashMap<>();
public ConnectionListPane() {
renameMap.clear();
@ -138,11 +142,16 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
*/
public void populate(ConnectionConfig connectionConfig) {
List<NameObject> nameObjectList = new ArrayList<NameObject>();
populatedConnectionsSnapshot.clear();
for (Map.Entry<String, Connection> entry : connectionConfig.getConnections().entrySet()) {
nameObjectList.add(new NameObject(entry.getKey(), entry.getValue()));
try {
populatedConnectionsSnapshot.put(entry.getKey(), (Connection) entry.getValue().clone());
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()]));
}
/**
@ -151,15 +160,21 @@ public class ConnectionListPane extends JListControlPane implements ConnectionSh
public void update(ConnectionConfig connectionConfig) {
// Nameable[]居然不能强转成NameObject[],一定要这么写...
Nameable[] res = this.update();
NameObject[] res_array = new NameObject[res.length];
java.util.Arrays.asList(res).toArray(res_array);
connectionConfig.removeAllConnection();
for (int i = 0; i < res_array.length; i++) {
NameObject nameObject = res_array[i];
connectionConfig.addConnection(nameObject.getName(), (Connection) nameObject.getObject());
}
Map<String, Connection> updatedMap = new LinkedHashMap<>();
Arrays.stream(res).map(n -> (NameObject) n).forEach(no -> updatedMap.put(no.getName(), (Connection) no.getObject()));
MapCompareUtils.contrastMapEntries(populatedConnectionsSnapshot, updatedMap, (entryEventKind, s, connection) -> {
switch (entryEventKind) {
case REMOVED:
connectionConfig.removeConnection(s);
break;
case ADDED:
case UPDATED:
connectionConfig.addConnection(s, connection);
default:
break;
}
});
}
@Override

6
designer-base/src/main/java/com/fr/design/gui/ifilechooser/SwingFileChooser.java

@ -32,7 +32,11 @@ class SwingFileChooser implements FileChooserProvider {
@Override
public File[] getSelectedFiles() {
return fileChooser.getSelectedFiles();
if (ArrayUtils.isNotEmpty(fileChooser.getSelectedFiles())) {
return fileChooser.getSelectedFiles();
} else {
return new File[]{fileChooser.getSelectedFile()};
}
}
@Override

7
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

@ -356,7 +356,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
public void fireDesignerOpened() {
for (DesignerOpenedListener listener : designerOpenedListenerList) {
listener.designerOpened();
// 捕获下异常 避免造成启动过程监听触发异常导致设计器闪退
try {
listener.designerOpened();
} catch (Throwable e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
designerOpened = true;

2
designer-base/src/main/java/com/fr/env/HelpLink.java vendored

@ -23,6 +23,8 @@ public class HelpLink {
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Cert_Error_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Connection_Unknown_Error_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_NetWork_Connection_Error_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_Redirect_Solution"), link);
map.put(InterProviderFactory.getProvider().getLocText("Fine-Core_Remote_Design_NetWork_Config_Solution"), link);
return map.get(solution);
}

57
designer-base/src/test/java/com/fr/design/data/MapCompareUtilsTest.java

@ -0,0 +1,57 @@
package com.fr.design.data;
import org.junit.Assert;
import org.junit.Test;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author rinoux
* @version 10.0
* Created by rinoux on 2022/3/28
*/
public class MapCompareUtilsTest {
@Test
public void contrastMapEntries() {
Map<String, String> orig = new LinkedHashMap<>();
orig.put("aaa", "aaa");
orig.put("bbb", "bbb");
orig.put("ccc", "ccc");
orig.put("ddd", "ddd");
Map<String, String> other = new LinkedHashMap<>();
other.put("aaa", "111");
other.put("bbb", "bbb");
other.put("ccc", "ccc");
other.put("eee", "eee");
MapCompareUtils.contrastMapEntries(orig, other, new MapCompareUtils.EventHandler<String, String>() {
@Override
public void on(MapCompareUtils.EntryEventKind entryEventKind, String s, String s2) {
switch (entryEventKind) {
case UPDATED:
Assert.assertEquals(s, "aaa");
Assert.assertEquals(s2, "111");
break;
case REMOVED:
Assert.assertEquals(s, "ddd");
break;
case ADDED:
Assert.assertEquals(s, "eee");
Assert.assertEquals(s2, "eee");
break;
default:
Assert.fail();
}
}
});
}
}

7
designer-form/src/main/java/com/fr/design/mainframe/FormWidgetDetailPane.java

@ -34,6 +34,7 @@ import java.util.List;
* Time: 下午8:18
*/
public class FormWidgetDetailPane extends FormDockView{
private static final int LOCAL_TAB = 0;
private static final int ONLINE_TAB = 1;
private JPanel centerPane;
@ -106,11 +107,15 @@ public class FormWidgetDetailPane extends FormDockView{
cardLayout.show(centerPane, paneList.get(newSelectedIndex).getTitle());
}
};
headGroup.setSelectedIndex(ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib() ? 0 : ONLINE_TAB);
headGroup.setSelectedIndex(isNeedSwitchToOnlineTab() ? ONLINE_TAB : LOCAL_TAB);
this.add(headGroup, BorderLayout.NORTH);
this.add(centerPane, BorderLayout.CENTER);
}
private boolean isNeedSwitchToOnlineTab() {
return !ComponentReuseNotificationInfo.getInstance().isClickedWidgetLib() && isShowOnlineWidgetRepoPane();
}
public void resetEmptyPane(){
this.isEmptyPane = false;
}

77
designer-form/src/main/java/com/fr/design/mainframe/share/ui/widgetfilter/LocalWidgetFilterCategory.java

@ -1,5 +1,6 @@
package com.fr.design.mainframe.share.ui.widgetfilter;
import com.fr.design.i18n.Toolkit;
import com.fr.form.share.bean.WidgetFilterInfo;
import com.fr.form.share.bean.WidgetFilterTypeInfo;
@ -16,60 +17,60 @@ public class LocalWidgetFilterCategory {
List<WidgetFilterTypeInfo> category = new ArrayList<>();
WidgetFilterTypeInfo source = new WidgetFilterTypeInfo();
source.setTitle("来源");
source.setTitle(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Source"));
source.setKey("2@source");
source.addFilterItem(new WidgetFilterInfo("本地", "1", "source"));
source.addFilterItem(new WidgetFilterInfo("商城", "2", "source"));
source.addFilterItem(new WidgetFilterInfo("全部", "0", "source"));
source.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Local"), "1", "source"));
source.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Shop"), "2", "source"));
source.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "source"));
WidgetFilterTypeInfo displayDevice = new WidgetFilterTypeInfo();
displayDevice.setTitle("展示终端");
displayDevice.setTitle(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Show_Device"));
displayDevice.setKey("1@displayDevice");
displayDevice.addFilterItem(new WidgetFilterInfo("PC", "1", "displayDevice"));
displayDevice.addFilterItem(new WidgetFilterInfo("移动端", "2", "displayDevice"));
displayDevice.addFilterItem(new WidgetFilterInfo("全部", "0", "displayDevice"));
displayDevice.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_PC"), "1", "displayDevice"));
displayDevice.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Mobile"), "2", "displayDevice"));
displayDevice.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "displayDevice"));
WidgetFilterTypeInfo fee = new WidgetFilterTypeInfo();
fee.setTitle("价格");
fee.setTitle(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Price"));
fee.setKey("2@fee");
fee.addFilterItem(new WidgetFilterInfo("付费", "2", "fee"));
fee.addFilterItem(new WidgetFilterInfo("免费", "1", "fee"));
fee.addFilterItem(new WidgetFilterInfo("全部", "0", "fee"));
fee.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Pay"), "2", "fee"));
fee.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Free"), "1", "fee"));
fee.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "fee"));
WidgetFilterTypeInfo chart = new WidgetFilterTypeInfo();
chart.setTitle("基础元素");
chart.setTitle(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Basic_Element"));
chart.setKey("3@chart");
chart.addFilterItem(new WidgetFilterInfo("柱形图/条形图", "1", "chart"));
chart.addFilterItem(new WidgetFilterInfo("折线图", "3", "chart"));
chart.addFilterItem(new WidgetFilterInfo("组合图", "4", "chart"));
chart.addFilterItem(new WidgetFilterInfo("饼图", "2", "chart"));
chart.addFilterItem(new WidgetFilterInfo("仪表盘", "5", "chart"));
chart.addFilterItem(new WidgetFilterInfo("地图", "6", "chart"));
chart.addFilterItem(new WidgetFilterInfo("其他图表", "7", "chart"));
chart.addFilterItem(new WidgetFilterInfo("明细表", "8", "chart"));
chart.addFilterItem(new WidgetFilterInfo("基础控件", "9", "chart"));
chart.addFilterItem(new WidgetFilterInfo("全部", "0", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Bar_Chart"), "1", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Line_Chart"), "3", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Combination_Chart"), "4", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Pie_Chart"), "2", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Dashboard_Chart"), "5", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Map"), "6", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Other_Chart"), "7", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Detail_List"), "8", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Basic_Widget"), "9", "chart"));
chart.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "chart"));
WidgetFilterTypeInfo report = new WidgetFilterTypeInfo();
report.setTitle("综合应用");
report.setTitle(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Comprehensive_Application"));
report.setKey("4@report");
report.addFilterItem(new WidgetFilterInfo("指标卡", "1", "report"));
report.addFilterItem(new WidgetFilterInfo("标题头", "2", "report"));
report.addFilterItem(new WidgetFilterInfo("特殊功能卡", "4", "report"));
report.addFilterItem(new WidgetFilterInfo("多维度切换", "5", "report"));
report.addFilterItem(new WidgetFilterInfo("移动目录导航", "6", "report"));
report.addFilterItem(new WidgetFilterInfo("填报", "8", "report"));
report.addFilterItem(new WidgetFilterInfo("全部", "0", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Indicator_Card"), "1", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Title_Head"), "2", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Special_Function_Card"), "4", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Multi_Dimensional_Switch"), "5", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Move_Directory_Navigation"), "6", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Write_Report"), "8", "report"));
report.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "report"));
WidgetFilterTypeInfo style = new WidgetFilterTypeInfo();
style.setTitle("风格");
style.setTitle(Toolkit.i18nText("Fine-Design_Share_Filter_Style"));
style.setKey("5@style");
style.addFilterItem(new WidgetFilterInfo("简约清新", "1", "style"));
style.addFilterItem(new WidgetFilterInfo("商务稳重", "2", "style"));
style.addFilterItem(new WidgetFilterInfo("活泼绚丽", "3", "style"));
style.addFilterItem(new WidgetFilterInfo("酷炫科技", "4", "style"));
style.addFilterItem(new WidgetFilterInfo("其他风格", "5", "style"));
style.addFilterItem(new WidgetFilterInfo("全部", "0", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Simple_Fresh"), "1", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Business_Stable"), "2", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Lively_And_Bright"), "3", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Cool_Technology"), "4", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_Other_Style"), "5", "style"));
style.addFilterItem(new WidgetFilterInfo(Toolkit.i18nText("Fine-Design_Share_Local_Filter_Item_All"), "0", "style"));
category.add(displayDevice);
category.add(source);

1
designer-realize/src/main/java/com/fr/design/webattr/WriteToolBarPane.java

@ -160,6 +160,7 @@ public class WriteToolBarPane extends AbstractEditToolBarPane {
colorButton.setColor(webWrite.getSelectedColor());
} else {
colorBox.setSelected(false);
colorButton.setEnabled(false);
}
if (webWrite.getSheetPosition() == Constants.TOP) {

2
designer-realize/src/main/java/com/fr/design/webattr/WriteWebSettingPane.java

@ -108,6 +108,7 @@ public class WriteWebSettingPane extends WebSettingPane<WebWrite> {
protected void setDefault() {
super.setDefault();
colorBox.setSelected(false);
colorButton.setEnabled(false);
bottomRadioButton.setSelected(true);
leftRadioButton.setSelected(true);
unloadCheck.setSelected(true);
@ -125,6 +126,7 @@ public class WriteWebSettingPane extends WebSettingPane<WebWrite> {
colorButton.setColor(webWrite.getSelectedColor());
} else {
colorBox.setSelected(false);
colorButton.setEnabled(false);
}
if (webWrite.getSheetPosition() == Constants.TOP) {

2
designer-realize/src/main/java/com/fr/poly/creator/ECBlockPane.java

@ -56,7 +56,7 @@ public class ECBlockPane extends PolyElementCasePane {
@Override
public void selectionChanged(SelectionEvent e) {
if (!isEditable() && !DesignModeContext.isAuthorityEditing()) {
if (!isEditable()) {
return;
}
if (DesignModeContext.isAuthorityEditing()) {

Loading…
Cancel
Save