Browse Source

Merge pull request #3 in ~NEIL/design from release/10.0 to 10.0

* commit '5a3f3db913385d1a2c4ce1b8c51814c329717bbe':
  无JIRA任务 代码耦合
  REPORT-12721 HistoryTemplateListPane插件兼容
  REPORT-12721 HistoryTemplateListPane插件兼容
  REPORT-12697 mac在jni在部分系统下报签名失败
  REPORT-12161 & REPORT-10599
  无JIRA任务  websocket端口可以支持设置多个可选端口,让单机多节点集群可用
  REPORT-12324 服务器》服务器数据集中新增数数据集预览后日志中出现报错
10.0
neil 6 years ago
parent
commit
83a3a14016
  1. 12
      designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataDictPane.java
  2. 23
      designer-base/src/main/java/com/fr/design/dialog/UIDialog.java
  3. 144
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListPane.java
  4. 14
      designer-base/src/main/java/com/fr/design/fun/ConnectionProvider.java
  5. 27
      designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java
  6. 4
      designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java
  7. 11
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java
  8. 2
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  9. 29
      designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java
  10. 19
      designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java
  11. 2
      designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java
  12. 32
      designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java
  13. BIN
      designer-realize/src/main/resources/com/fr/start/jni/splash.dylib

12
designer-base/src/main/java/com/fr/design/data/datapane/TreeTableDataDictPane.java

@ -16,12 +16,15 @@ import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ibutton.UIRadioButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.script.Calculator;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.BorderFactory;
import java.awt.*; import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
@ -155,7 +158,6 @@ public class TreeTableDataDictPane extends BasicPane implements Previewable {
} }
} }
rtd.setTableDataSource(DesignTableDataManager.getEditingTableDataSource()); rtd.setTableDataSource(DesignTableDataManager.getEditingTableDataSource());
rtd.createDataModel(Calculator.createCalculator());
PreviewTablePane.previewTableData(rtd); PreviewTablePane.previewTableData(rtd);
} }
}); });

23
designer-base/src/main/java/com/fr/design/dialog/UIDialog.java

