diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index 6517e705e2..956871424d 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -6,19 +6,19 @@ package com.fr.design; import com.fr.base.BaseXMLUtils; import com.fr.base.FRContext; import com.fr.base.Utils; +import com.fr.base.env.EnvUpdater; import com.fr.core.env.EnvConfig; -import com.fr.core.env.resource.EnvConfigUtils; -import com.fr.core.env.resource.LocalEnvConfig; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.constants.UIConstants; -import com.fr.env.SignIn; +import com.fr.design.env.EnvGenerator; import com.fr.file.FILEFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogFormatter; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; +import com.fr.general.xml.GeneralXMLTools; import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.EnvChangedListener; @@ -73,7 +73,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private boolean showPaintToolBar = true; private int maxNumberOrPreviewRow = 200; // name和Env的键值对 - private Map nameEnvMap = new ListMap(); + private Map nameEnvMap = new ListMap<>(); // marks: 当前报表服务器名字 private String curEnvName = null; private boolean showProjectPane = true; @@ -526,11 +526,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (isCurrentEnvDefault()) { return; } - try { - SignIn.signIn(getDefaultEnv()); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } + EnvUpdater.updateEnv(EnvGenerator.generate(getDefaultEnv())); } /** @@ -1311,8 +1307,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.readReportPaneAttributions(reader); } else if ("RecentOpenedFilePathList".equals(name) || "ResentOpenedFilePathList".equals(name)) { this.readRecentOpenFileList(reader); - } else if ("Envs".equals(name) || name.equals("ReportServerMap")) { - this.readCurEnv(reader); + } else if ("EnvConfigMap".equals(name)) { + this.readEnvConfigMap(reader); } else if (name.equals("ActivationKey")) { readActiveKey(reader); } else if ("LogLocation".equals(name)) { @@ -1457,32 +1453,30 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } - private void readCurEnv(XMLableReader reader) { - String tmpVal; - // marks:设置默认的webInf名字 - if ((tmpVal = reader.getAttrAsString("currentEnv", null)) != null) { - this.setCurEnvName(tmpVal); - } - + private void readEnvConfigMap(XMLableReader reader) { + String currentEnv = reader.getAttrAsString("currentEnv", StringUtils.EMPTY); + this.setCurEnvName(currentEnv); reader.readXMLObject(new XMLReadable() { - @Override public void readXML(XMLableReader reader) { if (reader.isAttr()) { - DesignerEnvManager.this.clearAllEnv(); - } - - if (reader.isChildNode()) { - if (reader.getTagName().contains("Env")) { // description. - // marks:获取名字 - String reportServerName = reader.getAttrAsString("name", null); - - EnvConfig env = readEnv(reader); - if (env == null) { - return; - } - - DesignerEnvManager.this.putEnv(reportServerName, env); + clearAllEnv(); + } else if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if ("EnvConfigElement".equals(tagName)) { + final String name = reader.getAttrAsString("name", StringUtils.EMPTY); + reader.readXMLObject(new XMLReadable() { + @Override + public void readXML(XMLableReader reader) { + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if (EnvConfig.XML_TAG.equals(tagName)) { + EnvConfig envConfig = (EnvConfig) GeneralXMLTools.readXMLable(reader); + putEnv(name, envConfig); + } + } + } + }); } } } @@ -1524,7 +1518,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { public void writeXML(XMLPrintWriter writer) { writer.startTAG("Designer"); - writeAttrues(writer); + writeAttributes(writer); writeReportPaneAttributions(writer); writeRecentOpenFileAndEnvList(writer); writeSomeAttr(writer); @@ -1596,22 +1590,20 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } writer.end(); - writer.startTAG("Envs"); + writer.startTAG("EnvConfigMap"); if (this.curEnvName != null) { writer.attr("currentEnv", this.curEnvName); } - Iterator nameIt = this.getEnvNameIterator(); - while (nameIt.hasNext()) { - String envName = nameIt.next(); - EnvConfig env = this.getEnv(envName); - - writeEnv(writer, envName, env); + for (Entry entry : nameEnvMap.entrySet()) { + writer.startTAG("EnvConfigElement").attr("name", entry.getKey()); + EnvConfig envConfig = entry.getValue(); + GeneralXMLTools.writeXMLable(writer, envConfig, EnvConfig.XML_TAG); + writer.end(); } - writer.end(); } - private void writeAttrues(XMLPrintWriter writer) { + private void writeAttributes(XMLPrintWriter writer) { writer.startTAG("Attributes"); if (this.getWindowBounds() != null) { writer.attr("windowBounds", BaseXMLUtils.getRectangleText(this.getWindowBounds())); @@ -1767,46 +1759,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { .end(); } - /* - * 写Env为xml - */ - private static void writeEnv(XMLPrintWriter writer, String name, EnvConfig env) { - if (env == null) { - return; - } - - writer.startTAG("EnvConfig"); - writer.classAttr(env.getClass()); - writer.attr("name", name); - - EnvConfigXMLAdapter xmlAdapter = env instanceof RemoteEnvConfig - ? new RemoteEnvConfigXMLAdapter() - : new LocalEnvConfigXMLAdapter(); - xmlAdapter.fromEnvConfig(env).writeXML(writer); - writer.end(); - } - - /* - * 从xml读Env - */ - private static EnvConfig readEnv(XMLableReader reader) { - EnvConfigXMLAdapter xmlAdapter = null; - String tmpVal; //temp value - if ((tmpVal = reader.getAttrAsString("class", null)) != null) { - if (tmpVal.contains(".LocalEnv")) { - xmlAdapter = new LocalEnvConfigXMLAdapter(); - } else if (tmpVal.contains(".RemoteEnv")) { - xmlAdapter = new RemoteEnvConfigXMLAdapter(); - } - } - - if (xmlAdapter == null) { - return null; - } - - reader.readXMLObject(xmlAdapter); - return xmlAdapter.toEnvConfig(); - } public AlphaFineConfigManager getAlphaFineConfigManager() { return alphaFineConfigManager; @@ -1816,79 +1768,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.alphaFineConfigManager = alphaFineConfigManager; } - private interface EnvConfigXMLAdapter extends XMLReadable, XMLWriter { - EnvConfig toEnvConfig(); - - EnvConfigXMLAdapter fromEnvConfig(EnvConfig envConfig); - } - - private static class LocalEnvConfigXMLAdapter implements EnvConfigXMLAdapter { - private String path; - - public void readXML(XMLableReader reader) { - if (reader.isChildNode()) { - if ("DIR".equals(reader.getTagName())) { - this.path = reader.getElementValue(); - } - } - } - - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("DIR").textNode(this.path).end(); - } - - public EnvConfig toEnvConfig() { - return new LocalEnvConfig(path); - } - - public EnvConfigXMLAdapter fromEnvConfig(EnvConfig envConfig) { - this.path = envConfig.getPath(); - return this; - } - - } - - private static class RemoteEnvConfigXMLAdapter implements EnvConfigXMLAdapter { - private String path; - private String username; - private String password; - - public void readXML(XMLableReader reader) { - if (reader.isChildNode()) { - String tmpVal; - if ("DIR".equals(reader.getTagName())) { - if ((tmpVal = reader.getAttrAsString("path", null)) != null) { - this.path = tmpVal; - } - if ((tmpVal = reader.getAttrAsString("user", null)) != null) { - this.username = tmpVal; - } - if ((tmpVal = reader.getAttrAsString("password", null)) != null) { - this.password = tmpVal; - } - } - } - } - - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("DIR") - .attr("path", this.path) - .attr("user", this.username) - .attr("password", this.password) - .end(); - } - - public EnvConfig toEnvConfig() { - return new RemoteEnvConfig(path, username, password); - } - - public EnvConfigXMLAdapter fromEnvConfig(EnvConfig envConfig) { - this.path = envConfig.getPath(); - this.username = EnvConfigUtils.getUsername(envConfig); - this.password = EnvConfigUtils.getPassword(envConfig); - return this; - } - } public boolean isImageCompress() { return imageCompress; } diff --git a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java index 838fce4e00..c956670576 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -1,13 +1,16 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; +import com.fr.base.env.Callback; +import com.fr.base.env.EnvUpdater; import com.fr.core.env.EnvConfig; -import com.fr.core.env.resource.LocalEnvConfig; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.tabledata.ResponseDataSourceChange; +import com.fr.design.env.EnvGenerator; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; @@ -15,14 +18,14 @@ import com.fr.design.mainframe.TemplatePane; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; +import com.fr.design.utils.DesignUtils; import com.fr.env.RemoteEnv; -import com.fr.env.SignIn; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; import com.fr.stable.EnvChangedListener; -import javax.swing.JOptionPane; +import javax.swing.*; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Iterator; @@ -97,24 +100,25 @@ public class SwitchExistEnv extends MenuDef { */ public void actionPerformed(ActionEvent e) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - EnvConfig selectedEnv = envManager.getEnv(this.getName()); - try { - if (selectedEnv instanceof RemoteEnv && !((RemoteEnv) selectedEnv).testServerConnection()) { + final String envName = getName(); + EnvConfig selectedEnv = envManager.getEnv(envName); + EnvUpdater.updateEnv(EnvGenerator.generate(selectedEnv), new Callback() { + @Override + public void success() { + DesignerEnvManager.getEnvManager().setCurEnvName(envName); + DesignUtils.refreshDesignerFrame(); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); + fireDSChanged(); + } + + @Override + public void fail() { + TemplatePane.getInstance().editItems(); JOptionPane.showMessageDialog( DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - return; } - SignIn.signIn(selectedEnv); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); - fireDSChanged(); - } catch (Exception em) { - FineLoggerFactory.getLogger().error(em.getMessage(), em); - JOptionPane.showMessageDialog( - DesignerContext.getDesignerFrame(), - Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - TemplatePane.getInstance().editItems(); - } + }); } } } diff --git a/designer-base/src/com/fr/design/actions/help/AboutPane.java b/designer-base/src/com/fr/design/actions/help/AboutPane.java index cef401e08d..1393f041b9 100644 --- a/designer-base/src/com/fr/design/actions/help/AboutPane.java +++ b/designer-base/src/com/fr/design/actions/help/AboutPane.java @@ -68,28 +68,36 @@ public class AboutPane extends JPanel { Inter.getLocText("FR-Designer-Basic_Activation_Key_Copy_OK") })); - if (shouldShowPhoneAndQQ()) { - if (ComparatorUtils.equals(ProductConstants.APP_NAME, FINEREPORT)) { - boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + ProductConstants.COMPARE_TELEPHONE); - contentPane.add(boxCenterAlignmentPane); - } - boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ:" + SiteCenter.getInstance().acquireUrlByKind("help.qq")); - contentPane.add(boxCenterAlignmentPane); - } + addPhoneAndQQPane(contentPane); + + // 官网 + JPanel urlActionPane = getURLActionPane(Inter.getLocText("FR-Designer_Official_Website"), SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL)); - BoxCenterAligmentPane actionLabel = getURLActionLabel(SiteCenter.getInstance().acquireUrlByKind("website." + FRContext.getLocale(), ProductConstants.WEBSITE_URL)); - BoxCenterAligmentPane emailLabel = getEmailActionLabel(SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL)); + // 支持邮箱 + String defaultEmail = SiteCenter.getInstance().acquireUrlByKind("support.email", ProductConstants.SUPPORT_EMAIL); + JPanel emailPane = getEmailActionPane(Inter.getLocText("FR-Designer_Support_Email"),SiteCenter.getInstance().acquireUrlByKind("support.email." + FRContext.getLocale(), defaultEmail)); - contentPane.add(actionLabel); - contentPane.add(emailLabel); + contentPane.add(urlActionPane); + contentPane.add(emailPane); if (shouldShowThanks()) { addThankPane(contentPane); } } - // 是否显示服务电话和 qq - private boolean shouldShowPhoneAndQQ() { - return !FRContext.getLocale().equals(Locale.US); + private void addPhoneAndQQPane(JPanel contentPane) { + BoxCenterAligmentPane boxCenterAlignmentPane; + // 英文版不显示服务电话和QQ + if (FRContext.getLocale().equals(Locale.US)) { + return; + } + boxCenterAlignmentPane = new BoxCenterAligmentPane(Inter.getLocText("FR-Designer_Service_Phone") + SiteCenter.getInstance().acquireUrlByKind("service.phone." + FRContext.getLocale(), ProductConstants.COMPARE_TELEPHONE)); + contentPane.add(boxCenterAlignmentPane); + // 繁体版不显示QQ + if (FRContext.getLocale().equals(Locale.TAIWAN)) { + return; + } + boxCenterAlignmentPane = new BoxCenterAligmentPane("QQ: " + SiteCenter.getInstance().acquireUrlByKind("help.qq")); + contentPane.add(boxCenterAlignmentPane); } // 是否显示鸣谢面板 @@ -133,7 +141,7 @@ public class AboutPane extends JPanel { StringUtils.BLANK, ProductConstants.RELEASE_VERSION, BUILD_PREFIX); } - private BoxCenterAligmentPane getEmailActionLabel(final String mailTo) { + private JPanel getEmailActionPane(final String desc, final String mailTo){ ActionLabel emailLabel = new ActionLabel(mailTo); emailLabel.addActionListener(new ActionListener() { @@ -147,10 +155,13 @@ public class AboutPane extends JPanel { } }); - return new BoxCenterAligmentPane(emailLabel); + JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + panel.add(new UILabel(desc)); + panel.add(emailLabel); + return panel; } - private BoxCenterAligmentPane getURLActionLabel(final String url) { + private JPanel getURLActionPane(final String desc, final String url){ ActionLabel actionLabel = new ActionLabel(url); actionLabel.addActionListener(new ActionListener() { @Override @@ -163,7 +174,11 @@ public class AboutPane extends JPanel { } }); - return new BoxCenterAligmentPane(actionLabel); + JPanel panel = FRGUIPaneFactory.createNormalFlowInnerContainer_S_Pane(); + panel.add(new UILabel(desc)); + panel.add(actionLabel); + + return panel; } class UserLabel extends BoldFontTextLabel { diff --git a/designer-base/src/com/fr/design/env/EnvGenerator.java b/designer-base/src/com/fr/design/env/EnvGenerator.java new file mode 100644 index 0000000000..c56ab92956 --- /dev/null +++ b/designer-base/src/com/fr/design/env/EnvGenerator.java @@ -0,0 +1,22 @@ +package com.fr.design.env; + +import com.fr.base.Env; +import com.fr.core.env.EnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; +import com.fr.dav.LocalEnv; +import com.fr.env.RemoteEnv; + +/** + * 根据配置生成运行环境 + */ +public class EnvGenerator { + public static Env generate(EnvConfig config) { + Env env = null; + if (config instanceof LocalEnvConfig) { + env = new LocalEnv((LocalEnvConfig)config); + } else if (config instanceof RemoteEnvConfig) { + env = new RemoteEnv((RemoteEnvConfig) config); + } + return env; + } +} diff --git a/designer-base/src/com/fr/design/env/RemoteEnvConfig.java b/designer-base/src/com/fr/design/env/RemoteEnvConfig.java new file mode 100644 index 0000000000..fc701d8ca7 --- /dev/null +++ b/designer-base/src/com/fr/design/env/RemoteEnvConfig.java @@ -0,0 +1,134 @@ +package com.fr.design.env; + +import com.fr.core.env.impl.AbstractEnvConfig; +import com.fr.general.Inter; +import com.fr.security.SecurityToolbox; +import com.fr.stable.AssistUtils; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; + + +public class RemoteEnvConfig extends AbstractEnvConfig { + + public static final int DEFAULT_RPC_PORT = 39999; + + private String host; + private int port; + private String username; + private String password; + + public RemoteEnvConfig() { + + } + + public RemoteEnvConfig(String host, int port, String username, String password) { + this.host = host; + this.port = port; + this.username = username; + this.password = password; + } + + @Override + public String getPath() { + return StableUtils.join(new Object[]{host, port}, ":"); + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + @Override + public String getDescription(String name) { + return username + "@" + name + "[" + Inter.getLocText("Fine-Designer_Basic_Remote_Env") + "]"; + } + + @Override + public void readXML(XMLableReader reader) { + super.readXML(reader); + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if ("Attr".equals(tagName)) { + this.host = reader.getAttrAsString("host", StringUtils.EMPTY); + this.port = reader.getAttrAsInt("port", DEFAULT_RPC_PORT); + this.username = reader.getAttrAsString("username", StringUtils.EMPTY); + String password = reader.getAttrAsString("password", StringUtils.EMPTY); + if (StringUtils.isNotEmpty(password)) { + this.password = SecurityToolbox.decrypt(password); + } + } else if ("Username".equals(tagName)) { + this.username = reader.getElementValue(); + } else if ("Password".equals(tagName)) { + String txt = reader.getElementValue(); + this.password = SecurityToolbox.decrypt(txt); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + super.writeXML(writer); + writer.startTAG("Attr") + .attr("host", host) + .attr("port", port); + writer.end(); + writer.startTAG("Username").textNode(username).end(); + if (StringUtils.isNotEmpty(password)) { + writer.startTAG("Password").textNode(SecurityToolbox.encrypt(password)).end(); + } + + } + + @Override + public boolean equals(Object o) { + return o instanceof RemoteEnvConfig + && AssistUtils.equals(((RemoteEnvConfig) o).host, host) + && AssistUtils.equals(((RemoteEnvConfig) o).port, port) + && AssistUtils.equals(((RemoteEnvConfig) o).username, username) + && AssistUtils.equals(((RemoteEnvConfig) o).password, password); + } + + @Override + public int hashCode() { + return AssistUtils.hashCode(host, port, username, password); + } + + @Override + public Object clone() throws CloneNotSupportedException { + RemoteEnvConfig cloned = (RemoteEnvConfig) super.clone(); + cloned.host = host; + cloned.port = port; + cloned.username = username; + cloned.password = password; + return cloned; + } +} diff --git a/designer-base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java b/designer-base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java index 2a4ef73f6c..ae2e6b52d8 100644 --- a/designer-base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java +++ b/designer-base/src/com/fr/design/gui/icombobox/FRTreeComboBox.java @@ -50,13 +50,14 @@ import com.fr.stable.Constants; import com.fr.stable.StringUtils; public class FRTreeComboBox extends UIComboBox { - - private static final int PAGE_DIFF = 5; - private static final int DEFAULT_HEIGHT = 120; - + + private static final int PAGE_DIFF = 5; + private static final int DEFAULT_HEIGHT = 120; + // richer:下拉展示用的tree protected JTree tree; private boolean onlyLeafSelectable = true; + private Object selectedObject = null; public FRTreeComboBox() { this(new JTree()); @@ -148,7 +149,7 @@ public class FRTreeComboBox extends UIComboBox { for (Enumeration e2 = pathnode.children(); e2.hasMoreElements(); ) { TreeNode n2 = (TreeNode) e2.nextElement(); TreePath path2 = path.pathByAddingChild(n2); - if (pathToString(path2).toUpperCase().startsWith(textField.getText().toUpperCase())) { + if (pathToString(path2).toUpperCase().contains(textField.getText().toUpperCase())) { tree.scrollPathToVisible(path2); tree.setSelectionPath(path2); isBreak = true; @@ -162,6 +163,7 @@ public class FRTreeComboBox extends UIComboBox { } public void setSelectedItem(Object o) { + selectedObject = o; if (o instanceof String) { this.setSelectedItemString((String) o); return; @@ -173,9 +175,13 @@ public class FRTreeComboBox extends UIComboBox { this.getModel().setSelectedItem(o); } } - + + public Object getSelectedItemObject() { + return selectedObject; + } + private boolean validTreePath(String treePath){ - return StringUtils.isNotEmpty(treePath) && treePath.charAt(0) == '[' && treePath.endsWith("]"); + return StringUtils.isNotEmpty(treePath) && treePath.charAt(0) == '[' && treePath.endsWith("]"); } protected String pathToString(TreePath path) { @@ -183,12 +189,7 @@ public class FRTreeComboBox extends UIComboBox { if (validTreePath(temp)) { temp = temp.substring(2, temp.length() - 1); String[] selectedtable = temp.split(","); - String table = selectedtable[selectedtable.length - 1].trim(); - if (table.contains(".")) { - String[] temp2 = table.split("\\."); - table = temp2[temp2.length - 1].trim(); - } - return table; + return selectedtable[selectedtable.length - 1].trim(); } return ""; } @@ -198,7 +199,7 @@ public class FRTreeComboBox extends UIComboBox { */ public void setSelectedItemString(String _name) { if (StringUtils.isBlank(_name)) { - this.setSelectedIndex(-1); + this.setSelectedIndex(-1); return; } DefaultTreeModel model = (DefaultTreeModel) this.tree.getModel(); @@ -237,26 +238,26 @@ public class FRTreeComboBox extends UIComboBox { } } - public void setPopSize(int width, int height) { - treePopup.setPopSize(width, height); - } + public void setPopSize(int width, int height) { + treePopup.setPopSize(width, height); + } private static TreePopup treePopup; private static class FRTreeComboBoxUI extends BasicComboBoxUI implements MouseListener{ - private boolean isRollover = false; + private boolean isRollover = false; - public FRTreeComboBoxUI() { - super(); - } + public FRTreeComboBoxUI() { + super(); + } protected ComboPopup createPopup() { treePopup = new TreePopup(comboBox); return treePopup; } @Override - protected UIButton createArrowButton() { - arrowButton = new UIButton(UIConstants.ARROW_DOWN_ICON){ + protected UIButton createArrowButton() { + arrowButton = new UIButton(UIConstants.ARROW_DOWN_ICON){ /** * 组件是否需要响应添加的观察者事件 * @@ -267,77 +268,77 @@ public class FRTreeComboBox extends UIComboBox { return false; } }; - ((UIButton) arrowButton).setRoundBorder(true, Constants.LEFT); - arrowButton.addMouseListener(this); - comboBox.addMouseListener(this); - return (UIButton) arrowButton; - } - - public void paint(Graphics g, JComponent c) { - super.paint(g, c); - Graphics2D g2d = (Graphics2D)g; - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - Color linecolor = null; - if (comboBox.isPopupVisible()) { - linecolor = UIConstants.LINE_COLOR; - arrowButton.setSelected(true); - } else if (isRollover) { - linecolor = UIConstants.LIGHT_BLUE; - } else { - linecolor = UIConstants.LINE_COLOR; - arrowButton.setSelected(false); - } - g2d.setColor(linecolor); - if (!comboBox.isPopupVisible()) { - g2d.drawRoundRect(0, 0, c.getWidth() - arrowButton.getWidth() + 3, c.getHeight() - 1, UIConstants.LARGEARC, UIConstants.LARGEARC); - } else { - g2d.drawRoundRect(0, 0, c.getWidth() , c.getHeight() + 3, UIConstants.LARGEARC, UIConstants.LARGEARC ); - g2d.drawLine(0, c.getHeight()-1, c.getWidth(), c.getHeight()-1); - } - } - - - - private void setRollover(boolean isRollover) { - if (this.isRollover != isRollover) { - this.isRollover = isRollover; - comboBox.repaint(); - } - } - - @Override - public void mouseEntered(MouseEvent e) { - setRollover(true); - } - - @Override - public void mouseExited(MouseEvent e) { - setRollover(false); - } - - @Override - public void mouseClicked(MouseEvent e) { - } - - @Override - public void mousePressed(MouseEvent e) { - - } - - @Override - public void mouseReleased(MouseEvent e) { - - } + ((UIButton) arrowButton).setRoundBorder(true, Constants.LEFT); + arrowButton.addMouseListener(this); + comboBox.addMouseListener(this); + return (UIButton) arrowButton; + } + + public void paint(Graphics g, JComponent c) { + super.paint(g, c); + Graphics2D g2d = (Graphics2D)g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color linecolor = null; + if (comboBox.isPopupVisible()) { + linecolor = UIConstants.LINE_COLOR; + arrowButton.setSelected(true); + } else if (isRollover) { + linecolor = UIConstants.LIGHT_BLUE; + } else { + linecolor = UIConstants.LINE_COLOR; + arrowButton.setSelected(false); + } + g2d.setColor(linecolor); + if (!comboBox.isPopupVisible()) { + g2d.drawRoundRect(0, 0, c.getWidth() - arrowButton.getWidth() + 3, c.getHeight() - 1, UIConstants.LARGEARC, UIConstants.LARGEARC); + } else { + g2d.drawRoundRect(0, 0, c.getWidth() , c.getHeight() + 3, UIConstants.LARGEARC, UIConstants.LARGEARC ); + g2d.drawLine(0, c.getHeight()-1, c.getWidth(), c.getHeight()-1); + } + } + + + + private void setRollover(boolean isRollover) { + if (this.isRollover != isRollover) { + this.isRollover = isRollover; + comboBox.repaint(); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + setRollover(true); + } + + @Override + public void mouseExited(MouseEvent e) { + setRollover(false); + } + + @Override + public void mouseClicked(MouseEvent e) { + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } } /** - * 添加弹出菜单监听 - * - * @param l 监听事件 - * - * @date 2015-1-22-下午5:04:00 - * - */ + * 添加弹出菜单监听 + * + * @param l 监听事件 + * + * @date 2015-1-22-下午5:04:00 + * + */ public void addPopupMenuListener(PopupMenuListener l) { treePopup.addPopupMenuListener(l); } @@ -367,8 +368,8 @@ public class FRTreeComboBox extends UIComboBox { * */ private static final long serialVersionUID = 1L; - private int defaultWidth = 0; - private int defaultHeight = 0; + private int defaultWidth = 0; + private int defaultHeight = 0; protected FRTreeComboBox comboBox; protected JScrollPane scrollPane; protected JTree tree; @@ -492,8 +493,8 @@ public class FRTreeComboBox extends UIComboBox { } protected void updatePopup() { - int width = defaultWidth == 0 ? this.comboBox.getSize().width : defaultWidth; - int height = defaultHeight == 0 ? DEFAULT_HEIGHT : defaultHeight; + int width = defaultWidth == 0 ? this.comboBox.getSize().width : defaultWidth; + int height = defaultHeight == 0 ? DEFAULT_HEIGHT : defaultHeight; this.setPreferredSize(new Dimension(width, height)); Object selectedObj = this.comboBox.getSelectedItem(); if (selectedObj instanceof TreePath) { @@ -502,10 +503,10 @@ public class FRTreeComboBox extends UIComboBox { } } - public void setPopSize(int width, int height) { - this.defaultWidth = width; - this.defaultHeight = height; - } + public void setPopSize(int width, int height) { + this.defaultWidth = width; + this.defaultHeight = height; + } protected class InvocationMouseHandler extends MouseAdapter { public void mousePressed(MouseEvent e) { @@ -533,7 +534,7 @@ public class FRTreeComboBox extends UIComboBox { private Object item; public FrTreeSearchComboBoxEditor(FRTreeComboBox comboBox) { - super(); + super(); this.comboBox = comboBox; textField.getDocument().addDocumentListener(this); textField.addKeyListener(this.treeKeyListener); @@ -582,7 +583,7 @@ public class FRTreeComboBox extends UIComboBox { public void setItem(Object item) { - this.item = item; + this.item = item; this.setting = true; textField.setText((item == null) ? "" : item.toString()); this.setting = false; diff --git a/designer-base/src/com/fr/design/gui/ispinner/UISpinner.java b/designer-base/src/com/fr/design/gui/ispinner/UISpinner.java index 24d0b1c1c4..c9c3988293 100644 --- a/designer-base/src/com/fr/design/gui/ispinner/UISpinner.java +++ b/designer-base/src/com/fr/design/gui/ispinner/UISpinner.java @@ -12,28 +12,14 @@ import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.stable.Constants; import com.fr.stable.StringUtils; -import javax.swing.ButtonModel; -import javax.swing.Icon; -import javax.swing.JComponent; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.plaf.ButtonUI; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.MouseWheelEvent; -import java.awt.event.MouseWheelListener; +import java.awt.*; +import java.awt.event.*; public class UISpinner extends JPanel implements UIObserver, GlobalNameObserver { diff --git a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java index 650712bb0f..32c95f672f 100644 --- a/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java +++ b/designer-base/src/com/fr/design/gui/itree/filetree/TemplateFileTree.java @@ -1,10 +1,12 @@ package com.fr.design.gui.itree.filetree; import com.fr.base.Env; +import com.fr.base.FRContext; import com.fr.base.operator.file.FileOperator; import com.fr.core.env.proxy.EnvProxy; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.file.filetree.FileNode; +import com.fr.general.web.ParameterConstants; import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; import com.fr.stable.StableUtils; @@ -102,8 +104,7 @@ public class TemplateFileTree extends EnvFileTree { } public FileNode[] listFile(String path) throws Exception { - String extra = EnvProxy.get(FileOperator.class).readExtraResourcePath(path); - return EnvProxy.get(FileOperator.class).list(extra, path); + return FRContext.getCurrentEnv().getFileOperator().list("reportlets", path); } /* diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index 628bf85710..470f4c32d6 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -4,11 +4,9 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.env.EnvUpdater; import com.fr.core.env.EnvConfig; -import com.fr.core.env.EnvContext; -import com.fr.core.env.resource.EnvConfigUtils; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; @@ -37,15 +35,14 @@ import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.MenuManager; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.event.EventDispatcher; import com.fr.file.FILE; import com.fr.file.FILEFactory; import com.fr.file.FileFILE; import com.fr.file.FileNodeFILE; import com.fr.general.ComparatorUtils; -import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.manage.PluginFilter; @@ -58,9 +55,23 @@ import com.fr.stable.StableUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; -import javax.swing.*; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLayeredPane; +import javax.swing.JMenuBar; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.WindowConstants; import javax.swing.border.MatteBorder; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Insets; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; @@ -84,9 +95,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import static com.fr.core.env.EnvEvent.AFTER_SIGN_OUT; -import static com.fr.core.env.EnvEvent.BEFORE_SIGN_OUT; - public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { public static final String DESIGNER_FRAME_NAME = "designer_frame"; public static final Dimension MIN_SIZE = new Dimension(100, 100); @@ -130,9 +138,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private WindowAdapter windowAdapter = new WindowAdapter() { public void windowOpened(WindowEvent e) { - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setComposite(); - reCalculateFrameSize(); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().doResize(); } @@ -265,6 +270,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } }); + this.addDesignerOpenedListener(new DesignerOpenedListener() { + @Override + public void designerOpened() { + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().setComposite(); + reCalculateFrameSize(); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().doResize(); + } + }); this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); this.setVisible(false); this.setExtendedState(JFrame.MAXIMIZED_BOTH); @@ -648,13 +661,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta defaultTitleSB.append(ProductConstants.PRODUCT_NAME); defaultTitleSB.append(" "); defaultTitleSB.append(ProductConstants.BRANCH); + defaultTitleSB.append(" "); // james:标识登录的用户和登录的ENV String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); EnvConfig env = DesignerEnvManager.getEnvManager().getEnv(envName); if (env != null) { - defaultTitleSB.append(EnvConfigUtils.getUsername(env)).append('@').append(envName).append('['); - defaultTitleSB.append(Inter.getLocText("Env-Remote_Server")); - defaultTitleSB.append(']'); + defaultTitleSB.append(env.getDescription(envName)); if (editingTemplate != null) { String path = editingTemplate.getEditingFILE().getPath(); if (!editingTemplate.getEditingFILE().exists()) { @@ -981,7 +993,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta DesignerEnvManager.getEnvManager().saveXMLFile(); - EnvContext.signOut(); + EnvUpdater.disconnect(); this.setVisible(false); this.dispose(); diff --git a/designer-base/src/com/fr/design/mainframe/TemplatePane.java b/designer-base/src/com/fr/design/mainframe/TemplatePane.java index 8d128ce5e3..5c539cd9bf 100644 --- a/designer-base/src/com/fr/design/mainframe/TemplatePane.java +++ b/designer-base/src/com/fr/design/mainframe/TemplatePane.java @@ -1,40 +1,34 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; +import com.fr.base.env.Callback; +import com.fr.base.env.EnvUpdater; import com.fr.core.env.EnvConfig; -import com.fr.dav.LocalEnv; +import com.fr.core.env.impl.LocalEnvConfig; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.InformationWarnPane; +import com.fr.design.env.EnvGenerator; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.utils.DesignUtils; import com.fr.env.EnvListPane; import com.fr.env.RemoteEnv; -import com.fr.env.SignIn; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.stable.EnvChangedListener; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; -import javax.swing.BorderFactory; -import javax.swing.Icon; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.GradientPaint; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; +import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -121,27 +115,23 @@ public class TemplatePane extends JPanel implements MouseListener { } private boolean envListOkAction(EnvListPane envListPane) { - String selectedName = envListPane.updateEnvManager(); + final String selectedName = envListPane.updateEnvManager(); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); EnvConfig selectedEnv = envManager.getEnv(selectedName); GeneralContext.fireEnvWillChangeListener(); try { - //如果是远程的还要先测试下,如果失败就不切换 - if (selectedEnv instanceof RemoteEnv) { - if (!((RemoteEnv) selectedEnv).testServerConnection()) { + EnvUpdater.updateEnv(EnvGenerator.generate(selectedEnv), new Callback() { + @Override + public void fail() { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - return false; - } else { - String remoteVersion = getDesignerVersion(selectedEnv); - if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { - String infor = Inter.getLocText("Server-version-tip"); - String moreInfo = Inter.getLocText("Server-version-tip-moreInfo"); - new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); - return false; - } } - } - SignIn.signIn(selectedEnv); + + @Override + public void success() { + DesignerEnvManager.getEnvManager().setCurEnvName(selectedName); + DesignUtils.refreshDesignerFrame(); + } + }); JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (template != null) { template.refreshToolArea(); @@ -185,11 +175,12 @@ public class TemplatePane extends JPanel implements MouseListener { } private void setJLabel(String name) { - if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof LocalEnv) { - envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); + EnvConfig config = DesignerEnvManager.getEnvManager().getEnv(name); + if (config instanceof LocalEnvConfig) { + envLabel.setIcon(IOUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); - } else if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof RemoteEnv) { - envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); + } else if (config instanceof RemoteEnvConfig) { + envLabel.setIcon(IOUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); } envLabel.setText(name); envLabel.repaint(); diff --git a/designer-base/src/com/fr/design/mainframe/form/FormECDesignerProvider.java b/designer-base/src/com/fr/design/mainframe/form/FormECDesignerProvider.java index d7d59ad985..27b4a249aa 100644 --- a/designer-base/src/com/fr/design/mainframe/form/FormECDesignerProvider.java +++ b/designer-base/src/com/fr/design/mainframe/form/FormECDesignerProvider.java @@ -20,7 +20,7 @@ public interface FormECDesignerProvider { * 选中目标的 对应Menu * @return 返回MenuDef数组. */ - MenuDef[] menus4Target(); + MenuDef[] menus4Target(); /** * 获取焦点 @@ -31,7 +31,7 @@ public interface FormECDesignerProvider { * 工具栏菜单字体字号等 * @return 工具栏菜单数组 */ - ToolBarDef[] toolbars4Target(); + ToolBarDef[] toolbars4Target(); /** * 表单的报表块的工具按钮复制剪切那行 @@ -43,25 +43,25 @@ public interface FormECDesignerProvider { * 模板菜单 * @return 返回菜单 */ - ShortCut[] shortcut4TemplateMenu(); + ShortCut[] shortcut4TemplateMenu(); /** *当前正在编辑的elementcase * @return 当前正在编辑的elementcase */ - FormElementCaseProvider getEditingElementCase(); + FormElementCaseProvider getEditingElementCase(); /** * 右上角属性表 * @return 属性面板 */ - JComponent getEastDownPane(); + JComponent getEastDownPane(); /** * 右下角控件树或者扩展属性 * @return 属性面板 */ - JComponent getEastUpPane(); + JComponent getEastUpPane(); /** * 条件属性面板 @@ -87,6 +87,7 @@ public interface FormECDesignerProvider { * @param elementCaseContainerSize 缩略图的大小 * @return 图 */ - BufferedImage getElementCaseImage(Dimension elementCaseContainerSize); + BufferedImage getElementCaseImage(Dimension elementCaseContainerSize); + void refreshPropertyPane(); } \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java b/designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java index 2da090c1ee..957d9f83ac 100644 --- a/designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java +++ b/designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java @@ -1,14 +1,18 @@ package com.fr.design.mainframe.loghandler.socketio; +import com.fr.base.Env; +import com.fr.base.FRContext; import com.fr.config.ConfigEvent; import com.fr.config.Configuration; import com.fr.core.env.EnvConfig; import com.fr.core.env.EnvConstants; import com.fr.core.env.EnvContext; import com.fr.core.env.EnvEvent; -import com.fr.core.env.resource.LocalEnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; import com.fr.decision.webservice.utils.DecisionServiceConstants; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.mainframe.loghandler.DesignerLogHandler; +import com.fr.env.RemoteEnv; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -66,14 +70,14 @@ public class DesignerSocketIO { } private static void updateSocket() { - EnvConfig env = EnvContext.currentEnv(); - if (env instanceof LocalEnvConfig) { + Env env = FRContext.getCurrentEnv(); + if (env.isLocalEnv()) { return; } - try { + RemoteEnvConfig config = ((RemoteEnv)env).getEnvConfig(); String uri = String.format("http://%s:%s%s?%s=%s", - new URL(env.getPath()).getHost(), + config.getHost(), WebSocketConfig.getInstance().getPort(), EnvConstants.WS_NAMESPACE, DecisionServiceConstants.WEB_SOCKET_TOKEN_NAME, diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 22cf51abab..60b010b4c4 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -7,8 +7,6 @@ import com.fr.base.FeedBackInfo; import com.fr.base.ServerConfig; import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; -import com.fr.core.env.EnvConfig; -import com.fr.core.env.EnvContext; import com.fr.dav.DavXMLUtils; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -31,11 +29,8 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.ServerStarter; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import java.awt.Desktop; -import java.awt.Font; +import javax.swing.*; +import java.awt.*; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; @@ -187,30 +182,6 @@ public class DesignUtils { }); } - /** - * 当前的报表运行环境切换到env - * - * @param env 需要切换去的环境 - */ - public static void switchToEnv(EnvConfig env) { - if (env == null) { - return; - } - - // 看一下这个env在DesignerEnvManager里面有没有对应的,有的话就setCurrentEnvName - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - java.util.Iterator nameIt = envManager.getEnvNameIterator(); - while (nameIt.hasNext()) { - String name = nameIt.next(); - if (ComparatorUtils.equals(envManager.getEnv(name), env)) { - envManager.setCurEnvName(name); - break; - } - } - EnvContext.signIn(env); - refreshDesignerFrame(); - } - public static void refreshDesignerFrame() { // 刷新DesignerFrame里面的面板 diff --git a/designer-base/src/com/fr/design/widget/EventCreator.java b/designer-base/src/com/fr/design/widget/EventCreator.java index 84f6120a75..87275d8435 100644 --- a/designer-base/src/com/fr/design/widget/EventCreator.java +++ b/designer-base/src/com/fr/design/widget/EventCreator.java @@ -26,21 +26,21 @@ public class EventCreator extends NameableSelfCreator { } public static EventCreator[] createEventCreator(String[] supportedEvents, Class updatePane) { - EventCreator[] creators = new EventCreator[supportedEvents.length]; - - for (int i = 0; i < supportedEvents.length; i++) { - creators[i] = new EventCreator(supportedEvents[i], updatePane); + EventCreator[] creators = new EventCreator[supportedEvents.length]; + + for (int i = 0; i < supportedEvents.length; i++) { + creators[i] = new EventCreator(supportedEvents[i], updatePane); } return creators; } /* - * richer:国际化事件名称,所有需要国际化的事件都应按格式Event-eventName来进行国际化 + * richer:国际化事件名称,所有需要国际化的事件都应按格式FR-Engine_Event_eventName来进行国际化 */ public static final String switchLang(String eventName) { try { - return Inter.getLocText("Event-" + eventName); + return Inter.getLocText("FR-Engine_Event_" + eventName); } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); return eventName; diff --git a/designer-base/src/com/fr/env/EnvListPane.java b/designer-base/src/com/fr/env/EnvListPane.java index 92bab2929e..6146b5d5d5 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -1,8 +1,8 @@ package com.fr.env; import com.fr.core.env.EnvConfig; -import com.fr.core.env.resource.LocalEnvConfig; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; diff --git a/designer-base/src/com/fr/env/LocalEnvPane.java b/designer-base/src/com/fr/env/LocalEnvPane.java index 57f37d1cd3..d5dce6a1a3 100644 --- a/designer-base/src/com/fr/env/LocalEnvPane.java +++ b/designer-base/src/com/fr/env/LocalEnvPane.java @@ -1,6 +1,6 @@ package com.fr.env; -import com.fr.core.env.resource.LocalEnvConfig; +import com.fr.core.env.impl.LocalEnvConfig; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index 2fbd34d417..3e00e8d1ba 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -2,6 +2,7 @@ package com.fr.env; import com.fr.base.EnvException; import com.fr.base.TableData; +import com.fr.base.operator.common.CommonOperator; import com.fr.base.operator.connect.ConnectOperator; import com.fr.base.operator.file.FileOperator; import com.fr.base.remote.RemoteDeziConstants; @@ -9,7 +10,7 @@ import com.fr.common.rpc.RemoteCallServerConfig; import com.fr.common.rpc.netty.MessageSendExecutor; import com.fr.common.rpc.netty.RemoteCallClient; import com.fr.core.env.EnvContext; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.design.env.RemoteEnvConfig; import com.fr.data.TableDataSource; import com.fr.data.impl.EmbeddedTableData; import com.fr.data.impl.storeproc.StoreProcedure; @@ -86,13 +87,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAut this.config = config; } - public RemoteEnv(String path, String userName, String password) { - config = new RemoteEnvConfig(path, userName, password); - } - @Override public void connect() throws Exception { - + RemoteCallClient.getInstance().load(config.getHost(), config.getPort(), RemoteCallServerConfig.getInstance().getSerializeProtocol()); } @Override @@ -121,6 +118,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAut return MessageSendExecutor.getInstance().execute(FileOperator.class); } + @Override + public CommonOperator getCommonOperator() throws Exception { + return MessageSendExecutor.getInstance().execute(CommonOperator.class); + } + + @Override + public RemoteEnvConfig getEnvConfig() { + return config; + } + @Override public String getPath() { return config.getPath(); @@ -140,6 +147,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAut return EnvContext.currentToken(); } + @Override + public boolean isLocalEnv() { + return false; + } + /** * execute method之后,取返回的 InputStream */ diff --git a/designer-base/src/com/fr/env/RemoteEnvPane.java b/designer-base/src/com/fr/env/RemoteEnvPane.java index 1e13d7e4b5..6028dc6eee 100644 --- a/designer-base/src/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/com/fr/env/RemoteEnvPane.java @@ -2,7 +2,7 @@ package com.fr.env; import com.fr.base.FRContext; import com.fr.core.env.resource.EnvConfigUtils; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.beans.BasicBeanPane; import com.fr.design.border.UITitledBorder; @@ -280,8 +280,9 @@ public class RemoteEnvPane extends BasicBeanPane { String path = remoteEnvURL.getURL(); String user = this.usernameInput.getText(); String password = new String(this.passwordInput.getPassword()); + return null; - return new RemoteEnvConfig(path, user, password); + //return new RemoteEnvConfig(path, user, password); } @Override @@ -471,7 +472,8 @@ public class RemoteEnvPane extends BasicBeanPane { private boolean testConnection() { String url = remoteEnvURL.getURL(); - RemoteEnv env = new RemoteEnv(url, usernameInput.getText(), new String(passwordInput.getPassword())); + //RemoteEnv env = new RemoteEnv(url, usernameInput.getText(), new String(passwordInput.getPassword())); + RemoteEnv env = null; boolean connect = false; try { if (StringUtils.isNotEmpty(url)) { diff --git a/designer-base/src/com/fr/env/RemoteEnvPane2.java b/designer-base/src/com/fr/env/RemoteEnvPane2.java index 11bd73cef2..6263969e0e 100644 --- a/designer-base/src/com/fr/env/RemoteEnvPane2.java +++ b/designer-base/src/com/fr/env/RemoteEnvPane2.java @@ -1,6 +1,6 @@ package com.fr.env; -import com.fr.core.env.resource.RemoteEnvConfig; +import com.fr.design.env.RemoteEnvConfig; import com.fr.design.beans.BasicBeanPane; import com.fr.design.border.UITitledBorder; import com.fr.design.gui.ibutton.UIButton; @@ -12,14 +12,14 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; -import com.fr.log.FineLoggerFactory; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.concurrent.ExecutionException; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; /** * 远程环境设置界面,暂时命名为2,待做完功能直接替代掉老的RemoteEnvPane @@ -30,6 +30,10 @@ public class RemoteEnvPane2 extends BasicBeanPane { private UIIntNumberField portTextField; private UITextField usernameTextField; private UIPassWordField passwordTextField; + private JDialog dialog; + private UILabel message; + private UIButton okButton; + private UIButton cancelButton; public RemoteEnvPane2() { initComponents(); @@ -73,46 +77,82 @@ public class RemoteEnvPane2 extends BasicBeanPane { } }); contentPanel.add(valuePane, BorderLayout.CENTER); + + message = new UILabel(); + okButton = new UIButton(Inter.getLocText("OK")); + cancelButton = new UIButton(Inter.getLocText("Cancel")); } private void tryConnectRemoteEnv() { - final RemoteEnv remoteEnv = new RemoteEnv(this.updateBean()); - new SwingWorker() { + final SwingWorker worker = new SwingWorker() { @Override protected Void doInBackground() throws Exception { + final RemoteEnv remoteEnv = new RemoteEnv(updateBean()); remoteEnv.connectOnce(); return null; } @Override protected void done() { + okButton.setEnabled(true); try { get(); - showConnectMessage(); + message.setText(Inter.getLocText("Fine-Designer_Basic_Remote_Connect_Successful")); } catch (Exception e) { - showCannotConnectMessage(); + message.setText(Inter.getLocText("Fine-Designer_Basic_Remote_Connect_Failed")); } } - }.execute(); - } + }; + worker.execute(); + initMessageDialog(); + okButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + } + }); + cancelButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dialog.dispose(); + worker.cancel(true); + } + }); - private void showCannotConnectMessage() { - JOptionPane.showMessageDialog( - this, - Inter.getLocText("Fine-Designer_Basic_Remote_Connect_Failed"), - UIManager.getString("OptionPane.messageDialogTitle", this.getLocale()), - JOptionPane.ERROR_MESSAGE - ); + dialog.addWindowListener(new WindowAdapter() { + public void windowClosed(WindowEvent e) { + worker.cancel(true); + } + }); + + dialog.setVisible(true); + dialog.dispose(); } - private void showConnectMessage() { - JOptionPane.showMessageDialog( - this, - Inter.getLocText("Fine-Designer_Basic_Remote_Connect_Successful"), - UIManager.getString("OptionPane.messageDialogTitle", this.getLocale()), - JOptionPane.INFORMATION_MESSAGE - ); + private void initMessageDialog() { + message.setText(Inter.getLocText("Fine-Designer_Basic_Remote_Env_Try") + "..."); + message.setBorder(BorderFactory.createEmptyBorder(8, 5, 0, 0)); + okButton.setEnabled(false); + + dialog = new JDialog((Dialog) SwingUtilities.getWindowAncestor(RemoteEnvPane2.this), Inter.getLocText("Datasource-Test_Connection"), true); + + dialog.setSize(new Dimension(268, 118)); + okButton.setEnabled(false); + JPanel jp = new JPanel(); + JPanel upPane = new JPanel(); + JPanel downPane = new JPanel(); + UILabel uiLabel = new UILabel(UIManager.getIcon("OptionPane.informationIcon")); + upPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); + upPane.add(uiLabel); + upPane.add(message); + downPane.setLayout(new FlowLayout(FlowLayout.CENTER, 6, 0)); + downPane.add(okButton); + downPane.add(cancelButton); + jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS)); + jp.add(upPane); + jp.add(downPane); + dialog.add(jp); + dialog.setResizable(false); + dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(RemoteEnvPane2.this)); } @Override @@ -125,7 +165,7 @@ public class RemoteEnvPane2 extends BasicBeanPane { if (config == null) { return; } - hostTextField.setText(config.getPath()); + hostTextField.setText(config.getHost()); if (config.getPort() != 0) { portTextField.setValue(config.getPort()); } diff --git a/designer-base/src/com/fr/env/SignIn.java b/designer-base/src/com/fr/env/SignIn.java index b76c67853a..3b36bf5147 100644 --- a/designer-base/src/com/fr/env/SignIn.java +++ b/designer-base/src/com/fr/env/SignIn.java @@ -1,24 +1,17 @@ package com.fr.env; -import com.fr.base.operator.connect.ConnectOperator; -import com.fr.common.rpc.RemoteCallServerConfig; -import com.fr.common.rpc.netty.RemoteCallClient; -import com.fr.common.rpc.serialize.SerializeProtocol; +import com.fr.base.Env; +import com.fr.base.FRContext; import com.fr.core.env.EnvConfig; -import com.fr.core.env.EnvContext; import com.fr.core.env.EnvEvent; -import com.fr.core.env.proxy.EnvMessageSendProxy; -import com.fr.core.env.resource.RemoteEnvConfig; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.utils.DesignUtils; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; import com.fr.event.Null; -import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import com.fr.third.guava.reflect.Reflection; +import com.fr.stable.AssistUtils; import javax.swing.JOptionPane; @@ -41,26 +34,10 @@ public class SignIn { * @throws Exception 异常 */ public static void signIn(EnvConfig selectedEnv) throws Exception { - SerializeProtocol serializeProtocol = RemoteCallServerConfig.getInstance().getSerializeProtocol(); - - if (EnvContext.currentEnv() != null && !ComparatorUtils.equals(EnvContext.currentEnv(), selectedEnv)) { - EnvContext.signOut(); - } - if (selectedEnv instanceof RemoteEnvConfig) { - RemoteCallClient.getInstance().load( - ((RemoteEnvConfig) selectedEnv).getHost(), - ((RemoteEnvConfig) selectedEnv).getPort(), - serializeProtocol); + Env env = FRContext.getCurrentEnv(); + if (env != null && AssistUtils.equals(env.getEnvConfig(), selectedEnv)) { + env.disconnect(); } - DesignUtils.switchToEnv(selectedEnv); - } - - public static void main(String[] args) { - RemoteCallClient.getInstance().load( - "127.0.0.1", - 39999, - SerializeProtocol.KRYOSERIALIZE); - ConnectOperator connectOperator = Reflection.newProxy(ConnectOperator.class, new EnvMessageSendProxy()); - connectOperator.connect("1", "1"); + //DesignUtils.switchToEnv(selectedEnv); } } \ No newline at end of file diff --git a/designer-base/src/com/fr/start/BaseDesigner.java b/designer-base/src/com/fr/start/BaseDesigner.java index 2a5f0af50a..6648d9c7a6 100644 --- a/designer-base/src/com/fr/start/BaseDesigner.java +++ b/designer-base/src/com/fr/start/BaseDesigner.java @@ -23,11 +23,13 @@ import com.fr.log.FineLoggerFactory; import com.fr.module.ModuleEvent; import com.fr.stable.OperatingSystem; -import java.awt.*; +import java.awt.Window; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.lang.reflect.Method; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** * The main class of Report Designer. @@ -51,14 +53,21 @@ public abstract class BaseDesigner extends ToolBarMenuDock { DesignerEnvManager.loadLogSetting(); createDesignerFrame(); } - - public void show(String[] args) { - - collectUserInformation(); - showDesignerFrame(args, DesignerContext.getDesignerFrame(), false); - for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) { - TemplateTreePane.getInstance().getTemplateFileTree().refresh(); - } + + public void show(final String[] args) { + ExecutorService executorService = Executors.newSingleThreadExecutor(); + executorService.submit(new Runnable() { + @Override + public void run() { + collectUserInformation(); + showDesignerFrame(args, DesignerContext.getDesignerFrame(), false); + for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) { + TemplateTreePane.getInstance().getTemplateFileTree().refresh(); + } + } + }); + executorService.shutdown(); + DesignerContext.getDesignerFrame().setVisible(true); } @@ -134,7 +143,6 @@ public abstract class BaseDesigner extends ToolBarMenuDock { df.getSelectedJTemplate().requestGridFocus(); } }); - df.setVisible(true); return isException; } diff --git a/designer-base/src/com/fr/start/ServerStarter.java b/designer-base/src/com/fr/start/ServerStarter.java index 027c1fdba3..1dc8cf8f14 100644 --- a/designer-base/src/com/fr/start/ServerStarter.java +++ b/designer-base/src/com/fr/start/ServerStarter.java @@ -2,16 +2,17 @@ package com.fr.start; import com.fr.base.FRContext; import com.fr.base.ServerConfig; +import com.fr.base.env.EnvUpdater; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.env.EnvGenerator; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.mainframe.DesignerContext; import com.fr.env.RemoteEnv; -import com.fr.env.SignIn; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; @@ -52,9 +53,8 @@ public class ServerStarter { @Override public void doOk() { - try { - SignIn.signIn(DesignerEnvManager.getEnvManager().getDefaultEnv()); + EnvUpdater.updateEnv(EnvGenerator.generate(DesignerEnvManager.getEnvManager().getDefaultEnv())); TemplateTreePane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); } catch (Exception e) { diff --git a/designer-base/src/com/fr/start/server/FineEmbedServerActivator.java b/designer-base/src/com/fr/start/server/FineEmbedServerActivator.java index b7aa95cb2e..a4f3888337 100644 --- a/designer-base/src/com/fr/start/server/FineEmbedServerActivator.java +++ b/designer-base/src/com/fr/start/server/FineEmbedServerActivator.java @@ -11,6 +11,7 @@ import com.fr.third.springframework.web.SpringServletContainerInitializer; import com.fr.third.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; +import org.apache.catalina.Wrapper; import org.apache.catalina.loader.VirtualWebappLoader; import org.apache.catalina.startup.Tomcat; @@ -57,7 +58,7 @@ public class FineEmbedServerActivator extends Activator { String docBase = new File(FRContext.getCurrentEnv().getPath()).getParent(); String appName = "/" + FRContext.getCurrentEnv().getAppName(); Context context = tomcat.addContext(appName, docBase); - tomcat.addServlet(appName, "default", "org.apache.catalina.servlets.DefaultServlet"); + addDefaultServlet(context); //覆盖tomcat的WebAppClassLoader context.setLoader(new FRTomcatLoader()); @@ -68,6 +69,19 @@ public class FineEmbedServerActivator extends Activator { context.addServletContainerInitializer(initializer, classes); } + private void addDefaultServlet(Context context) { + + Wrapper defaultServlet = context.createWrapper(); + defaultServlet.setName("default"); + defaultServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet"); + defaultServlet.addInitParameter("debug", "0"); + defaultServlet.addInitParameter("listings", "false"); + defaultServlet.setLoadOnStartup(1); + defaultServlet.setOverridable(true); + context.addChild(defaultServlet); + context.addServletMapping("/","default"); + } + private void stopServerActivator() { diff --git a/designer-form/src/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/com/fr/design/designer/beans/models/SelectionModel.java index fe94edc3b2..c7121f0e16 100644 --- a/designer-form/src/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/com/fr/design/designer/beans/models/SelectionModel.java @@ -65,6 +65,19 @@ public class SelectionModel { if (e.getButton() == MouseEvent.BUTTON3 || (!InputEventBaseOnOS.isControlDown(e) && !e.isShiftDown())) { // 如果Ctrl或者Shift键盘没有按下,则清除已经选择的组件 selection.reset(); + } else { + //按下Ctrl或者shift键时鼠标可以进行多选,两次点击同一控件就取消选中 + XCreator comp = designer.getComponentAt(e); + XLayoutContainer topLayout = XCreatorUtils.getHotspotContainer(comp).getTopLayout(); + if (topLayout != null && !topLayout.isEditable()) { + comp = topLayout; + } + XLayoutContainer container = XCreatorUtils.getParentXLayoutContainer(comp); + for (XCreator selected : selection.getSelectedCreators()) { + if (selected == comp || XCreatorUtils.getParentXLayoutContainer(selected) != container) { + selection.removeCreator(selected); + } + } } // 获取e所在的组件 XCreator comp = designer.getComponentAt(e); diff --git a/designer-form/src/com/fr/design/designer/creator/XMultiFileUploader.java b/designer-form/src/com/fr/design/designer/creator/XMultiFileUploader.java index 7640f99e7e..d370f43f14 100644 --- a/designer-form/src/com/fr/design/designer/creator/XMultiFileUploader.java +++ b/designer-form/src/com/fr/design/designer/creator/XMultiFileUploader.java @@ -3,23 +3,24 @@ */ package com.fr.design.designer.creator; -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.beans.IntrospectionException; - -import javax.swing.JComponent; -import com.fr.design.gui.ilable.UILabel; -import javax.swing.JPanel; - import com.fr.base.BaseUtils; +import com.fr.design.designer.properties.mobile.MultiFileUploaderPropertyUI; +import com.fr.design.form.util.XCreatorConstants; +import com.fr.design.fun.WidgetPropertyUIProvider; import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.form.ui.MultiFileEditor; -import com.fr.design.form.util.XCreatorConstants; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; +import javax.swing.JComponent; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.beans.IntrospectionException; + /** * @author richer * @since 6.5.3 @@ -29,22 +30,22 @@ public class XMultiFileUploader extends XFieldEditor { public XMultiFileUploader(MultiFileEditor widget, Dimension initSize) { super(widget, initSize); } - - @Override + + @Override public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { return (CRPropertyDescriptor[]) ArrayUtils.addAll( - super.supportedDescriptor(), - new CRPropertyDescriptor[]{ - new CRPropertyDescriptor("singleFile", this.data.getClass()) - .setI18NName(Inter.getLocText("SINGLE_FILE_UPLOAD")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("accept", this.data.getClass()) - .setI18NName(Inter.getLocText("File-Allow_Upload_Files")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), - new CRPropertyDescriptor("maxSize", this.data.getClass()) - .setI18NName(Inter.getLocText("File-File_Size_Limit")) - .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") - }); + super.supportedDescriptor(), + new CRPropertyDescriptor[]{ + new CRPropertyDescriptor("singleFile", this.data.getClass()) + .setI18NName(Inter.getLocText("SINGLE_FILE_UPLOAD")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("accept", this.data.getClass()) + .setI18NName(Inter.getLocText("File-Allow_Upload_Files")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced"), + new CRPropertyDescriptor("maxSize", this.data.getClass()) + .setI18NName(Inter.getLocText("File-File_Size_Limit")) + .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Advanced") + }); } @Override @@ -93,4 +94,9 @@ public class XMultiFileUploader extends XFieldEditor { protected String getIconName() { return "files_up.png"; } + + @Override + public WidgetPropertyUIProvider[] getWidgetPropertyUIProviders() { + return new WidgetPropertyUIProvider[]{ new MultiFileUploaderPropertyUI(this)}; + } } \ No newline at end of file diff --git a/designer-form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java b/designer-form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java index d0ab8cbdf7..473e8a2b3a 100644 --- a/designer-form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java +++ b/designer-form/src/com/fr/design/designer/creator/XWAbsoluteBodyLayout.java @@ -5,17 +5,13 @@ import com.fr.design.designer.beans.adapters.layout.FRAbsoluteBodyLayoutAdapter; import com.fr.design.designer.properties.mobile.BodyMobilePropertyUI; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.fun.WidgetPropertyUIProvider; -import com.fr.design.mainframe.widget.editors.PaddingMarginEditor; import com.fr.design.mainframe.widget.editors.WLayoutBorderStyleEditor; -import com.fr.design.mainframe.widget.renderer.LayoutBorderStyleRenderer; -import com.fr.design.mainframe.widget.renderer.PaddingMarginCellRenderer; -import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WAbsoluteBodyLayout; -import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.core.PropertyChangeAdapter; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; import java.beans.IntrospectionException; /** @@ -127,4 +123,11 @@ public class XWAbsoluteBodyLayout extends XWAbsoluteLayout { return false; } + /** + * 是否支持共享-body不支持共享 + * @return + */ + public boolean isSupportShared() { + return false; + } } diff --git a/designer-form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java b/designer-form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java index a8f6d2d5e3..3cfc9a4266 100644 --- a/designer-form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java +++ b/designer-form/src/com/fr/design/designer/creator/cardlayout/XWCardMainBorderLayout.java @@ -4,6 +4,8 @@ package com.fr.design.designer.creator.cardlayout; import com.fr.base.GraphHelper; +import com.fr.base.iofileattr.SharableAttrMark; +import com.fr.design.constants.UIConstants; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.ComponentAdapter; import com.fr.design.designer.beans.LayoutAdapter; @@ -16,8 +18,10 @@ import com.fr.design.designer.creator.XWBorderLayout; import com.fr.design.designer.creator.XWidgetCreator; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.icon.IconPathConstants; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.EditingMouseListener; import com.fr.design.mainframe.FormDesigner; +import com.fr.design.mainframe.WidgetHelpDialog; import com.fr.design.mainframe.WidgetPropertyPane; import com.fr.form.event.Listener; import com.fr.form.ui.LayoutBorderStyle; @@ -33,8 +37,10 @@ import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.general.Inter; +import com.fr.share.ShareConstants; import com.fr.stable.Constants; +import javax.swing.Icon; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; @@ -44,6 +50,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; +import java.awt.RenderingHints; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; @@ -58,6 +65,7 @@ import java.util.List; */ public class XWCardMainBorderLayout extends XWBorderLayout { + private Icon controlMode = IOUtils.readIcon(IconPathConstants.TD_EL_SHARE_HELP_ICON_PATH); private static final int CENTER = 1; private static final int NORTH = 0; private static final int TITLE_STYLE = 2; @@ -358,9 +366,21 @@ public class XWCardMainBorderLayout extends XWBorderLayout { ); g2d.setColor(Color.WHITE); //画编辑文字 + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawString(Inter.getLocText("FR-Designer_Edit"), x + w / 2 - 2, y + h / 2 + 5); g.setColor(XCreatorConstants.FORM_BORDER_COLOR); GraphHelper.draw(g, new Rectangle(BORDER_WIDTH, BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, getHeight() - BORDER_WIDTH * 2), Constants.LINE_MEDIUM); + paintExtro(g); + } + } + + public void paintExtro(Graphics g) { + if (this.toData().getWidgetAttrMark(SharableAttrMark.XML_TAG) != null) { + int width = getWidth() - ShareConstants.SHARE_EL_CONTROL_BUTTON_HW; + g.setColor(UIConstants.NORMAL_BACKGROUND); + g.fillArc(width, 0, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, ShareConstants.SHARE_EL_CONTROL_BUTTON_HW, + 0, 360); + controlMode.paintIcon(this, g, width, 0); } } @@ -379,6 +399,11 @@ public class XWCardMainBorderLayout extends XWBorderLayout { */ @Override public void respondClick(EditingMouseListener editingMouseListener, MouseEvent e){ + //帮助弹窗 + if (this.isHelpBtnOnFocus()) { + new WidgetHelpDialog(DesignerContext.getDesignerFrame(), this.toData().getDescription()).showWindow(e); + return; + } FormDesigner designer = editingMouseListener.getDesigner(); SelectionModel selectionModel = editingMouseListener.getSelectionModel(); boolean isEditing = e.getButton() == MouseEvent.BUTTON1 && @@ -455,4 +480,12 @@ public class XWCardMainBorderLayout extends XWBorderLayout { return new FRCardMainBorderLayoutAdapter(this); } + /** + * 是否支持共享-现只支持报表块、图表、tab块、绝对布局 + * @return + */ + public boolean isSupportShared() { + return true; + } + } \ No newline at end of file diff --git a/designer-form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java b/designer-form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java index 81c402e42a..133175878c 100644 --- a/designer-form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java +++ b/designer-form/src/com/fr/design/designer/properties/mobile/BodyMobilePropertyUI.java @@ -6,6 +6,7 @@ import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.dialog.BasicPane; import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.design.widget.ui.designer.mobile.BodyMobileDefinePane; import com.fr.general.Inter; /** @@ -25,12 +26,12 @@ public class BodyMobilePropertyUI extends AbstractWidgetPropertyUIProvider { @Override public AbstractPropertyTable createWidgetAttrTable() { - return new BodyAppRelayoutTable(xCreator); + return null; } @Override public BasicPane createWidgetAttrPane() { - return null; + return new BodyMobileDefinePane(xCreator); } @Override diff --git a/designer-form/src/com/fr/design/designer/properties/mobile/MultiFileUploaderPropertyUI.java b/designer-form/src/com/fr/design/designer/properties/mobile/MultiFileUploaderPropertyUI.java new file mode 100644 index 0000000000..8e8ea896fc --- /dev/null +++ b/designer-form/src/com/fr/design/designer/properties/mobile/MultiFileUploaderPropertyUI.java @@ -0,0 +1,36 @@ +package com.fr.design.designer.properties.mobile; + +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XMultiFileUploader; +import com.fr.design.dialog.BasicPane; +import com.fr.design.fun.impl.AbstractWidgetPropertyUIProvider; +import com.fr.design.gui.itable.AbstractPropertyTable; +import com.fr.design.widget.ui.designer.mobile.MultiFileUploaderDefinePane; +import com.fr.general.Inter; + +/** + * Created by plough on 2018/4/19. + */ +public class MultiFileUploaderPropertyUI extends AbstractWidgetPropertyUIProvider { + + private XCreator xCreator; + + public MultiFileUploaderPropertyUI(XMultiFileUploader xMultiFileUploader) { + this.xCreator = xMultiFileUploader; + } + + @Override + public AbstractPropertyTable createWidgetAttrTable() { + return null; + } + + @Override + public BasicPane createWidgetAttrPane() { + return new MultiFileUploaderDefinePane(xCreator); + } + + @Override + public String tableTitle() { + return Inter.getLocText("FR-Designer_Mobile-Attr"); + } +} diff --git a/designer-form/src/com/fr/design/form/mobile/FormMobileAttrPane.java b/designer-form/src/com/fr/design/form/mobile/FormMobileAttrPane.java index a2650d8069..227962e382 100644 --- a/designer-form/src/com/fr/design/form/mobile/FormMobileAttrPane.java +++ b/designer-form/src/com/fr/design/form/mobile/FormMobileAttrPane.java @@ -17,6 +17,8 @@ public class FormMobileAttrPane extends BasicBeanPane{ private MobileToolBarPane mobileToolBarPane; // 模版设置面板 private FormMobileTemplateSettingsPane formMobileTemplateSettingsPane; + // 其他 + private FormMobileOthersPane formMobileOthersPane; private static final int PADDING = 10; @@ -26,18 +28,18 @@ public class FormMobileAttrPane extends BasicBeanPane{ private void initComponents() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); - JPanel mobileToolBarPaneWrapper = new JPanel(new BorderLayout()); - mobileToolBarPaneWrapper.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, 0, PADDING)); - this.mobileToolBarPane = new MobileToolBarPane(); - mobileToolBarPaneWrapper.add(this.mobileToolBarPane, BorderLayout.NORTH); + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, PADDING, PADDING)); - JPanel formMobileTemplateSettingsPaneWrapper = new JPanel(new BorderLayout()); - formMobileTemplateSettingsPaneWrapper.setBorder(BorderFactory.createEmptyBorder(PADDING, PADDING, PADDING, PADDING)); - this.formMobileTemplateSettingsPane = new FormMobileTemplateSettingsPane(); - formMobileTemplateSettingsPaneWrapper.add(this.formMobileTemplateSettingsPane, BorderLayout.NORTH); + panel.add(formMobileTemplateSettingsPane = new FormMobileTemplateSettingsPane()); + panel.add(mobileToolBarPane = new MobileToolBarPane()); + panel.add(formMobileOthersPane = new FormMobileOthersPane()); - this.add(formMobileTemplateSettingsPaneWrapper, BorderLayout.NORTH); - this.add(mobileToolBarPaneWrapper, BorderLayout.CENTER); + JPanel panelWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); + panelWrapper.add(panel, BorderLayout.NORTH); + UIScrollPane scrollPane = new UIScrollPane(panelWrapper); + this.add(scrollPane); } @Override @@ -47,6 +49,7 @@ public class FormMobileAttrPane extends BasicBeanPane{ } this.mobileToolBarPane.populateBean(ob); this.formMobileTemplateSettingsPane.populateBean(ob); + this.formMobileOthersPane.populateBean(ob); } @Override @@ -54,6 +57,7 @@ public class FormMobileAttrPane extends BasicBeanPane{ FormMobileAttr formMobileAttr = new FormMobileAttr(); this.mobileToolBarPane.updateBean(formMobileAttr); this.formMobileTemplateSettingsPane.updateBean(formMobileAttr); + this.formMobileOthersPane.updateBean(formMobileAttr); return formMobileAttr; } diff --git a/designer-form/src/com/fr/design/form/mobile/FormMobileOthersPane.java b/designer-form/src/com/fr/design/form/mobile/FormMobileOthersPane.java new file mode 100644 index 0000000000..960ffa4a64 --- /dev/null +++ b/designer-form/src/com/fr/design/form/mobile/FormMobileOthersPane.java @@ -0,0 +1,65 @@ +package com.fr.design.form.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.designer.IntervalConstants; +import com.fr.design.dialog.mobile.MobileRadioCheckPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.form.main.mobile.FormMobileAttr; +import com.fr.general.Inter; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; + +/** + * Created by plough on 2018/5/31. + */ +public class FormMobileOthersPane extends BasicBeanPane { + + private MobileRadioCheckPane appearRefreshCheckPane; // 页面再现时刷新 + private MobileRadioCheckPane promptWhenLeaveWithoutSubmitCheckPane; // 数据未提交离开提示 + + public FormMobileOthersPane() { + this.initComponents(); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel borderPane = FRGUIPaneFactory.createTitledBorderPane(this.title4PopupWindow()); + JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + contentPane.setBorder(BorderFactory.createEmptyBorder(0, IntervalConstants.INTERVAL_L1, 0, 0)); + appearRefreshCheckPane = new MobileRadioCheckPane(Inter.getLocText("FR-Designer_Appear_Refresh")); + contentPane.add(appearRefreshCheckPane, BorderLayout.WEST); + promptWhenLeaveWithoutSubmitCheckPane = new MobileRadioCheckPane(Inter.getLocText("FR-Designer_Prompt_When_Leave_Without_Submit")); + contentPane.add(promptWhenLeaveWithoutSubmitCheckPane, BorderLayout.CENTER); + borderPane.add(contentPane); + this.add(borderPane); + } + + @Override + public void populateBean(FormMobileAttr ob) { + if (ob == null) { + ob = new FormMobileAttr(); + } + this.appearRefreshCheckPane.populateBean(ob.isAppearRefresh()); + this.promptWhenLeaveWithoutSubmitCheckPane.populateBean(ob.isPromptWhenLeaveWithoutSubmit()); + } + + @Override + public FormMobileAttr updateBean() { + return null; + } + + @Override + public void updateBean(FormMobileAttr mobileAttr) { + if(mobileAttr != null) { + mobileAttr.setAppearRefresh(this.appearRefreshCheckPane.updateBean()); + mobileAttr.setPromptWhenLeaveWithoutSubmit(this.promptWhenLeaveWithoutSubmitCheckPane.updateBean()); + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Other"); + } +} diff --git a/designer-form/src/com/fr/design/mainframe/ElementCaseHelpDialog.java b/designer-form/src/com/fr/design/mainframe/ElementCaseHelpDialog.java deleted file mode 100644 index 2f2c6e3b5d..0000000000 --- a/designer-form/src/com/fr/design/mainframe/ElementCaseHelpDialog.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.fr.design.mainframe; - -import com.fr.design.dialog.UIDialog; -import com.fr.design.gui.icontainer.UIScrollPane; -import com.fr.design.gui.itextarea.UITextArea; -import com.fr.general.Inter; - -import javax.swing.*; -import java.awt.*; - -/** - * @author zack - * @date 2016-10-14 - * @since 8.0 - */ -public class ElementCaseHelpDialog extends UIDialog { - - private static final int OUTER_WIDTH = 190; - private static final int OUTER_HEIGHT = 280; - - - private String helpMsg; - private UIScrollPane helpArea; - - - public ElementCaseHelpDialog(Frame parent, String helpMsg) { - super(parent); - this.helpMsg = helpMsg; - initHelpArea(); - JPanel panel = (JPanel) getContentPane(); - initComponents(panel); - setSize(new Dimension(OUTER_WIDTH, OUTER_HEIGHT)); - } - - private void initHelpArea() { - UITextArea textArea = new UITextArea(helpMsg); - textArea.setEditable(false); - textArea.setBorder(null); - helpArea = new UIScrollPane(textArea); - helpArea.setBounds(0, 0, OUTER_WIDTH, OUTER_HEIGHT); - helpArea.setBorder(null); - } - - private void initComponents(JPanel contentPane) { - contentPane.setLayout(new BorderLayout()); - add(helpArea, BorderLayout.CENTER); - this.applyClosingAction(); - this.setTitle(Inter.getLocText("FR-Designer_Help")); - } - - /** - * 打开帮助框 - */ - public void showWindow() { - this.setResizable(false); - setVisible(true); - } - - /** - * 略 - */ - @Override - public void checkValid() throws Exception { - - } - - public void setLocationRelativeTo(JFrame c, int x, int y) { - int dx = 0, dy = 0; - Point compLocation = c.getLocationOnScreen();//获取设计器Jframe坐标作为相对位置原点 - setLocation(dx + x, dy + y); - dx = compLocation.x; - dy = compLocation.y + c.getRootPane().getY();//加上底层容器的y坐标(其实就是设计器最上方图标栏的高度) - setLocation(dx + x, dy + y); - } -} \ No newline at end of file diff --git a/designer-form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java b/designer-form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java index 4d7394620d..0287438fc8 100644 --- a/designer-form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java +++ b/designer-form/src/com/fr/design/mainframe/actions/FormMobileAttrAction.java @@ -76,6 +76,7 @@ public class FormMobileAttrAction extends JTemplateAction { formTpl.setFormMobileAttr(formMobileAttr); // 会调整 body 的自适应布局,放到最后 ((FormArea)jf.getFormDesign().getParent()).onMobileAttrModified(); WidgetPropertyPane.getInstance().refreshDockingView(); + jf.fireTargetModified(); } }); dialog.setVisible(true); diff --git a/designer-realize/src/com/fr/design/images/splash_10.gif b/designer-realize/src/com/fr/design/images/splash_10.gif index 0f099397e5..36b362649f 100644 Binary files a/designer-realize/src/com/fr/design/images/splash_10.gif and b/designer-realize/src/com/fr/design/images/splash_10.gif differ diff --git a/designer-realize/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java b/designer-realize/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java index 689a59c7f2..f289b4f0a1 100644 --- a/designer-realize/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java +++ b/designer-realize/src/com/fr/design/mainframe/HyperlinkGroupPaneActionImpl.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe; +import com.fr.base.FRContext; import com.fr.base.Style; import com.fr.design.actions.utils.ReportActionUtils; import com.fr.design.designer.TargetComponent; @@ -84,7 +85,12 @@ public class HyperlinkGroupPaneActionImpl implements HyperlinkGroupPaneActionPro frFont = frFont.applyUnderline(Constants.LINE_NONE); } editCellElement.setStyle(elementStyle.deriveFRFont(frFont)); - editCellElement.setNameHyperlinkGroup(updateNameHyperlinks); + try { + editCellElement.setNameHyperlinkGroup((NameJavaScriptGroup) updateNameHyperlinks.clone()); + } catch (CloneNotSupportedException e) { + // this shouldn't happen, since NameJavaScriptGroup are FCloneable + FRContext.getLogger().error("InternalError: " + e.getMessage()); + } } }); } diff --git a/designer-realize/src/com/fr/design/mainframe/form/FormElementCaseDesigner.java b/designer-realize/src/com/fr/design/mainframe/form/FormElementCaseDesigner.java index 1b2e42034a..b501c81d9c 100644 --- a/designer-realize/src/com/fr/design/mainframe/form/FormElementCaseDesigner.java +++ b/designer-realize/src/com/fr/design/mainframe/form/FormElementCaseDesigner.java @@ -138,6 +138,14 @@ public class FormElementCaseDesigner nameObjectList = new ArrayList(); diff --git a/designer-realize/src/com/fr/design/report/UnitFieldPane.java b/designer-realize/src/com/fr/design/report/UnitFieldPane.java index aaabe3eb44..d0cf27bf16 100644 --- a/designer-realize/src/com/fr/design/report/UnitFieldPane.java +++ b/designer-realize/src/com/fr/design/report/UnitFieldPane.java @@ -17,6 +17,7 @@ import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.Inter; import com.fr.stable.Constants; +import com.fr.stable.OperatingSystem; import com.fr.stable.unit.CM; import com.fr.stable.unit.INCH; import com.fr.stable.unit.MM; @@ -26,23 +27,26 @@ import com.fr.stable.unit.UNIT; * UnitFieldPane */ public class UnitFieldPane extends JPanel { + private static final int TEXT_FIELD_COLUMNS = 4; + private static final int TEXT_FIELD_COLUMNS_WINDOWS = 6; + private UIBasicSpinner valueSpinner; private JFormattedTextField textField; - + private UnitLabel unitLable; private int unitType = Constants.UNIT_MM; - + public static class UnitLabel extends UILabel { - private int preferredHeight; - public UnitLabel(int unitType, int preferredHeight) { - super(); - - this.preferredHeight = preferredHeight; - - setUnitType(unitType); - } - - public void setUnitType(int unitType) { + private int preferredHeight; + public UnitLabel(int unitType, int preferredHeight) { + super(); + + this.preferredHeight = preferredHeight; + + setUnitType(unitType); + } + + public void setUnitType(int unitType) { if (unitType == Constants.UNIT_CM) { this.setText(Inter.getLocText("FR-Designer_Unit_CM")); } else if (unitType == Constants.UNIT_INCH) { @@ -53,41 +57,41 @@ public class UnitFieldPane extends JPanel { //ajust the heigt of unitLabel. Dimension unitDimension = new Dimension(this.getPreferredSize().width, - preferredHeight); + preferredHeight); this.setMinimumSize(unitDimension); this.setMinimumSize(unitDimension); this.setSize(unitDimension); this.setPreferredSize(unitDimension); - } + } } public UnitFieldPane(int unitType) { this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); - + this.unitType = unitType; valueSpinner = new UIBasicSpinner(new SpinnerNumberModel(0.0, 0.0, Double.MAX_VALUE, 1.0)); textField = ((JSpinner.DefaultEditor) valueSpinner.getEditor()).getTextField(); - textField.setColumns(4); + textField.setColumns(OperatingSystem.isWindows() ? TEXT_FIELD_COLUMNS_WINDOWS : TEXT_FIELD_COLUMNS); InputEventBaseOnOS.addBasicEditInputMap(textField); this.add(valueSpinner); unitLable = new UnitLabel(unitType, valueSpinner.getPreferredSize().height); this.add(unitLable); } - + public JFormattedTextField getTextField() { - return textField; - } + return textField; + } - public void setUnitType(int unitType) { - unitLable.setUnitType(unitType); - this.unitType = unitType; + public void setUnitType(int unitType) { + unitLable.setUnitType(unitType); + this.unitType = unitType; } public UNIT getUnitValue() { if (unitType == Constants.UNIT_CM) { - return new CM(((Number) valueSpinner.getValue()).floatValue()); - } else if (unitType == Constants.UNIT_INCH) { + return new CM(((Number) valueSpinner.getValue()).floatValue()); + } else if (unitType == Constants.UNIT_INCH) { return new INCH(((Number) valueSpinner.getValue()).floatValue()); } else { return new MM(((Number) valueSpinner.getValue()).floatValue()); @@ -95,12 +99,12 @@ public class UnitFieldPane extends JPanel { } public void setUnitValue(UNIT value) { - if (unitType == Constants.UNIT_CM) { - valueSpinner.setValue(new Float(value.toCMValue4Scale2())); - } else if (unitType == Constants.UNIT_INCH) { - valueSpinner.setValue(new Float(value.toINCHValue4Scale3())); + if (unitType == Constants.UNIT_CM) { + valueSpinner.setValue(new Float(value.toCMValue4Scale2())); + } else if (unitType == Constants.UNIT_INCH) { + valueSpinner.setValue(new Float(value.toINCHValue4Scale3())); } else { - valueSpinner.setValue(new Float(value.toMMValue4Scale2())); + valueSpinner.setValue(new Float(value.toMMValue4Scale2())); } } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/report/mobile/MobileOthersPane.java b/designer-realize/src/com/fr/design/report/mobile/MobileOthersPane.java new file mode 100644 index 0000000000..a92c1ffb10 --- /dev/null +++ b/designer-realize/src/com/fr/design/report/mobile/MobileOthersPane.java @@ -0,0 +1,60 @@ +package com.fr.design.report.mobile; + +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.designer.IntervalConstants; +import com.fr.design.dialog.mobile.MobileRadioCheckPane; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.general.Inter; +import com.fr.report.mobile.ElementCaseMobileAttr; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; + +/** + * Created by plough on 2018/5/31. + */ +public class MobileOthersPane extends BasicBeanPane { + + private MobileRadioCheckPane appearRefreshCheckPane; // 页面再现时刷新 + + public MobileOthersPane() { + this.initComponents(); + } + + private void initComponents() { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel borderPane = FRGUIPaneFactory.createTitledBorderPane(this.title4PopupWindow()); + JPanel contentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + contentPane.setBorder(BorderFactory.createEmptyBorder(0, IntervalConstants.INTERVAL_L1, 0, 0)); + appearRefreshCheckPane = new MobileRadioCheckPane(Inter.getLocText("FR-Designer_Appear_Refresh")); + contentPane.add(appearRefreshCheckPane, BorderLayout.WEST); + borderPane.add(contentPane); + this.add(borderPane); + } + + @Override + public void populateBean(ElementCaseMobileAttr ob) { + if (ob == null) { + ob = new ElementCaseMobileAttr(); + } + this.appearRefreshCheckPane.populateBean(ob.isAppearRefresh()); + } + + @Override + public ElementCaseMobileAttr updateBean() { + return null; + } + + @Override + public void updateBean(ElementCaseMobileAttr mobileAttr) { + if(mobileAttr != null) { + mobileAttr.setAppearRefresh(this.appearRefreshCheckPane.updateBean()); + } + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("FR-Designer_Other"); + } +} diff --git a/designer-realize/src/com/fr/design/report/mobile/ReportMobileAttrPane.java b/designer-realize/src/com/fr/design/report/mobile/ReportMobileAttrPane.java index eaebb6e51d..f18cba343b 100644 --- a/designer-realize/src/com/fr/design/report/mobile/ReportMobileAttrPane.java +++ b/designer-realize/src/com/fr/design/report/mobile/ReportMobileAttrPane.java @@ -17,6 +17,8 @@ public class ReportMobileAttrPane extends BasicBeanPane{ private AppFitBrowserPane appFitBrowserPane; //工具栏容器 private MobileToolBarPane mobileToolBarPane; + // 其他 + private MobileOthersPane mobileOthersPane; public ReportMobileAttrPane() { initComponents(); @@ -37,6 +39,7 @@ public class ReportMobileAttrPane extends BasicBeanPane{ jPanel.add(appFitBrowserPane); jPanel.add(mobileToolBarPane = new MobileToolBarPane()); + jPanel.add(mobileOthersPane = new MobileOthersPane()); jPanel.add(appFitPreviewPane); UIScrollPane scrollPane = new UIScrollPane(jPanel); @@ -50,6 +53,7 @@ public class ReportMobileAttrPane extends BasicBeanPane{ } appFitBrowserPane.populateBean(ob); mobileToolBarPane.populateBean(ob); + mobileOthersPane.populateBean(ob); reportMobileTemplateSettingsPane.populateBean(ob); } @@ -57,6 +61,7 @@ public class ReportMobileAttrPane extends BasicBeanPane{ public ElementCaseMobileAttr updateBean() { ElementCaseMobileAttr caseMobileAttr = appFitBrowserPane.updateBean(); mobileToolBarPane.updateBean(caseMobileAttr); + mobileOthersPane.updateBean(caseMobileAttr); reportMobileTemplateSettingsPane.updateBean(caseMobileAttr); return caseMobileAttr; diff --git a/designer-realize/src/com/fr/design/webattr/EventPane.java b/designer-realize/src/com/fr/design/webattr/EventPane.java index ab7a7aa708..5ae8d9dc47 100644 --- a/designer-realize/src/com/fr/design/webattr/EventPane.java +++ b/designer-realize/src/com/fr/design/webattr/EventPane.java @@ -29,7 +29,7 @@ import java.util.Arrays; import java.util.List; /** - * richer:调用该类并且对事件名字国际化时需要严格按照"Event-事件名"来进行命名 + * richer:调用该类并且对事件名字国际化时需要严格按照"FR-Engine_Event_事件名"来进行命名 */ public class EventPane extends BasicPane { private DefaultListModel listModel; @@ -74,7 +74,7 @@ public class EventPane extends BasicPane { super.setEnabled(enabled); this.eventList.setEnabled(enabled); this.addAction.setEnabled(enabled); // TODO ALEX_SEP - // 似乎UpdateAction.enable属性还是有用的... + // 似乎UpdateAction.enable属性还是有用的... this.editAction.setEnabled(enabled); this.removeAction.setEnabled(enabled); @@ -83,9 +83,9 @@ public class EventPane extends BasicPane { private void checkEnableState() { if (this.listModel.size() == 0 || eventList.getSelectedIndex() < 0) { - setEditEnabled(false); + setEditEnabled(false); } else { - setEditEnabled(true); + setEditEnabled(true); } } diff --git a/designer-realize/src/com/fr/design/webattr/WriteWebSettingPane.java b/designer-realize/src/com/fr/design/webattr/WriteWebSettingPane.java index fc44238602..6d5b068ba5 100644 --- a/designer-realize/src/com/fr/design/webattr/WriteWebSettingPane.java +++ b/designer-realize/src/com/fr/design/webattr/WriteWebSettingPane.java @@ -76,7 +76,7 @@ public class WriteWebSettingPane extends WebSettingPane { unloadCheck = new UICheckBox(Inter.getLocText("FR-Designer_Unload_Check")); unloadCheck.setSelected(true); - showWidgets = new UICheckBox(Inter.getLocText(new String[]{"Event-showWidgets"})); + showWidgets = new UICheckBox(Inter.getLocText(new String[]{"FR-Engine_Event_showWidgets"})); showWidgets.setSelected(false); isAutoStash = new UICheckBox(Inter.getLocText("FR-Designer-Write_Auto_Stash")); isAutoStash.setSelected(false); diff --git a/designer-realize/src/com/fr/start/EnvSwitcher.java b/designer-realize/src/com/fr/start/EnvSwitcher.java index 800466a466..5dffc028ab 100644 --- a/designer-realize/src/com/fr/start/EnvSwitcher.java +++ b/designer-realize/src/com/fr/start/EnvSwitcher.java @@ -1,10 +1,10 @@ package com.fr.start; -import com.fr.base.FRContext; +import com.fr.base.Env; +import com.fr.base.env.EnvUpdater; import com.fr.design.DesignerEnvManager; +import com.fr.design.env.EnvGenerator; import com.fr.design.mainframe.TemplatePane; -import com.fr.env.SignIn; -import com.fr.general.Inter; /** * Created by juhaoyu on 2018/1/31. @@ -16,10 +16,8 @@ public class EnvSwitcher { try { String current = DesignerEnvManager.getEnvManager().getCurEnvName(); - SignIn.signIn(DesignerEnvManager.getEnvManager().getEnv(current)); - if (!FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { - throw new Exception(Inter.getLocText("Datasource-Connection_failed")); - } + Env env = EnvGenerator.generate(DesignerEnvManager.getEnvManager().getEnv(current)); + EnvUpdater.updateEnv(env); } catch (Exception e) { TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); } diff --git a/designer-realize/src/com/fr/start/SplashContext.java b/designer-realize/src/com/fr/start/SplashContext.java index 9ba4a72b14..b281cf976b 100644 --- a/designer-realize/src/com/fr/start/SplashContext.java +++ b/designer-realize/src/com/fr/start/SplashContext.java @@ -23,6 +23,9 @@ import java.util.concurrent.TimeUnit; */ public class SplashContext { + public static final String SPLASH_PATH = "/com/fr/design/images/splash_10.gif"; + public static final String SPLASH_CACHE_NAME = "splash_10.gif"; + private static final SplashContext SPLASH_CONTEXT = new SplashContext(); private SplashStrategy splashStrategy; diff --git a/designer-realize/src/com/fr/start/fx/SplashFxWindow.java b/designer-realize/src/com/fr/start/fx/SplashFxWindow.java index 451fad60db..e4d845d271 100644 --- a/designer-realize/src/com/fr/start/fx/SplashFxWindow.java +++ b/designer-realize/src/com/fr/start/fx/SplashFxWindow.java @@ -3,6 +3,7 @@ package com.fr.start.fx; import com.bulenkov.iconloader.util.JBUI; import com.fr.base.FRContext; import com.fr.stable.OperatingSystem; +import com.fr.start.SplashContext; import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; @@ -37,9 +38,8 @@ public class SplashFxWindow extends Application { private static final int WINDOW_WIDTH = 640; private static final int WINDOW_HEIGHT = 360; private static final int FONT = 12; - private static final int FRAME_COUNT = 254; + private static final int FRAME_COUNT = 315; private static final String THINKS_COLOR = "#82b1ce"; - private static final String SPLASH_PATH = "/com/fr/design/images/splash_10.gif"; private static final CountDownLatch LATCH = new CountDownLatch(1); private static SplashFxWindow app = null; @@ -78,7 +78,7 @@ public class SplashFxWindow extends Application { public void start(Stage primaryStage) { AnchorPane root = new AnchorPane(); primaryStage.initStyle(StageStyle.TRANSPARENT); - Image image = new FastGifImage(SPLASH_PATH, FRAME_COUNT, WINDOW_WIDTH, WINDOW_HEIGHT); + Image image = new FastGifImage(SplashContext.SPLASH_PATH, FRAME_COUNT, WINDOW_WIDTH, WINDOW_HEIGHT); ImageView gif = new ImageView(image); diff --git a/designer-realize/src/com/fr/start/jni/SplashMac.java b/designer-realize/src/com/fr/start/jni/SplashMac.java index c5c8ee63e5..f4e900aecb 100644 --- a/designer-realize/src/com/fr/start/jni/SplashMac.java +++ b/designer-realize/src/com/fr/start/jni/SplashMac.java @@ -22,8 +22,6 @@ import java.io.InputStream; */ public class SplashMac implements SplashStrategy { - private static final String SPLASH_CACHE_NAME = "splash_10.gif"; - private static final String SPLASH_PATH = "/com/fr/design/images/splash_10.gif"; private SplashJNI jni; @@ -38,12 +36,12 @@ public class SplashMac implements SplashStrategy { */ private static String loadResFromJar() { File tempLib = null; - try (InputStream inputStream = SplashContext.class.getResourceAsStream(SplashMac.SPLASH_PATH)) { + try (InputStream inputStream = SplashContext.class.getResourceAsStream(SplashContext.SPLASH_PATH)) { if (inputStream == null) { - FRContext.getLogger().error("Unable to copy " + SplashMac.SPLASH_PATH + " from jar file."); + FRContext.getLogger().error("Unable to copy " + SplashContext.SPLASH_PATH + " from jar file."); return StringUtils.EMPTY; } - tempLib = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), SPLASH_CACHE_NAME)); + tempLib = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), SplashContext.SPLASH_CACHE_NAME)); byte[] buffer = new byte[1024]; int read = -1; try (FileOutputStream fileOutputStream = new FileOutputStream(tempLib)) { @@ -57,14 +55,14 @@ public class SplashMac implements SplashStrategy { tempLib.deleteOnExit(); } // 直接抛异常 - throw new RuntimeException("Unable to copy " + SplashMac.SPLASH_PATH + " from jar file."); + throw new RuntimeException("Unable to copy " + SplashContext.SPLASH_PATH + " from jar file."); } } @Override public void show() { if (jni != null) { - File splash = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), SPLASH_CACHE_NAME)); + File splash = new File(StableUtils.pathJoin(ProductConstants.getEnvHome(), SplashContext.SPLASH_CACHE_NAME)); String path = splash.exists() ? splash.getAbsolutePath() : loadResFromJar(); jni.show(path); } diff --git a/designer-realize/src/com/fr/start/module/DesignerEnvProvider.java b/designer-realize/src/com/fr/start/module/DesignerEnvProvider.java index f15b0a42b6..0615d7774a 100644 --- a/designer-realize/src/com/fr/start/module/DesignerEnvProvider.java +++ b/designer-realize/src/com/fr/start/module/DesignerEnvProvider.java @@ -1,26 +1,23 @@ package com.fr.start.module; -import com.fr.base.FRContext; +import com.fr.base.Env; import com.fr.base.ModifiedTable; import com.fr.base.Parameter; import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; +import com.fr.base.env.EnvUpdater; import com.fr.base.env.serializer.OldSerializerAdapter; import com.fr.base.env.serializer.ProcedureDataModelSerializer; import com.fr.core.env.EnvConfig; import com.fr.core.env.EnvEvent; import com.fr.core.env.proxy.EnvProxy; -import com.fr.core.env.resource.EnvConfigUtils; -import com.fr.core.env.resource.LocalEnvConfig; -import com.fr.core.env.resource.RemoteEnvConfig; import com.fr.data.core.db.TableProcedure; import com.fr.data.impl.Connection; import com.fr.data.impl.storeproc.ProcedureDataModel; import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.dav.DavXMLUtils; -import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; -import com.fr.env.RemoteEnv; +import com.fr.design.env.EnvGenerator; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -64,17 +61,12 @@ public class DesignerEnvProvider extends Activator { EventDispatcher.listen(EnvEvent.BEFORE_SIGN_IN, new Listener() { @Override public void on(Event event, EnvConfig envConfig) { - if (envConfig instanceof RemoteEnvConfig) { - RemoteEnv remoteEnv = new RemoteEnv(envConfig.getPath(), EnvConfigUtils.getUsername(envConfig), EnvConfigUtils.getPassword(envConfig)); - FRContext.setCurrentEnv(remoteEnv); - } else if (envConfig instanceof LocalEnvConfig) { - FRContext.setCurrentEnv(new LocalEnv()); - } + Env env = EnvGenerator.generate(envConfig); + EnvUpdater.updateEnv(env); } }); } - private void addSerializers() { EnvProxy.addSerializer(ProcedureDataModel[].class, new ProcedureDataModelSerializer());