diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index f58fe2e3e..d8a76b564 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -10,6 +10,8 @@ import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.constants.UIConstants; import com.fr.design.env.DesignerWorkspaceGenerator; import com.fr.design.env.DesignerWorkspaceInfo; +import com.fr.design.env.LocalDesignerWorkspaceInfo; +import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.file.FILEFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogFormatter; @@ -33,9 +35,10 @@ import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; import com.fr.workspace.WorkContext; -import javax.swing.*; +import javax.swing.SwingWorker; import javax.swing.SwingWorker.StateValue; -import java.awt.*; +import java.awt.Color; +import java.awt.Rectangle; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; @@ -193,7 +196,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (installHome != null && !".".equals(installHome)) { String name = Inter.getLocText("FR-Engine_DEFAULT"); String envPath = StableUtils.pathJoin(installHome, ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME); - designerEnvManager.putEnv(name, DesignerWorkspaceInfo.createLocal(name, envPath)); + designerEnvManager.putEnv(name, LocalDesignerWorkspaceInfo.create(name, envPath)); designerEnvManager.setCurEnvName(name); } } @@ -495,7 +498,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } } String name = Inter.getLocText(new String[]{"Default", "Utils-Report_Runtime_Env"}); - DesignerWorkspaceInfo newDefaultEnv = DesignerWorkspaceInfo.createLocal(name, defaultenvPath); + LocalDesignerWorkspaceInfo newDefaultEnv = LocalDesignerWorkspaceInfo.create(name, defaultenvPath); this.putEnv(name, newDefaultEnv); return newDefaultEnv; } @@ -702,7 +705,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { * 记录名称 和对应的环境 * * @param name 名称 - * @param info 对应的环境信息 + * @param info 对应的环境信息 */ public void putEnv(String name, DesignerWorkspaceInfo info) { @@ -1419,7 +1422,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { // marks:兼容6.1的 // marks:设置默认的目录. String curReportServerName = Inter.getLocText("Server-Embedded_Server"); - DesignerWorkspaceInfo reportServer = DesignerWorkspaceInfo.createLocal(curReportServerName, tmpVal); + LocalDesignerWorkspaceInfo reportServer = LocalDesignerWorkspaceInfo.create(curReportServerName, tmpVal); this.putEnv(curReportServerName, reportServer); this.setCurEnvName(curReportServerName); @@ -1472,8 +1475,11 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { public void readXML(XMLableReader reader) { if (reader.isChildNode()) { String tagName = reader.getTagName(); - if (DesignerWorkspaceInfo.XML_TAG.equals(tagName)) { - DesignerWorkspaceInfo envConfig = (DesignerWorkspaceInfo) GeneralXMLTools.readXMLable(reader); + if (LocalDesignerWorkspaceInfo.XML_TAG.equals(tagName)) { + LocalDesignerWorkspaceInfo envConfig = (LocalDesignerWorkspaceInfo) GeneralXMLTools.readXMLable(reader); + putEnv(name, envConfig); + } else if (RemoteDesignerWorkspaceInfo.XML_TAG.equals(tagName)) { + RemoteDesignerWorkspaceInfo envConfig = (RemoteDesignerWorkspaceInfo) GeneralXMLTools.readXMLable(reader); putEnv(name, envConfig); } } @@ -1599,7 +1605,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { for (Entry entry : nameEnvMap.entrySet()) { writer.startTAG("EnvConfigElement").attr("name", entry.getKey()); DesignerWorkspaceInfo envConfig = entry.getValue(); - GeneralXMLTools.writeXMLable(writer, envConfig, DesignerWorkspaceInfo.XML_TAG); + GeneralXMLTools.writeXMLable(writer, envConfig, envConfig.XML_TAG); writer.end(); } writer.end(); 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 2ca235b3b..0db58dc36 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -21,7 +21,7 @@ import com.fr.stable.EnvChangedListener; import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContextCallback; -import javax.swing.*; +import javax.swing.JOptionPane; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Iterator; @@ -66,15 +66,15 @@ public class SwitchExistEnv extends MenuDef { public GetExistEnvAction(String envName) { this.setName(envName); DesignerWorkspaceInfo env = DesignerEnvManager.getEnvManager().getWorkspaceInfo(envName); - switch (env.getType()) - { - case Local:{ + switch (env.getType()) { + case Local: { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); break; - }case Remote:{ - this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); - break; - } + } + case Remote: { + this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); + break; + } } } diff --git a/designer-base/src/com/fr/design/env/DesignerWorkspaceInfo.java b/designer-base/src/com/fr/design/env/DesignerWorkspaceInfo.java index b13d81041..755fb5370 100644 --- a/designer-base/src/com/fr/design/env/DesignerWorkspaceInfo.java +++ b/designer-base/src/com/fr/design/env/DesignerWorkspaceInfo.java @@ -1,117 +1,14 @@ package com.fr.design.env; -import com.fr.security.SecurityToolbox; -import com.fr.stable.StringUtils; -import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLable; -import com.fr.stable.xml.XMLableReader; import com.fr.workspace.connect.WorkspaceConnection; -/** - * Created by juhaoyu on 2018/6/15. - */ -public class DesignerWorkspaceInfo implements XMLable { - - private static final int DEFAULT_RPC_PORT = 39999; - - public static final String XML_TAG = "DesignerWorkspace"; - - private DesignerWorkspaceType type; - - private String name; - - private String path; - - private WorkspaceConnection connection; - - public static DesignerWorkspaceInfo createLocal(String name, String path) { - - DesignerWorkspaceInfo info = new DesignerWorkspaceInfo(); - info.connection = null; - info.name = name; - info.path = path; - info.type = DesignerWorkspaceType.Local; - return info; - } - - public void setName(String name) { - - this.name = name; - } - - public DesignerWorkspaceType getType() { - - return type; - } - - public String getName() { - - return name; - } - - public String getPath() { - - return path; - } - - public WorkspaceConnection getConnection() { - - return connection; - } - - public void setType(DesignerWorkspaceType type) { - - this.type = type; - } - - public void setPath(String path) { - - this.path = path; - } - - public void setConnection(WorkspaceConnection connection) { - - this.connection = connection; - } - - @Override - public void readXML(XMLableReader reader) { - - if (reader.isAttr()) { - this.name = reader.getAttrAsString("name", StringUtils.EMPTY); - this.type = DesignerWorkspaceType.valueOf(reader.getAttrAsString("type", "Local")); - this.path = reader.getAttrAsString("path", StringUtils.EMPTY); - } - if (reader.isChildNode()) { - String tagName = reader.getTagName(); - if ("Connection".equals(tagName)) { - String url = reader.getAttrAsString("url", StringUtils.EMPTY); - String username = reader.getAttrAsString("username", StringUtils.EMPTY); - //密码解密 - String password = SecurityToolbox.decrypt(reader.getAttrAsString("password", StringUtils.EMPTY)); - this.connection = new WorkspaceConnection(url, username, password); - } - } - } - - @Override - public void writeXML(XMLPrintWriter writer) { - - writer.attr("name", name); - writer.attr("path", path); - writer.attr("type", type.toString()); - if (this.connection != null) { - writer.startTAG("Connection"); - writer.attr("url", connection.getUrl()); - writer.attr("username", connection.getUserName()); - writer.attr("password", SecurityToolbox.encrypt(connection.getPassword())); - writer.end(); - } - } - - @Override - public Object clone() throws CloneNotSupportedException { - - return null; - } +public interface DesignerWorkspaceInfo extends XMLable { + DesignerWorkspaceType getType(); + + String getName(); + + String getPath(); + + WorkspaceConnection getConnection(); } diff --git a/designer-base/src/com/fr/design/env/LocalDesignerWorkspaceInfo.java b/designer-base/src/com/fr/design/env/LocalDesignerWorkspaceInfo.java new file mode 100644 index 000000000..709df5dd7 --- /dev/null +++ b/designer-base/src/com/fr/design/env/LocalDesignerWorkspaceInfo.java @@ -0,0 +1,70 @@ +package com.fr.design.env; + +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.workspace.connect.WorkspaceConnection; + +/** + * Created by juhaoyu on 2018/6/15. + */ +public class LocalDesignerWorkspaceInfo implements DesignerWorkspaceInfo { + + public static final String XML_TAG = "LocalDesignerWorkspaceInfo"; + + private String name; + + private String path; + + public static LocalDesignerWorkspaceInfo create(String name, String path) { + + LocalDesignerWorkspaceInfo info = new LocalDesignerWorkspaceInfo(); + info.name = name; + info.path = path; + return info; + } + + @Override + public DesignerWorkspaceType getType() { + + return DesignerWorkspaceType.Local; + } + + @Override + public String getName() { + + return name; + } + + @Override + public String getPath() { + + return path; + } + + @Override + public WorkspaceConnection getConnection() { + return null; + } + + @Override + public void readXML(XMLableReader reader) { + + if (reader.isAttr()) { + this.name = reader.getAttrAsString("name", StringUtils.EMPTY); + this.path = reader.getAttrAsString("path", StringUtils.EMPTY); + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + + writer.attr("name", name); + writer.attr("path", path); + } + + @Override + public Object clone() throws CloneNotSupportedException { + return null; + } +} diff --git a/designer-base/src/com/fr/design/env/RemoteDesignerWorkspaceInfo.java b/designer-base/src/com/fr/design/env/RemoteDesignerWorkspaceInfo.java new file mode 100644 index 000000000..a35ea4e25 --- /dev/null +++ b/designer-base/src/com/fr/design/env/RemoteDesignerWorkspaceInfo.java @@ -0,0 +1,83 @@ +package com.fr.design.env; + +import com.fr.security.SecurityToolbox; +import com.fr.stable.StringUtils; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.workspace.connect.WorkspaceConnection; + +public class RemoteDesignerWorkspaceInfo implements DesignerWorkspaceInfo { + + public static final String XML_TAG = "RemoteDesignerWorkspaceInfo"; + + private String name; + + private WorkspaceConnection connection; + + public static RemoteDesignerWorkspaceInfo create(WorkspaceConnection connection) { + RemoteDesignerWorkspaceInfo info = new RemoteDesignerWorkspaceInfo(); + info.connection = connection; + return info; + } + + @Override + public DesignerWorkspaceType getType() { + + return DesignerWorkspaceType.Remote; + } + + @Override + public String getName() { + + return name; + } + + @Override + public String getPath() { + + return null; + } + + @Override + public WorkspaceConnection getConnection() { + + return connection; + } + + @Override + public void readXML(XMLableReader reader) { + + if (reader.isAttr()) { + this.name = reader.getAttrAsString("name", StringUtils.EMPTY); + } + if (reader.isChildNode()) { + String tagName = reader.getTagName(); + if ("Connection".equals(tagName)) { + String url = reader.getAttrAsString("url", StringUtils.EMPTY); + String username = reader.getAttrAsString("username", StringUtils.EMPTY); + //密码解密 + String password = SecurityToolbox.decrypt(reader.getAttrAsString("password", StringUtils.EMPTY)); + this.connection = new WorkspaceConnection(url, username, password); + } + } + } + + @Override + public void writeXML(XMLPrintWriter writer) { + + writer.attr("name", name); + if (this.connection != null) { + writer.startTAG("Connection"); + writer.attr("url", connection.getUrl()); + writer.attr("username", connection.getUserName()); + writer.attr("password", SecurityToolbox.encrypt(connection.getPassword())); + writer.end(); + } + } + + @Override + public Object clone() throws CloneNotSupportedException { + + return null; + } +} diff --git a/designer-base/src/com/fr/design/gui/controlpane/JListControlPane.java b/designer-base/src/com/fr/design/gui/controlpane/JListControlPane.java index bccff1ad7..02bf0301d 100644 --- a/designer-base/src/com/fr/design/gui/controlpane/JListControlPane.java +++ b/designer-base/src/com/fr/design/gui/controlpane/JListControlPane.java @@ -25,10 +25,20 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; import com.fr.stable.core.PropertyChangeAdapter; -import javax.swing.*; +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListModel; +import javax.swing.Icon; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -383,7 +393,7 @@ public abstract class JListControlPane extends JControlPane { private void wrapActionListener(NameableCreator[] creators) { for (final NameableCreator creator : creators) { - if (!HyperlinkFilterHelper.whetherAddHyperlink4cell(creator.menuName())) { + if (filterNameableCreator(creator)) { continue; } boolean isTrue = ComparatorUtils.equals(creator.menuName(), Inter.getLocText("Datasource-Stored_Procedure")) || @@ -942,6 +952,7 @@ public abstract class JListControlPane extends JControlPane { } return false; } + /** * 设置选中项 * @@ -951,4 +962,12 @@ public abstract class JListControlPane extends JControlPane { nameableList.setSelectedIndex(index); } + + /** + * 用于在list面板中,过滤某些下拉选项 + * @return true:过滤掉这个creator + */ + protected boolean filterNameableCreator(NameableCreator creator) { + return !HyperlinkFilterHelper.whetherAddHyperlink4cell(creator.menuName()); + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/env/EnvListPane.java b/designer-base/src/com/fr/env/EnvListPane.java index f93b7da55..57fea46de 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -2,6 +2,8 @@ package com.fr.env; import com.fr.design.DesignerEnvManager; import com.fr.design.env.DesignerWorkspaceInfo; +import com.fr.design.env.LocalDesignerWorkspaceInfo; +import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; @@ -57,9 +59,9 @@ public class EnvListPane extends JListControlPane { @Override public NameableCreator[] createNameableCreators() { NameableCreator local = new NameObjectCreator(Inter.getLocText("Env-Local_Directory"), "com/fr/design/images/data/bind/localconnect.png", - DesignerWorkspaceInfo.class, LocalEnvPane.class); + LocalDesignerWorkspaceInfo.class, LocalEnvPane.class); NameableCreator remote = new NameObjectCreator(Inter.getLocText("Env-Remote_Server"), "com/fr/design/images/data/bind/distanceconnect.png", - DesignerWorkspaceInfo.class, RemoteEnvPane.class); + RemoteDesignerWorkspaceInfo.class, RemoteEnvPane.class); return new NameableCreator[]{local, remote}; } @@ -106,4 +108,9 @@ public class EnvListPane extends JListControlPane { } return this.getSelectedName(); } + + @Override + protected boolean filterNameableCreator(NameableCreator creator) { + return false; + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/env/LocalEnvPane.java b/designer-base/src/com/fr/env/LocalEnvPane.java index c518f1dbe..641214503 100644 --- a/designer-base/src/com/fr/env/LocalEnvPane.java +++ b/designer-base/src/com/fr/env/LocalEnvPane.java @@ -1,7 +1,7 @@ package com.fr.env; import com.fr.design.beans.BasicBeanPane; -import com.fr.design.env.DesignerWorkspaceInfo; +import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.design.gui.itextfield.UITextField; @@ -21,7 +21,7 @@ import java.io.File; /** * @author yaohwu */ -public class LocalEnvPane extends BasicBeanPane { +public class LocalEnvPane extends BasicBeanPane { private UITextField pathTextField; private JFileTree localEnvTree; @@ -70,9 +70,9 @@ public class LocalEnvPane extends BasicBeanPane { } @Override - public DesignerWorkspaceInfo updateBean() { + public LocalDesignerWorkspaceInfo updateBean() { String path = pathTextField.getText(); - return DesignerWorkspaceInfo.createLocal(StringUtils.EMPTY, path); + return LocalDesignerWorkspaceInfo.create(StringUtils.EMPTY, path); } public String getPath() { @@ -80,7 +80,7 @@ public class LocalEnvPane extends BasicBeanPane { } @Override - public void populateBean(DesignerWorkspaceInfo ob) { + public void populateBean(LocalDesignerWorkspaceInfo ob) { if (StringUtils.isBlank(ob.getPath())) { return; } diff --git a/designer-base/src/com/fr/env/RemoteEnvPane.java b/designer-base/src/com/fr/env/RemoteEnvPane.java index a52308a71..5e749e230 100644 --- a/designer-base/src/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/com/fr/env/RemoteEnvPane.java @@ -3,8 +3,7 @@ package com.fr.env; import com.fr.design.DesignerEnvManager; import com.fr.design.beans.BasicBeanPane; import com.fr.design.border.UITitledBorder; -import com.fr.design.env.DesignerWorkspaceInfo; -import com.fr.design.env.DesignerWorkspaceType; +import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.ilable.UILabel; @@ -56,7 +55,7 @@ import static com.fr.third.guava.base.Optional.fromNullable; /** * @author yaohwu */ -public class RemoteEnvPane extends BasicBeanPane { +public class RemoteEnvPane extends BasicBeanPane { private static final Color TIPS_FONT_COLOR = new Color(0x8f8f92); @@ -261,11 +260,18 @@ public class RemoteEnvPane extends BasicBeanPane { } @Override - public void populateBean(DesignerWorkspaceInfo ob) { + public void populateBean(RemoteDesignerWorkspaceInfo ob) { WorkspaceConnection connection = ob.getConnection(); - this.remoteEnvURL = Strings.isNullOrEmpty(connection.getUrl()) - ? RemoteEnvURL.createDefaultURL() - : new RemoteEnvURL(connection.getUrl()); + if (connection != null) { + this.remoteEnvURL = Strings.isNullOrEmpty(connection.getUrl()) + ? RemoteEnvURL.createDefaultURL() + : new RemoteEnvURL(connection.getUrl()); + String username = fromNullable(connection.getUserName()).or(StringUtils.EMPTY); + String pwd = fromNullable(connection.getPassword()).or(StringUtils.EMPTY); + this.usernameInput.setText(username); + this.passwordInput.setText(pwd); + } + fillRemoteEnvURLField(); fillIndividualField(); httpsCheckbox.setSelected(this.remoteEnvURL.getHttps()); @@ -274,21 +280,17 @@ public class RemoteEnvPane extends BasicBeanPane { fileChooserButton.setEnabled(this.remoteEnvURL.getHttps()); updateHttpsConfigPanel(); - this.usernameInput.setText(fromNullable(connection.getUserName()).or(StringUtils.EMPTY)); - this.passwordInput.setText(fromNullable(connection.getPassword()).or(StringUtils.EMPTY)); + } @Override - public DesignerWorkspaceInfo updateBean() { + public RemoteDesignerWorkspaceInfo updateBean() { WorkspaceConnection connection = new WorkspaceConnection( this.remoteEnvURL.getURL(), this.usernameInput.getText(), new String(this.passwordInput.getPassword())); - DesignerWorkspaceInfo config = new DesignerWorkspaceInfo(); - config.setConnection(connection); - config.setType(DesignerWorkspaceType.Remote); - return config; + return RemoteDesignerWorkspaceInfo.create(connection); } @Override @@ -472,7 +474,7 @@ public class RemoteEnvPane extends BasicBeanPane { @Override protected Void doInBackground() throws Exception { - final DesignerWorkspaceInfo remoteEnv = updateBean(); + final RemoteDesignerWorkspaceInfo remoteEnv = updateBean(); WorkContext.getConnector().testConnection(remoteEnv.getConnection()); return null; } diff --git a/designer-realize/src/com/fr/start/EnvSwitcher.java b/designer-realize/src/com/fr/start/EnvSwitcher.java index f96216e32..ce334bd8e 100644 --- a/designer-realize/src/com/fr/start/EnvSwitcher.java +++ b/designer-realize/src/com/fr/start/EnvSwitcher.java @@ -19,8 +19,9 @@ public class EnvSwitcher { Workspace workspace = DesignerWorkspaceGenerator.generate(DesignerEnvManager.getEnvManager().getWorkspaceInfo(current)); if (workspace == null) { TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); + } else { + WorkContext.switchTo(workspace); } - WorkContext.switchTo(workspace); } catch (Throwable e) { TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); }