@ -73,7 +73,7 @@ public abstract class UIDialog extends JDialog {
} }
this.setName(pane.title4PopupWindow()); this.setName(pane.title4PopupWindow());
this.setModal(true); this.setModal(true);
this.pack();
GUICoreUtils.centerWindow(this); GUICoreUtils.centerWindow(this);
} }
@ -90,12 +90,10 @@ public abstract class UIDialog extends JDialog {
//取消 //取消
addCancelButton(buttonsPane); addCancelButton(buttonsPane);
this.getRootPane().setDefaultButton(okButton);
return controlPane; return controlPane;
} }
protected void addCustomButton(JPanel buttonsPane){ protected void addCustomButton(JPanel buttonsPane) {
} }
@ -110,6 +108,18 @@ public abstract class UIDialog extends JDialog {
doCancel(); doCancel();
} }
}); });
JPanel defaultPane = (JPanel) this.getContentPane();
InputMap inputMapAncestor = defaultPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap actionMap = defaultPane.getActionMap();
// transfer focus to CurrentEditor
inputMapAncestor.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "dialogOK");
actionMap.put("dialogOK", new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
doOK();
}
});
} }
private void addOkButton(JPanel buttonsPane) { private void addOkButton(JPanel buttonsPane) {
@ -130,7 +140,6 @@ public abstract class UIDialog extends JDialog {
* 添加监听器 * 添加监听器
* *
* @param l 监听器 * @param l 监听器
*
*/ */
public void addDialogActionListener(DialogActionListener l) { public void addDialogActionListener(DialogActionListener l) {
listeners.add(l); listeners.add(l);
@ -138,7 +147,6 @@ public abstract class UIDialog extends JDialog {
/** /**
* 清除所有监听器 * 清除所有监听器
*
*/ */
public void clearDialogActionListeners() { public void clearDialogActionListeners() {
listeners.clear(); listeners.clear();
@ -146,7 +154,6 @@ public abstract class UIDialog extends JDialog {
/** /**
* 确定操作 * 确定操作
*
*/ */
public void doOK() { public void doOK() {
try { try {
@ -177,7 +184,6 @@ public abstract class UIDialog extends JDialog {
/** /**
* 取消操作 * 取消操作
*
*/ */
public void doCancel() { public void doCancel() {
@ -224,7 +230,6 @@ public abstract class UIDialog extends JDialog {
/** /**
* 检测结果是否合法 * 检测结果是否合法
*
*/ */
public abstract void checkValid() throws Exception; public abstract void checkValid() throws Exception;

144
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListPane.java

@ -1,16 +1,154 @@
package com.fr.design.file; package com.fr.design.file;
import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.design.mainframe.JTemplate;
import com.fr.file.FILE;
import com.fr.file.FileNodeFILE;
import java.util.List;
/** /**
* 历史模板缓存 * 历史模板缓存
* * <p>
* 为可能存在的插件做兼容处理 * 为可能存在的插件做兼容处理
* *
* @see HistoryTemplateListCache * @see HistoryTemplateListCache
* @deprecated use HistoryTemplateListCache instead * @deprecated use HistoryTemplateListCache instead
*/ */
@Deprecated @Deprecated
public class HistoryTemplateListPane { public class HistoryTemplateListPane implements CallbackEvent {
public static HistoryTemplateListCache getInstance() {
private static volatile HistoryTemplateListPane THIS;
public static HistoryTemplateListPane getInstance() {
if (THIS == null) {
synchronized (HistoryTemplateListPane.class) {
if (THIS == null) {
THIS = new HistoryTemplateListPane();
}
}
}
return THIS;
}
private static HistoryTemplateListCache instead() {
return HistoryTemplateListCache.getInstance(); return HistoryTemplateListCache.getInstance();
} }
/**
* 关闭选择的文件
*
* @param selected 选择的
*/
public void closeSelectedReport(JTemplate<?, ?> selected) {
instead().closeSelectedReport(selected);
}
/**
* 临时关闭选择的文件
*
* @param selected 选择的
*/
public void closeVirtualSelectedReport(JTemplate<?, ?> selected) {
instead().closeVirtualSelectedReport(selected);
}
public JTemplate<?, ?> getCurrentEditingTemplate() {
return instead().getCurrentEditingTemplate();
}
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) {
instead().setCurrentEditingTemplate(jt);
}
/**
* 添加历史记录
*/
public void addHistory() {
instead().addHistory();
}
public List<JTemplate<?, ?>> getHistoryList() {
return instead().getHistoryList();
}
/**
* 清空历史记录
*/
public void removeAllHistory() {
instead().removeAllHistory();
}
public int getHistoryCount() {
return instead().getHistoryCount();
}
public JTemplate<?, ?> get(int index) {
return instead().get(index);
}
public JTemplate<?, ?> getTemplate(int index) {
return instead().getTemplate(index);
}
/**
* 获取模板的index
*
* @param jt 模板
* @return 位置
*/
public int contains(JTemplate<?, ?> jt) {
return instead().contains(jt);
}
/**
* 判断是否打开过该模板
*
* @param filename 文件名
* @return 文件位置
*/
public int contains(String filename) {
return instead().contains(filename);
}
/**
* 是否是当前编辑的文件
*
* @param filename 文件名
* @return 是则返回TRUE
*/
public boolean isCurrentEditingFile(String filename) {
return instead().isCurrentEditingFile(filename);
}
@Override
public void callback() {
instead().callback();
}
/**
* 打开new模板的同时关闭old模板,优先关已保存的先打开的
*/
public void closeOverLineTemplate() {
instead().closeOverLineTemplate();
}
public void deleteFile(FileNodeFILE file) {
instead().deleteFile(file);
}
public boolean rename(FILE tplFile, String from, String to) {
return instead().rename(tplFile, from, to);
}
} }

14
designer-base/src/main/java/com/fr/design/fun/ConnectionProvider.java

@ -10,32 +10,36 @@ import com.fr.stable.fun.mark.Mutable;
*/ */
public interface ConnectionProvider extends Mutable { public interface ConnectionProvider extends Mutable {
public static final String XML_TAG = "ConnectionProvider"; String XML_TAG = "ConnectionProvider";
// 2016-12-14 1 -> 2 , 增加connection.feature方法导致不兼容. // 2016-12-14 1 -> 2 , 增加connection.feature方法导致不兼容.
int CURRENT_LEVEL = 2; int CURRENT_LEVEL = 2;
/** /**
* 数据连接弹出菜单的名字 * 数据连接弹出菜单的名字
*
* @return 名字 * @return 名字
*/ */
public String nameForConnection(); String nameForConnection();
/** /**
* 数据连接弹出菜单的图标 * 数据连接弹出菜单的图标
*
* @return 图标路径 * @return 图标路径
*/ */
public String iconPathForConnection(); String iconPathForConnection();
/** /**
* 数据连接的类型 * 数据连接的类型
*
* @return 连接类型 * @return 连接类型
*/ */
public Class<? extends com.fr.data.impl.Connection> classForConnection(); Class<? extends com.fr.data.impl.Connection> classForConnection();
/** /**
* 数据连接的设计界面 * 数据连接的设计界面
*
* @return 设计界面 * @return 设计界面
*/ */
public Class<? extends BasicBeanPane<? extends Connection>> appearanceForConnection(); Class<? extends BasicBeanPane<? extends Connection>> appearanceForConnection();
} }

27
designer-base/src/main/java/com/fr/design/javascript/JSContentPane.java

@ -28,6 +28,7 @@ import java.util.ArrayList;
public class JSContentPane extends BasicPane { public class JSContentPane extends BasicPane {
private RSyntaxTextArea contentTextArea; private RSyntaxTextArea contentTextArea;
private UILabel funNameLabel; private UILabel funNameLabel;
private AutoCompletion ac;
private int titleWidth = 180; private int titleWidth = 180;
@ -78,14 +79,6 @@ public class JSContentPane extends BasicPane {
contentTextArea.setCodeFoldingEnabled(true); contentTextArea.setCodeFoldingEnabled(true);
contentTextArea.setAntiAliasingEnabled(true); contentTextArea.setAntiAliasingEnabled(true);
CompletionProvider provider = createCompletionProvider();
AutoCompletion ac = new AutoCompletion(provider);
String shortCuts = DesignerEnvManager.getEnvManager().getAutoCompleteShortcuts();
ac.setTriggerKey(convert2KeyStroke(shortCuts));
ac.install(contentTextArea);
UIScrollPane sp = new UIScrollPane(contentTextArea); UIScrollPane sp = new UIScrollPane(contentTextArea);
this.add(sp, BorderLayout.CENTER); this.add(sp, BorderLayout.CENTER);
@ -104,13 +97,31 @@ public class JSContentPane extends BasicPane {
} }
public void populate(String js) { public void populate(String js) {
if (ac == null) {
CompletionProvider provider = createCompletionProvider();
ac = new AutoCompletion(provider);
String shortCuts = DesignerEnvManager.getEnvManager().getAutoCompleteShortcuts();
ac.setTriggerKey(convert2KeyStroke(shortCuts));
ac.install(contentTextArea);
}
this.contentTextArea.setText(js); this.contentTextArea.setText(js);
} }
public String update() { public String update() {
if (ac != null) {
this.ac.uninstall();
ac = null;
}
return this.contentTextArea.getText(); return this.contentTextArea.getText();
} }
public void reset() {
this.contentTextArea.setText(null);
}
public void setFunctionTitle(String[] args) { public void setFunctionTitle(String[] args) {
funNameLabel.setText(createFunctionTitle(args)); funNameLabel.setText(createFunctionTitle(args));
} }

4
designer-base/src/main/java/com/fr/design/javascript/JavaScriptImplPane.java

@ -138,6 +138,9 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane<JavaScriptImpl> {
public void populateBean(JavaScriptImpl javaScriptImpl) { public void populateBean(JavaScriptImpl javaScriptImpl) {
if (javaScriptImpl == null) { if (javaScriptImpl == null) {
javaScriptImpl = new JavaScriptImpl(); javaScriptImpl = new JavaScriptImpl();
jsPane.reset();
}else{
jsPane.populate(javaScriptImpl.getContent());
} }
int rowCount = javaScriptImpl.getJSImportSize(); int rowCount = javaScriptImpl.getJSImportSize();
@ -147,7 +150,6 @@ public class JavaScriptImplPane extends AbstractHyperLinkPane<JavaScriptImpl> {
} }
importedJsPane.populate(value); importedJsPane.populate(value);
parameterPane.populate(javaScriptImpl.getParameters()); parameterPane.populate(javaScriptImpl.getParameters());
jsPane.populate(javaScriptImpl.getContent());
if (itemNameTextField != null) { if (itemNameTextField != null) {
itemNameTextField.setText(javaScriptImpl.getItemName()); itemNameTextField.setText(javaScriptImpl.getItemName());

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

@ -155,6 +155,9 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
// 右边的虚线 // 右边的虚线
private DottedLine rightDottedLine; private DottedLine rightDottedLine;
//用于判断设计器是否打开了
private boolean designerOpened = false;
private int contentWidth = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()); private int contentWidth = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());
private int contentHeight = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()); private int contentHeight = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());
@ -351,7 +354,9 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/ */
public void addDesignerOpenedListener(DesignerOpenedListener listener) { public void addDesignerOpenedListener(DesignerOpenedListener listener) {
designerOpenedListenerList.add(listener); if (!designerOpened) {
designerOpenedListenerList.add(listener);
}
} }
/** /**
@ -362,6 +367,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
for (DesignerOpenedListener listener : designerOpenedListenerList) { for (DesignerOpenedListener listener : designerOpenedListenerList) {
listener.designerOpened(); listener.designerOpened();
} }
designerOpened = true;
//使用完清除监听
designerOpenedListenerList.clear();
} }
protected DesktopCardPane getCenterTemplateCardPane() { protected DesktopCardPane getCenterTemplateCardPane() {

2
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -780,7 +780,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
((JTemplateActionListener) listeners[i + 1]).templateClosed(this); ((JTemplateActionListener) listeners[i + 1]).templateClosed(this);
} }
} }
this.undoState = null;
this.repaint(30); this.repaint(30);
} }

29
designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java

@ -148,6 +148,9 @@ public abstract class ToolBarMenuDock {
}; };
private static final String FINEREPORT = "FineReport"; private static final String FINEREPORT = "FineReport";
private static final int MENUBAR_HEIGHT = 22; private static final int MENUBAR_HEIGHT = 22;
private static final List<PluginEventListener> PLUGIN_LISTENERS = new ArrayList<>();
private MenuDef[] menus; private MenuDef[] menus;
private ToolBarDef toolBarDef; private ToolBarDef toolBarDef;
private List<UpdateActionModel> shortCutsList; private List<UpdateActionModel> shortCutsList;
@ -218,6 +221,8 @@ public abstract class ToolBarMenuDock {
} }
public MenuDef[] menus(final ToolBarMenuDockPlus plus) { public MenuDef[] menus(final ToolBarMenuDockPlus plus) {
//删除之前创建的插件菜单监听
clearPluginListeners();
java.util.List<MenuDef> menuList = new java.util.ArrayList<MenuDef>(); java.util.List<MenuDef> menuList = new java.util.ArrayList<MenuDef>();
// 添加文件菜单 // 添加文件菜单
menuList.add(createFileMenuDef(plus)); menuList.add(createFileMenuDef(plus));
@ -248,6 +253,15 @@ public abstract class ToolBarMenuDock {
return menuList.toArray(new MenuDef[menuList.size()]); return menuList.toArray(new MenuDef[menuList.size()]);
} }
//清空监听
private static synchronized void clearPluginListeners() {
for (PluginEventListener listener : PLUGIN_LISTENERS) {
GeneralContext.stopListenPlugin(listener);
}
PLUGIN_LISTENERS.clear();
}
/** /**
* 获取所有actionmodel * 获取所有actionmodel
* *
@ -644,7 +658,7 @@ public abstract class ToolBarMenuDock {
} }
}; };
GeneralContext.listenPlugin(PluginEventType.BeforeStop, new PluginEventListener() { PluginEventListener beforeStop = new PluginEventListener() {
@Override @Override
public void on(PluginEvent event) { public void on(PluginEvent event) {
@ -652,8 +666,9 @@ public abstract class ToolBarMenuDock {
Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING); Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING);
removeExtraMenus(menuDef, anchor, action, menuHandlers); removeExtraMenus(menuDef, anchor, action, menuHandlers);
} }
}, filter); };
GeneralContext.listenPlugin(PluginEventType.AfterRun, new PluginEventListener() {
PluginEventListener afterRun = new PluginEventListener() {
@Override @Override
public void on(PluginEvent event) { public void on(PluginEvent event) {
@ -662,7 +677,13 @@ public abstract class ToolBarMenuDock {
Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING); Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING);
addExtraMenus(menuDef, anchor, action, menuHandlers); addExtraMenus(menuDef, anchor, action, menuHandlers);
} }
}, filter); };
GeneralContext.listenPlugin(PluginEventType.BeforeStop, beforeStop, filter);
GeneralContext.listenPlugin(PluginEventType.AfterRun, afterRun, filter);
PLUGIN_LISTENERS.add(afterRun);
PLUGIN_LISTENERS.add(beforeStop);
} }
private void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) { private void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) {

19
designer-form/src/main/java/com/fr/design/mainframe/WidgetPropertyPane.java

@ -28,7 +28,7 @@ import java.util.Set;
* 控件属性表绘制 * 控件属性表绘制
* Modified by fanglei * Modified by fanglei
*/ */
public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane { public class WidgetPropertyPane extends FormDockView implements BaseWidgetPropertyPane {
private static final int PADDING = 10; private static final int PADDING = 10;
private static final int PADDING_M = 12; private static final int PADDING_M = 12;
@ -108,11 +108,10 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope
*/ */
private void initTables() { private void initTables() {
formWidgetCardPane.populate(); formWidgetCardPane.populate();
eventTable.refresh();
if (mobileExtraPropertyPanes != null) { if (mobileExtraPropertyPanes != null) {
for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) { for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) {
extraPane.initPropertyGroups(designer); extraPane.initPropertyGroups(designer);
extraPane.populate(designer);
} }
} }
if (widgetPropertyTables != null) { if (widgetPropertyTables != null) {
@ -222,7 +221,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Mobile_Terminal") com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Widget_Mobile_Terminal")
}; };
final CardLayout tabbedPane = new CardLayout(); final CardLayout tabbedPane = new CardLayout();
final JPanel center = new JPanel(tabbedPane); final JPanel center = new JPanel(tabbedPane);
center.add(formWidgetCardPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Properties")); center.add(formWidgetCardPane, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Form_Properties"));
center.add(eventTable, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event")); center.add(eventTable, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Event"));
@ -232,6 +231,16 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope
tabsHeaderIconPane = new UIHeadGroup(tabTitles) { tabsHeaderIconPane = new UIHeadGroup(tabTitles) {
@Override @Override
public void tabChanged(int index) { public void tabChanged(int index) {
//切换的时候再populate
if (index == 1) {
eventTable.refresh();
} else if (index == 2) {
if (mobileExtraPropertyPanes != null) {
for (MobileWidgetDefinePane extraPane : mobileExtraPropertyPanes) {
extraPane.populate(designer);
}
}
}
tabbedPane.show(center, tabTitles[index]); tabbedPane.show(center, tabTitles[index]);
} }
}; };
@ -292,7 +301,7 @@ public class WidgetPropertyPane extends FormDockView implements BaseWidgetPrope
if (evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED if (evt.getCreatorEventID() == DesignerEvent.CREATOR_DELETED
|| evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED) { || evt.getCreatorEventID() == DesignerEvent.CREATOR_RESIZED) {
formWidgetCardPane.populate(); formWidgetCardPane.populate();
} else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED){ } else if (evt.getCreatorEventID() == DesignerEvent.CREATOR_SELECTED) {
// 防止多次触发 // 防止多次触发
if (lastAffectedCreator != null && lastAffectedCreator == evt.getAffectedCreator()) { if (lastAffectedCreator != null && lastAffectedCreator == evt.getAffectedCreator()) {
return; return;

2
designer-realize/src/main/java/com/fr/design/mainframe/ElementCasePane.java

@ -596,7 +596,7 @@ public abstract class ElementCasePane<T extends TemplateElementCase> extends Tar
* @return 是则返回true * @return 是则返回true
*/ */
public boolean isSelectedOneCell() { public boolean isSelectedOneCell() {
return selection.isSelectedOneCell(this); return (selection == null) ? false : selection.isSelectedOneCell(this);
} }
/** /**

32
designer-realize/src/main/java/com/fr/design/mainframe/socketio/DesignerSocketIO.java

@ -68,8 +68,8 @@ public class DesignerSocketIO {
return; return;
} }
try { try {
String uri = getSocketUri(current); String[] uri = getSocketUri(current);
socketIO = Optional.of(IO.socket(new URI(uri))); socketIO = Optional.of(IO.socket(new URI(uri[0])));
socketIO.get().on(WorkspaceConstants.WS_LOGRECORD, printLog); socketIO.get().on(WorkspaceConstants.WS_LOGRECORD, printLog);
socketIO.get().on(WorkspaceConstants.CONFIG_MODIFY, new Emitter.Listener() { socketIO.get().on(WorkspaceConstants.CONFIG_MODIFY, new Emitter.Listener() {
@Override @Override
@ -109,19 +109,23 @@ public class DesignerSocketIO {
} }
} }
private static String getSocketUri(Workspace current) throws IOException { private static String[] getSocketUri(Workspace current) throws IOException {
URL url = new URL(current.getPath()); URL url = new URL(current.getPath());
int port = WorkContext.getCurrent().get(SocketInfoOperator.class).getPort(); Integer[] ports = WorkContext.getCurrent().get(SocketInfoOperator.class).getPort();
WorkspaceConnection connection = WorkContext.getCurrent().getConnection(); WorkspaceConnection connection = WorkContext.getCurrent().getConnection();
return String.format("%s://%s:%s%s?%s=%s&%s=%s", String[] result = new String[ports.length];
url.getProtocol(), for (int i = 0; i < ports.length; i++ ) {
url.getHost(), result[i] = String.format("%s://%s:%s%s?%s=%s&%s=%s",
port, url.getProtocol(),
WorkspaceConstants.WS_NAMESPACE, url.getHost(),
DecisionServiceConstants.WEB_SOCKET_TOKEN_NAME, ports[i],
connection.getToken(), WorkspaceConstants.WS_NAMESPACE,
RemoteDesignConstants.USER_LOCK_ID, DecisionServiceConstants.WEB_SOCKET_TOKEN_NAME,
connection.getId() connection.getToken(),
); RemoteDesignConstants.USER_LOCK_ID,
connection.getId());
}
return result;
} }
} }

BIN
designer-realize/src/main/resources/com/fr/start/jni/splash.dylib

Binary file not shown.
Loading…
Cancel
Save