From d247e8b74a30babafdf0e2c63027c5e3be13d1e0 Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 25 May 2018 09:25:11 +0800 Subject: [PATCH 01/29] env.. --- .../src/com/fr/design/DesignerEnvManager.java | 39 +- .../design/actions/file/SwitchExistEnv.java | 13 +- .../com/fr/design/file/FileOperations.java | 18 +- .../design/file/HistoryTemplateListPane.java | 4 +- .../com/fr/design/file/TemplateTreePane.java | 12 +- .../fr/design/mainframe/DesignerFrame.java | 115 ++- .../DesignerFrameFileDealerPane.java | 54 +- .../com/fr/design/mainframe/TemplatePane.java | 718 +++++++++++++----- .../loghandler/DesignerLogHandler.java | 25 +- .../src/com/fr/design/utils/DesignUtils.java | 111 +-- designer-base/src/com/fr/env/EnvListPane.java | 524 ++++++++++++- designer-base/src/com/fr/env/RemoteEnv.java | 488 ++++++------ designer-base/src/com/fr/env/SignIn.java | 2 +- 13 files changed, 1494 insertions(+), 629 deletions(-) diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index f372c9ef7..111e4f625 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -61,6 +61,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private static final int MAX_SHOW_NUM = 10; private static final String VERSION_80 = "80"; + private static final int CACHINGTEMPLATE_LIMIT = 5; private static DesignerEnvManager designerEnvManager; // gui. private String activationKey = null; @@ -99,6 +100,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private int language; //2014-8-26默认显示全部, 因为以前的版本, 虽然是false, 实际上是显示所有表, 因此这边要兼容 private boolean useOracleSystemSpace = true; + private int cachingTemplateLimit = CACHINGTEMPLATE_LIMIT; private boolean autoBackUp = true; private int undoLimit = 5; private short pageLengthUnit = Constants.UNIT_MM; @@ -146,6 +148,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private boolean isHttps = false; private static List mapWorkerList = new ArrayList(); + private boolean imageCompress = false;//图片压缩 /** * DesignerEnvManager. @@ -244,7 +247,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { // 写文件的LogLocation String logLocation = DesignerEnvManager.getEnvManager().getLogLocation(); - if (logLocation != null) { + //Mac下8.0,9.0 选项-日志设置为空时在根目录下检测文件存在会抛无权限,这里应该设个默认值比较好吧 + if (StringUtils.isNotEmpty(logLocation)) { try { Calendar calender = GregorianCalendar.getInstance(); calender.setTimeInMillis(System.currentTimeMillis()); @@ -631,6 +635,21 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.useOracleSystemSpace = displayOracleSystem; } + /** + * 配置最大缓存模板个数 + */ + public void setCachingTemplateLimit(int cachingTemplateLimit) { + this.cachingTemplateLimit = cachingTemplateLimit; + } + + + /** + * 获取最大缓存模板个数 + */ + public int getCachingTemplateLimit() { + return this.cachingTemplateLimit; + } + /** * 是否加入产品改良 * @@ -1394,7 +1413,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setMaxNumberOrPreviewRow(reader.getAttrAsInt("maxNumberOrPreviewRow", 200)); this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true)); + this.setCachingTemplateLimit(reader.getAttrAsInt("cachingTemplateLimit", CACHINGTEMPLATE_LIMIT)); this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true)); + this.setImageCompress(reader.getAttrAsBoolean("imageCompress", true)); this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true)); this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false)); // peter:读取webinfLocation @@ -1614,9 +1635,15 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!this.isOracleSystemSpace()) { writer.attr("useOracleSystemSpace", this.isOracleSystemSpace()); } + if (this.getCachingTemplateLimit() >= 0) { + writer.attr("cachingTemplateLimit", this.getCachingTemplateLimit()); + } if (!this.isJoinProductImprove()) { writer.attr("joinProductImprove", this.isJoinProductImprove()); } + if (!this.isImageCompress()) { + writer.attr("imageCompress", this.isImageCompress()); + } if (!this.isAutoBackUp()) { writer.attr("autoBackUp", this.isAutoBackUp()); } @@ -1790,4 +1817,12 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { public void setAlphaFineConfigManager(AlphaFineConfigManager alphaFineConfigManager) { this.alphaFineConfigManager = alphaFineConfigManager; } -} \ No newline at end of file + + public boolean isImageCompress() { + return imageCompress; + } + + public void setImageCompress(boolean imageCompress) { + this.imageCompress = 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 57574ae25..ea709385f 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -36,6 +36,9 @@ import java.util.logging.Level; public class SwitchExistEnv extends MenuDef { + // 标志开始切换环境 + private static boolean isSwitching = false; + public SwitchExistEnv() { this.setMenuKeySet(KeySetUtils.SWITCH_ENV); this.setName(getMenuKeySet().getMenuName()); @@ -101,6 +104,7 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { + isSwitching = true; DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Env selectedEnv = envManager.getEnv(this.getName()); try { @@ -117,13 +121,18 @@ public class SwitchExistEnv extends MenuDef { return; } SignIn.signIn(selectedEnv); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); } catch (Exception em) { FRContext.getLogger().error(em.getMessage(), em); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); TemplatePane.getInstance().editItems(); + } finally { + isSwitching = false; } } } -} \ No newline at end of file + + public static boolean isSwitching() { + return isSwitching; + } +} diff --git a/designer-base/src/com/fr/design/file/FileOperations.java b/designer-base/src/com/fr/design/file/FileOperations.java index 34b86cbc6..390a28e0c 100644 --- a/designer-base/src/com/fr/design/file/FileOperations.java +++ b/designer-base/src/com/fr/design/file/FileOperations.java @@ -5,34 +5,34 @@ public interface FileOperations { /** *打开选中的报表文件 */ - public void openSelectedReport(); + public void openSelectedReport(); /** *打开文件夹 */ - public void openContainerFolder(); + public void openContainerFolder(); /** *刷新 */ - public void refresh(); + public void refresh(); /** *删除文件 */ - public void deleteFile(); + public void deleteFile(); /** *加上文件锁 */ - public void lockFile(); + public void lockFile(); /** *文件解锁 */ - public void unLockFile(); + public void unLockFile(); - public String getSelectedTemplatePath(); + public String getSelectedTemplatePath(); /** *文件名是否存在 @@ -41,5 +41,5 @@ public interface FileOperations { * @param suffix 后缀名 * @return 是否存在 */ - public boolean isNameAlreadyExist(String newName, String oldName, String suffix); -} \ No newline at end of file + public boolean isNameAlreadyExist(String newName, String oldName, String suffix); +} diff --git a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java index dfd1f123f..deda53953 100644 --- a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java +++ b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java @@ -38,7 +38,7 @@ import com.fr.design.utils.gui.GUIPaintUtils; public class HistoryTemplateListPane extends JPanel implements FileOperations, CallbackEvent { //最大保存内存中面板数,为0时关闭优化内存 - private static final int DEAD_LINE = 5; + private static final int DEAD_LINE = DesignerEnvManager.getEnvManager().getCachingTemplateLimit(); private static final int LIST_BORDER = 4; private List> historyList; private JTemplate editingTemplate; @@ -438,4 +438,4 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations, C return isNameAreadyExist; } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/file/TemplateTreePane.java b/designer-base/src/com/fr/design/file/TemplateTreePane.java index 9061521a4..969a66f32 100644 --- a/designer-base/src/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/com/fr/design/file/TemplateTreePane.java @@ -26,11 +26,7 @@ import com.sun.jna.platform.FileUtils; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.*; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; +import java.awt.event.*; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -143,7 +139,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { public void openContainerFolder() { FileNode fn = TemplateTreePane.this.reportletsTree.getSelectedFileNode(); LocalEnv localEnv = (LocalEnv) FRContext.getCurrentEnv(); - String filePath = StableUtils.pathJoin(localEnv.path, fn.getEnvPath()); + String filePath = StableUtils.pathJoin(new String[]{localEnv.path, fn.getEnvPath()}); filePath = filePath.substring(0, filePath.lastIndexOf(CoreConstants.SEPARATOR)); try { Desktop.getDesktop().open(new File(filePath)); @@ -319,8 +315,6 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (fileUtils.hasTrash()) { try { fileUtils.moveToTrash(new File[]{new File(StableUtils.pathJoin(nodeFile.getEnvPath(), nodeFile.getPath()))}); - //todo 走下这个流程,否则集群下其它节点无法同步删除 - FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); } catch (IOException e) { FRLogger.getLogger().info(e.getMessage()); FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); @@ -331,4 +325,4 @@ public class TemplateTreePane extends JPanel implements FileOperations { } } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index 41d755905..06911ee1d 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -6,17 +6,26 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.core.ActionFactory; +import com.fr.design.actions.file.SwitchExistEnv; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; +import com.fr.design.event.DesignerOpenedListener; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import com.fr.design.file.*; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.NewTemplatePane; +import com.fr.design.file.SaveSomeTemplatePane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.TitlePlaceProcessor; +import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuHighLight; import com.fr.design.gui.iscrollbar.UIScrollBar; @@ -26,6 +35,7 @@ import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.MenuManager; +import com.fr.design.menu.ShortCut; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.file.FILE; @@ -54,14 +64,27 @@ import javax.swing.border.MatteBorder; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.dnd.*; -import java.awt.event.*; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Set; import java.util.logging.Level; public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { @@ -74,7 +97,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private static final Integer TOP_LAYER = new Integer((200)); private static java.util.List> appList = new java.util.ArrayList>(); - private ToolBarMenuDock ad; + private List designerOpenedListenerList = new ArrayList<>(); + + //顶部日志+登陆按钮 + private static final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + + private static ToolBarMenuDock ad; private DesktopCardPane centerTemplateCardPane; @@ -158,8 +186,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } public void mouseReleased(MouseEvent e) { - if (BaseUtils.isAuthorityEditing()) { - BaseUtils.setAuthorityEditing(false); + if (DesignerMode.isAuthorityEditing()) { + DesignerMode.setMode(DesignerMode.NORMARL); WestRegionContainerPane.getInstance().replaceDownPane( TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); @@ -235,7 +263,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { reCalculateFrameSize(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { doResize(); } } @@ -266,6 +294,22 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } + /** + * 注册"设计器初始化完成"的监听 + */ + public void addDesignerOpenedListener(DesignerOpenedListener listener) { + designerOpenedListenerList.add(listener); + } + + /** + * 触发"设计器初始化完成"事件 + */ + public void fireDesignerOpened() { + for (DesignerOpenedListener listener : designerOpenedListenerList) { + listener.designerOpened(); + } + } + protected DesktopCardPane getCenterTemplateCardPane() { return centerTemplateCardPane; } @@ -276,41 +320,39 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta protected void initMenuPane() { menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); + menuPane.add(initNorthEastPane(), BorderLayout.EAST); basePane.add(menuPane, BorderLayout.NORTH); this.resetToolkitByPlus(null); } /** - * @param ad * @return */ - protected JPanel initNorthEastPane(final ToolBarMenuDock ad) { + protected JPanel initNorthEastPane() { //hugh: private修改为protected方便oem的时候修改右上的组件构成 - //顶部日志+登陆按钮 - final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + //优先级为-1,保证最后全面刷新一次 GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { @Override public void on(PluginEvent event) { - refreshNorthEastPane(northEastPane, ad); + refreshNorthEastPane(); DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv()); } }, new PluginFilter() { @Override public boolean accept(PluginContext context) { - - return context.contain(PluginModule.ExtraDesign); + return !SwitchExistEnv.isSwitching() + && context.contain(PluginModule.ExtraDesign); } }); - refreshNorthEastPane(northEastPane, ad); + refreshNorthEastPane(); return northEastPane; } - private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { + public static void refreshNorthEastPane() { northEastPane.removeAll(); northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); northEastPane.add(LogMessageBar.getInstance()); @@ -415,7 +457,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * 刷新 */ public void refreshDottedLine() { - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { populateAuthorityArea(); populateCloseButton(); addDottedLine(); @@ -474,7 +516,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta for (int i = 0; i < fixButtons.length; i++) { combineUp.add(fixButtons[i]); } - if (!BaseUtils.isAuthorityEditing()) { + if (!DesignerMode.isAuthorityEditing()) { combineUp.addSeparator(new Dimension(2, 16)); if (toolbar4Form != null) { for (int i = 0; i < toolbar4Form.length; i++) { @@ -585,7 +627,16 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta */ public void needToAddAuhtorityPaint() { - newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); + newWorkBookPane.setButtonGray(DesignerMode.isAuthorityEditing()); + + // 进入或退出权限编辑模式,通知插件 + Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); + for (ShortCut shortCut : extraShortCuts) { + if (shortCut instanceof AbstractTemplateTreeShortCutProvider) { + ((AbstractTemplateTreeShortCutProvider) shortCut).notifyFromAuhtorityChange(DesignerMode.isAuthorityEditing()); + } + } + } /** @@ -665,13 +716,16 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param env 环境 */ public void refreshEnv(Env env) { - this.setTitle(); DesignerFrameFileDealerPane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); TemplateTreePane.getInstance().refreshDockingView(); DesignTableDataManager.clearGlobalDs(); EastRegionContainerPane.getInstance().refreshDownPane(); + JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (template != null) { + template.refreshToolArea(); + } } /** @@ -734,6 +788,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 添加的模板. */ public void addAndActivateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -750,6 +806,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 模板 */ public void activateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -855,13 +913,16 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta String fileExtention = fileName.substring(indexOfLastDot + 1); for (int i = 0, len = appList.size(); i < len; i++) { App app = appList.get(i); - String[] defaultAppExtentions = app.defaultExtensions(); + String[] defaultAppExtentions = app.defaultExtentions(); boolean opened = false; for (int j = 0; j < defaultAppExtentions.length; j++) { if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { - // 不要catch - JTemplate jt = app.openTemplate(tplFile); - + JTemplate jt = null; + try { + jt = app.openTemplate(tplFile); + } catch (Exception e) { + FRLogger.getLogger().error(e.getMessage(), e); + } if (jt == null) { return; } @@ -908,8 +969,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } else { this.addAndActivateJTemplate(jt); } - //REPORT-5084:激活后刷新一下右側面板 - jt.refreshEastPropertiesPane(); } /** @@ -1021,4 +1080,4 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 5e68607b1..e5cfdfa69 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -10,7 +11,11 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.*; +import com.fr.design.file.FileOperations; +import com.fr.design.file.FileToolbarStateChangeListener; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -28,7 +33,6 @@ import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import com.fr.io.utils.ResourceIOUtils; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; @@ -42,6 +46,7 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -52,6 +57,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private CardLayout card; private JPanel cardPane; + private java.util.List otherToobarStateChangeListeners= new ArrayList<>(); + + public FileOperations getSelectedOperation() { + return selectedOperation; + } private FileOperations selectedOperation; private UIToolbar toolBar; @@ -110,7 +120,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); //处理自动新建的模板 MutilTempalteTabPane.getInstance().doWithtemTemplate(); - if (BaseUtils.isAuthorityEditing()) { + if (DesignerMode.isAuthorityEditing()) { RolesAlreadyEditedPane.getInstance().refreshDockingView(); } @@ -134,7 +144,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); - for (ShortCut shortCut : extraShortCuts){ + for (ShortCut shortCut : extraShortCuts) { toolbarDef.addShortCut(shortCut); } @@ -160,8 +170,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } /** - * 响应数据集改变 - * @param map 改变名字的数据集 + * 响应数据集改变 + * + * @param map 改变名字的数据集 */ public void fireDSChanged(Map map) { DesignTableDataManager.fireDSChanged(map); @@ -212,6 +223,21 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt public void actionPerformed(ActionEvent evt) { selectedOperation.refresh(); stateChange(); + + } + } + + public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.add(toobarStateChangeListener); + } + + public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.remove(toobarStateChangeListener); + } + + private void otherStateChange() { + for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) { + toobarStateChangeListener.stateChange(); } } @@ -295,8 +321,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt openReportAction.setEnabled(false); } FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); - if (selectedOperation.getSelectedTemplatePath() != null){ - if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(),node.getLock())){ + if (selectedOperation.getSelectedTemplatePath() != null) { + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { delFileAction.setEnabled(false); } else { delFileAction.setEnabled(true); @@ -329,6 +355,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt delFileAction.setEnabled(true); } + otherStateChange(); } /** @@ -383,8 +410,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt return; } - final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, reportPath), false)); - final String path = nodeFile.getPath(); + final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, reportPath}), false)); + final String path = StableUtils.pathJoin(new String[]{nodeFile.getEnvPath(), nodeFile.getPath()}); oldName = nodeFile.getName(); suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); oldName = oldName.replaceAll(suffix, ""); @@ -477,9 +504,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String newPath = path.replace(nodeFile.getName(), userInput + suffix); renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix); DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\")); - - //模版重命名 - ResourceIOUtils.renameTo(path, newPath); + File newFile = new File(newPath); + new File(path).renameTo(newFile); selectedOperation.refresh(); DesignerContext.getDesignerFrame().setTitle(); jd.dispose(); @@ -569,4 +595,4 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt return null; } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/mainframe/TemplatePane.java b/designer-base/src/com/fr/design/mainframe/TemplatePane.java index 0aa0258a9..e5cfdfa69 100644 --- a/designer-base/src/com/fr/design/mainframe/TemplatePane.java +++ b/designer-base/src/com/fr/design/mainframe/TemplatePane.java @@ -1,278 +1,598 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.Env; -import com.fr.dav.LocalEnv; +import com.fr.base.FRContext; +import com.fr.base.vcs.DesignerMode; 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.ExtraDesignClassManager; +import com.fr.design.actions.UpdateAction; +import com.fr.design.constants.UIConstants; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.data.datapane.TableDataTreePane; +import com.fr.design.data.tabledata.ResponseDataSourceChange; +import com.fr.design.file.FileOperations; +import com.fr.design.file.FileToolbarStateChangeListener; import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; -import com.fr.env.EnvListPane; -import com.fr.env.RemoteEnv; -import com.fr.env.SignIn; +import com.fr.design.gui.imenu.UIMenuHighLight; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.gui.itoolbar.UIToolbar; +import com.fr.design.gui.itree.filetree.TemplateFileTree; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.menu.KeySetUtils; +import com.fr.design.menu.ShortCut; +import com.fr.design.menu.ToolBarDef; +import com.fr.design.roleAuthority.RolesAlreadyEditedPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.file.FILE; +import com.fr.file.FileNodeFILE; +import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; -import com.fr.general.GeneralContext; import com.fr.general.Inter; -import com.fr.stable.EnvChangedListener; -import com.fr.stable.ProductConstants; -import com.fr.stable.StringUtils; +import com.fr.stable.CoreConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.project.ProjectConstants; import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; -//TODO: august TemplatePane和TemplateTreePane最好合并成一个类 -public class TemplatePane extends JPanel implements MouseListener { - private static final long NUM = 1L; - private static int NUM200 = 200; +public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarStateChangeListener, ResponseDataSourceChange { + private static final String FILE = "file"; + private static DesignerFrameFileDealerPane THIS; - public static TemplatePane getInstance() { - return HOLDER.singleton; + private CardLayout card; + private JPanel cardPane; + private java.util.List otherToobarStateChangeListeners= new ArrayList<>(); + + public FileOperations getSelectedOperation() { + return selectedOperation; } - private static class HOLDER { - private static TemplatePane singleton = new TemplatePane(); + private FileOperations selectedOperation; + private UIToolbar toolBar; + + private OpenReportAction openReportAction = new OpenReportAction(); + private RefreshTreeAction refreshTreeAction = new RefreshTreeAction(); + private OpenFolderAction openFolderAction = new OpenFolderAction(); + private RenameAction renameAction = new RenameAction(); + private DelFileAction delFileAction = new DelFileAction(); + + + /** + * 刷新 + */ + public void refresh() { + selectedOperation.refresh(); } - private static final long serialVersionUID = 2108412478281713143L; - public static final int HEIGHT = 23;// 最好和日志的高度统一 用同一个变量 - private static javax.swing.Icon leftIcon = BaseUtils.readIcon("/com/fr/design/images/docking/left.png"); - ; - private static javax.swing.Icon rightIcon = BaseUtils.readIcon("/com/fr/design/images/docking/right.png"); - ; - private boolean isExpanded = false; - private UIButton editButton; - private UILabel envLabel; - - private TemplatePane() { - super(); - this.initComponents(); - this.setFocusable(true); - this.addMouseListener(this); - isExpanded = DesignerEnvManager.getEnvManager().isTemplateTreePaneExpanded(); - // TemplateTreePane.getInstance().setVisible(isExpanded); - TemplateTreePane.getInstance().setVisible(true); + public static final DesignerFrameFileDealerPane getInstance() { + if (THIS == null) { + THIS = new DesignerFrameFileDealerPane(); + } + return THIS; } - private void initComponents() { - GeneralContext.addEnvChangedListener(new EnvChangedListener() { - public void envChanged() { - setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); - } - }); - this.setLayout(new BorderLayout(25, 0)); - editButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/control-center2.png")) { - private static final long serialVersionUID = NUM; - - @Override - public Point getToolTipLocation(MouseEvent event) { - return new Point(25, 2); - } - }; - editButton.setOpaque(false); - editButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 10)); - editButton.setMargin(null); - editButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); - editButton.setToolTipText(Inter.getLocText("Env-Configure_Workspace")); - this.add(new UILabel(" "), BorderLayout.WEST); - this.add(editButton, BorderLayout.EAST); - editButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - editItems(); - } - }); - envLabel = new UILabel(); - envLabel.setForeground(new Color(102, 102, 102)); - setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); - this.add(envLabel, BorderLayout.CENTER); + private DesignerFrameFileDealerPane() { + setLayout(new BorderLayout()); + toolBar = ToolBarDef.createJToolBar(); + toolBar.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.TOOLBAR_BORDER_COLOR)); + toolBar.setBorderPainted(true); + JPanel tooBarPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + JPanel parent = new JPanel(new BorderLayout()); + parent.add(toolBar, BorderLayout.CENTER); + parent.setBorder(BorderFactory.createEmptyBorder(3, 0, 4, 0)); + tooBarPane.add(parent, BorderLayout.CENTER); + tooBarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); + + add(tooBarPane, BorderLayout.NORTH); + cardPane = new JPanel(card = new CardLayout()); + cardPane.add(TemplateTreePane.getInstance(), FILE); + + selectedOperation = TemplateTreePane.getInstance(); + card.show(cardPane, FILE); + + TemplateTreePane.getInstance().setToobarStateChangeListener(this); + + add(cardPane, BorderLayout.CENTER); + stateChange(); + } + + + public final void setCurrentEditingTemplate(JTemplate jt) { + DesignModelAdapter.setCurrentModelAdapter(jt == null ? null : jt.getModel()); + fireDSChanged(); + TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); + HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); + //处理自动新建的模板 + MutilTempalteTabPane.getInstance().doWithtemTemplate(); + if (DesignerMode.isAuthorityEditing()) { + RolesAlreadyEditedPane.getInstance().refreshDockingView(); + } + + jt.setComposite(); + jt.refreshToolArea(); + jt.fireJTemplateOpened(); + jt.requestFocus(); + jt.revert(); + + FRContext.getLogger().info("\"" + jt.getEditingFILE().getName() + "\"" + Inter.getLocText("LOG-Has_Been_Openned") + "!"); } /** - * 是否可扩展 - * @return 同上 + * 刷新菜单 */ - public boolean IsExpanded() { - return this.isExpanded; + public void refreshDockingView() { + ToolBarDef toolbarDef = new ToolBarDef(); + toolbarDef.addShortCut(openReportAction, refreshTreeAction); + if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) { + toolbarDef.addShortCut(openFolderAction, renameAction); + } + toolbarDef.addShortCut(delFileAction); + Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); + for (ShortCut shortCut : extraShortCuts) { + toolbarDef.addShortCut(shortCut); + } + + toolbarDef.updateToolBar(toolBar); + refreshActions(); } - public void setExpand(boolean b) { - this.isExpanded = b; + + private void refreshActions() { + openReportAction.setEnabled(false); + refreshTreeAction.setEnabled(true); + openFolderAction.setEnabled(false); + renameAction.setEnabled(false); + delFileAction.setEnabled(false); this.repaint(); } - private boolean envListOkAction(EnvListPane envListPane) { - String selectedName = envListPane.updateEnvManager(); - DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - Env selectedEnv = envManager.getEnv(selectedName); - GeneralContext.fireEnvWillChangeListener(); - try { - //如果是远程的还要先测试下,如果失败就不切换 - if (selectedEnv instanceof RemoteEnv) { - if (!((RemoteEnv) selectedEnv).testServerConnection()) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - return false; - } else { - String remoteVersion = selectedEnv.getDesignerVersion(); - 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); - JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (template != null) { - template.refreshToolArea(); - } - setJLabel(selectedName); - } catch (Exception e) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - return false; - } - TemplateTreePane.getInstance().refreshDockingView(); - DesignModelAdapter model = DesignModelAdapter.getCurrentModelAdapter(); - if (model != null) { - model.envChanged(); - } - return true; + /** + * 响应数据集改变 + */ + public void fireDSChanged() { + fireDSChanged(new HashMap()); } /** - * 编辑items + * 响应数据集改变 + * + * @param map 改变名字的数据集 */ - public void editItems() { - final EnvListPane envListPane = new EnvListPane(); - final BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame())); - - envListPane.populateEnvManager(envLabel.getText()); - envListDialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - envListOkAction(envListPane); - } + public void fireDSChanged(Map map) { + DesignTableDataManager.fireDSChanged(map); + } + + + /* + * Open Report Action + */ + private class OpenReportAction extends UpdateAction { + + public OpenReportAction() { + this.setName(KeySetUtils.OPEN_TEMPLATE.getMenuKeySetName()); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/buttonicon/open.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.openSelectedReport(); + } - public void doCancel() { - envListDialog.setVisible(false); - } - }); - envListDialog.setVisible(true); } - private void setJLabel(String name) { - if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof LocalEnv) { - envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); + private class OpenFolderAction extends UpdateAction { + + public OpenFolderAction() { + this.setName(Inter.getLocText("FR-Designer_Show_in_Containing_Folder")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/view_folder.png")); + } - } else if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof RemoteEnv) { - envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.openContainerFolder(); } - envLabel.setText(name); - envLabel.repaint(); } - @Override - public Dimension getPreferredSize() { - return new Dimension(250, HEIGHT); + /* + * 刷新ReportletsTree + */ + private class RefreshTreeAction extends UpdateAction { + + public RefreshTreeAction() { + this.setName(Inter.getLocText("FR-Designer_Refresh")); + this.setSmallIcon(UIConstants.REFRESH_ICON); + } + + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.refresh(); + stateChange(); + + } } - @Override - public void paintComponent(Graphics g) { - super.paintComponent(g); - paintBackgroundIcon(g); + public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.add(toobarStateChangeListener); } - private void paintBackgroundIcon(Graphics g) { - int w = this.getWidth(); - int h = this.getHeight(); - Graphics2D g2d = (Graphics2D) g; - Color lightColor = new Color(226, 230, 234); - Color darkColor = new Color(183, 188, 195); - GradientPaint gp = new GradientPaint(1, 1, lightColor, 1, h - 1, darkColor); - g2d.setPaint(gp); - g2d.fillRect(1, 1, w - 2, h - 1); - g2d.setColor(lightColor); - g2d.drawLine(0, 2, 0, h - 1); - g2d.setColor(darkColor); - g2d.drawLine(w - 1, 2, w - 1, h - 1); - Icon icon = !isExpanded ? leftIcon : rightIcon; - icon.paintIcon(this, g2d, 4, 4); + public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { + this.otherToobarStateChangeListeners.remove(toobarStateChangeListener); + } + private void otherStateChange() { + for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) { + toobarStateChangeListener.stateChange(); + } } - /** - * 鼠标点击 - * @param e 事件 + /* + * 重命名文件 */ - @Override - public void mouseClicked(MouseEvent e) { + private class RenameAction extends UpdateAction { + + public RenameAction() { + this.setName(Inter.getLocText("FR-Designer_Rename")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/data/source/rename.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + new RenameDialog(); + MutilTempalteTabPane.getInstance().repaint(); + } + } - /** - * 鼠标按下 - * @param e 事件 + /* + * 删除指定文件 */ - @Override - public void mousePressed(MouseEvent e) { - if (e.getX() < NUM200) { - isExpanded = !isExpanded; - TemplateTreePane.getInstance().setVisible(isExpanded); - this.setExpand(isExpanded); - DesignerEnvManager.getEnvManager().setTemplateTreePaneExpanded(isExpanded); + private class DelFileAction extends UpdateAction { + + public DelFileAction() { + this.setName(Inter.getLocText("FR-Designer_Remove")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/data/source/delete.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.deleteFile(); } } - /** - * 鼠标放开 - * @param e 事件 + /* + * 加锁 */ - @Override - public void mouseReleased(MouseEvent e) { + private class GetLockAction extends UpdateAction { + + public GetLockAction() { + this.setName(Inter.getLocText("FR-Designer_Get_Lock")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/lock.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.lockFile(); + } + } + + /* + * 解锁 + */ + private class ReleaseLockAction extends UpdateAction { + + public ReleaseLockAction() { + this.setName(Inter.getLocText("FR-Designer_Release_Lock")); + this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/unlock.png")); + } + + @Override + public void actionPerformed(ActionEvent evt) { + selectedOperation.unLockFile(); + } } /** - * 鼠标进入 - * @param e 事件 + * 按钮状态改变 */ @Override - public void mouseEntered(MouseEvent e) { + public void stateChange() { + //当前环境为远程环境时 + if (FRContext.getCurrentEnv() != null) { + if (!FRContext.getCurrentEnv().isSupportLocalFileOperate()) { + if (selectedOperation.getSelectedTemplatePath() != null) { + openReportAction.setEnabled(true); + } else { + openReportAction.setEnabled(false); + } + FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); + if (selectedOperation.getSelectedTemplatePath() != null) { + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { + delFileAction.setEnabled(false); + } else { + delFileAction.setEnabled(true); + } + } else { + delFileAction.setEnabled(false); + } + } else { + //当前环境为本地环境时 + if (selectedOperation.getSelectedTemplatePath() != null) { + openReportAction.setEnabled(true); + renameAction.setEnabled(true); + delFileAction.setEnabled(true); + } else { + openReportAction.setEnabled(false); + renameAction.setEnabled(false); + delFileAction.setEnabled(false); + } + openFolderAction.setEnabled(containsFolderNums() + seletedTemplateNums() != 0); + } + refreshTreeAction.setEnabled(true); + } + if (containsFolderNums() > 0 && (containsFolderNums() + seletedTemplateNums() > 1)) { + refreshActions(); + } else if (containsFolderNums() == 0 && seletedTemplateNums() > 1) { + openReportAction.setEnabled(false); + refreshTreeAction.setEnabled(true); + openFolderAction.setEnabled(false); + renameAction.setEnabled(false); + delFileAction.setEnabled(true); + } + + otherStateChange(); } /** - * 鼠标离开 - * @param e 事件 + * 是否包含文件夹 + * + * @return */ - @Override - public void mouseExited(MouseEvent e) { + + private int containsFolderNums() { + TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); + if (fileTree.getSelectionPaths() == null) { + return 0; + } + + //选择的包含文件和文件夹的数目 + if (fileTree.getSelectionPaths().length == 0) { + return 0; + } + //所有的num减去模板的num,得到文件夹的num + return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; } /** - * 处理异常 + * 是否选择了多个模板 + * + * @return */ - public void dealEvnExceptionWhenStartDesigner() { - final EnvListPane envListPane = new EnvListPane(); - envListPane.populateEnvManager(envLabel.getText()); - BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame())); - envListDialog.addDialogActionListener(new DialogActionAdapter() { - public void doOk() { - if (!envListOkAction(envListPane)) { - System.exit(0); + private int seletedTemplateNums() { + TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); + if (fileTree.getSelectionPaths() == null) { + return 0; + } + + return fileTree.getSelectedTemplatePaths().length; + } + + + // js: 重命名对话框,模仿Eclipse的重命名,支持快捷键F2,Enter,ESC + private class RenameDialog { + + private UITextField jt; + private String userInput; + private String oldName; + private UILabel hintsLabel; + private UIButton confirmButton; + private JDialog jd; + private String suffix; + + public RenameDialog() { + final String reportPath = selectedOperation.getSelectedTemplatePath(); + if (reportPath == null) { + return; + } + + final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, reportPath}), false)); + final String path = StableUtils.pathJoin(new String[]{nodeFile.getEnvPath(), nodeFile.getPath()}); + oldName = nodeFile.getName(); + suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); + oldName = oldName.replaceAll(suffix, ""); + + jd = new JDialog(); + jd.setLayout(new GridLayout(2, 2)); + jd.setModal(true); + UILabel newNameLabel = new UILabel(Inter.getLocText("FR-Designer_Enter-New-FileName")); + newNameLabel.setMinimumSize(new Dimension(150, 27)); + newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); + jt = new UITextField(oldName); + jt.getDocument().addDocumentListener(getdoDocumentListener()); + jt.selectAll(); + jt.setPreferredSize(new Dimension(150, 20)); + + JPanel newNamePanel = new JPanel(); + newNamePanel.setLayout(new BoxLayout(newNamePanel, BoxLayout.X_AXIS)); + newNamePanel.add(Box.createHorizontalGlue()); + newNamePanel.add(newNameLabel); + newNamePanel.add(Box.createHorizontalStrut(5)); + jd.add(newNamePanel); + + JPanel jtPanel = new JPanel(); + jtPanel.setLayout(new BoxLayout(jtPanel, BoxLayout.Y_AXIS)); + JPanel containJt = new JPanel(new BorderLayout()); + containJt.add(jt, BorderLayout.WEST); + containJt.setMaximumSize(new Dimension(200, 20)); + jtPanel.add(Box.createVerticalGlue()); + jtPanel.add(containJt); + jtPanel.add(Box.createVerticalGlue()); + jd.add(jtPanel); + + addUITextFieldListener(nodeFile, path); + + hintsLabel = new UILabel(); + hintsLabel.setBounds(20, 50, 250, 30); + hintsLabel.setMaximumSize(new Dimension(200, 30)); + hintsLabel.setHorizontalAlignment(SwingConstants.RIGHT); + hintsLabel.setForeground(Color.RED); + hintsLabel.setVisible(false); + + confirmButton = new UIButton(Inter.getLocText("FR-Designer_Confirm")); + confirmButton.setPreferredSize(new Dimension(80, 25)); + confirmButton.setMinimumSize(new Dimension(80, 25)); + confirmButton.setMaximumSize(new Dimension(80, 25)); + confirmButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + confirmClose(nodeFile, path); } + }); + UIButton cancelButton = new UIButton(Inter.getLocText("FR-Designer_Cancel")); + cancelButton.setPreferredSize(new Dimension(80, 25)); + cancelButton.setMinimumSize(new Dimension(80, 25)); + cancelButton.setMaximumSize(new Dimension(80, 25)); + + cancelButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + jd.dispose(); + } + }); + + JPanel hintsPanel = new JPanel(); + hintsPanel.setLayout(new BorderLayout()); + hintsPanel.add(hintsLabel, BorderLayout.EAST); + jd.add(hintsLabel); + + JPanel btPanel = new JPanel(new BorderLayout()); + btPanel.setLayout(new BoxLayout(btPanel, BoxLayout.X_AXIS)); + btPanel.add(Box.createHorizontalGlue()); + btPanel.add(confirmButton); + btPanel.add(Box.createHorizontalStrut(5)); + btPanel.add(cancelButton); + btPanel.add(Box.createHorizontalStrut(20)); + jd.add(btPanel); + + jd.setSize(380, 200); + jd.setTitle(Inter.getLocText("FR-Designer_Rename")); + jd.setResizable(false); + jd.setAlwaysOnTop(true); + jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); + jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + GUICoreUtils.centerWindow(jd); + jd.setVisible(true); + } + + public void confirmClose(FileNodeFILE nodeFile, String path) { + userInput = userInput == null ? oldName : userInput; + String oldPath = path.replaceAll("/", "\\\\"); + String newPath = path.replace(nodeFile.getName(), userInput + suffix); + renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix); + DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\")); + File newFile = new File(newPath); + new File(path).renameTo(newFile); + selectedOperation.refresh(); + DesignerContext.getDesignerFrame().setTitle(); + jd.dispose(); + } + + private void renameTemplateInMemory(FILE tplFile, String newName, String oldName) { + JTemplate dPane = getSpecialTemplateByFILE(tplFile); + if (dPane == null) { + return; + } + FILE renameFile = dPane.getEditingFILE(); + renameFile.setPath(renameFile.getPath().replace(oldName, newName)); + } + + // 增加enter以及esc快捷键的支持 + public void addUITextFieldListener(final FileNodeFILE nodeFile, final String path) { + + jt.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + jd.dispose(); + } + } + }); + + jt.addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ENTER) { + if (confirmButton.isEnabled()) { + confirmClose(nodeFile, path); + } + } + } + }); + + } + + // UITextField的输入监听 + public DocumentListener getdoDocumentListener() { + DocumentListener dl = new DocumentListener() { + + public void changedUpdate(DocumentEvent e) { + isNameAlreadyExist(); + } + + public void insertUpdate(DocumentEvent e) { + isNameAlreadyExist(); + } + + public void removeUpdate(DocumentEvent e) { + isNameAlreadyExist(); + } + }; + + return dl; + } + + private void isNameAlreadyExist() { + userInput = jt.getText().trim(); + if (selectedOperation.isNameAlreadyExist(userInput, oldName, suffix)) { + jt.selectAll(); + // 如果文件名已存在,则灰掉确认按钮 + hintsLabel.setText(Inter.getLocText(new String[]{"Utils-File_name", "Already_exists"}, new String[]{userInput})); + hintsLabel.setVisible(true); + confirmButton.setEnabled(false); + } else { + hintsLabel.setVisible(false); + confirmButton.setEnabled(true); } + } + } - public void doCancel() { - System.exit(0); + /** + * @param tplFile + * @return 内存中的template重命名一下 + */ + private JTemplate getSpecialTemplateByFILE(FILE tplFile) { + HistoryTemplateListPane historyHandle = HistoryTemplateListPane.getInstance(); + if (ComparatorUtils.equals(historyHandle.getCurrentEditingTemplate().getEditingFILE(), tplFile)) { + return historyHandle.getCurrentEditingTemplate(); + } + for (int i = 0; i < historyHandle.getHistoryCount(); i++) { + if (ComparatorUtils.equals(historyHandle.get(i).getEditingFILE(), tplFile)) { + return historyHandle.get(i); } - }); - envListDialog.setVisible(true); + } + return null; } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index 7be558aca..b718760ed 100644 --- a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.loghandler; import com.fr.base.BaseUtils; -import com.fr.base.ServerConfig; +import com.fr.base.ConfigManager; import com.fr.base.FRContext; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.imenu.UIMenuItem; @@ -11,17 +11,28 @@ import com.fr.general.FRLogLevel; import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.general.LogRecordTime; import com.fr.log.LogHandler; import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.LogRecordTimeProvider; -import javax.swing.*; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JTextPane; +import javax.swing.KeyStroke; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultEditorKit; import javax.swing.text.Document; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -119,7 +130,7 @@ public class DesignerLogHandler { @Override public void actionPerformed(ActionEvent e) { JPopupMenu showsetPopup = new JPopupMenu(); - int logLevelvalue = ServerConfig.getInstance().getServerLogLevel().intValue(); + int logLevelvalue = ConfigManager.getProviderInstance().getServerLogLevel().intValue(); if (logLevelvalue <= INFO_INT) { showsetPopup.add(showInfo); showsetPopup.add(showError); @@ -149,6 +160,10 @@ public class DesignerLogHandler { logHandlerArea.printStackTrace(message, level, date); } + public void printRemoteLog(LogRecordTime logRecordTime) { + logHandlerArea.printStackTrace(logRecordTime); + } + private class LogHandlerArea extends JPanel { private static final long serialVersionUID = 8215630927304621660L; @@ -341,4 +356,4 @@ public class DesignerLogHandler { }; } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 469e7fd1a..4ee3ff9c0 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -1,12 +1,6 @@ package com.fr.design.utils; -import com.fr.base.BaseUtils; -import com.fr.base.ServerConfig; -import com.fr.base.Env; -import com.fr.base.EnvException; -import com.fr.base.FRContext; -import com.fr.base.FeedBackInfo; -import com.fr.base.Utils; +import com.fr.base.*; import com.fr.base.remote.RemoteDeziConstants; import com.fr.dav.DavXMLUtils; import com.fr.dav.LocalEnv; @@ -15,39 +9,18 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.UILookAndFeel; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrame; import com.fr.env.RemoteEnv; import com.fr.file.FileFILE; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRFont; -import com.fr.general.FRLogger; -import com.fr.general.GeneralContext; -import com.fr.general.Inter; +import com.fr.general.*; import com.fr.general.http.HttpClient; -import com.fr.stable.ArrayUtils; -import com.fr.stable.CodeUtils; -import com.fr.stable.EncodeConstants; -import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; +import com.fr.stable.*; import com.fr.start.StartServer; import javax.swing.*; import java.awt.*; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.ServerSocket; -import java.net.Socket; -import java.net.URI; -import java.net.URLEncoder; +import java.io.*; +import java.net.*; import java.util.Calendar; import java.util.Enumeration; import java.util.Locale; @@ -209,18 +182,18 @@ public class DesignUtils { // 更新CurrentEnv于FRContext & DesignerEnvManager FRContext.setCurrentEnv(env); - + DesignerFrame.refreshNorthEastPane(); refreshDesignerFrame(env); // 当换了运行环境,重置服务器,让它下次预览时重启 if (env instanceof LocalEnv && !ComparatorUtils.equals(env.getPath(), oldEnvPath)) { StartServer.currentEnvChanged(); } } - + public static void refreshDesignerFrame(Env env) { - + final Env run_env = env; - + // 刷新DesignerFrame里面的面板 SwingUtilities.invokeLater(new Runnable() { @@ -233,7 +206,7 @@ public class DesignUtils { } }); } - + /** * p:初始化look and feel, 把一切放到这个里面.可以让多个地方调用. */ @@ -256,15 +229,15 @@ public class DesignUtils { } } } - + private static boolean isTextField(String key){ - return key.startsWith("TextField.") || key.startsWith("PasswordField."); + return key.startsWith("TextField.") || key.startsWith("PasswordField."); } - + private static FRFont getCurrentLocaleFont(){ FRFont guiFRFont; Locale defaultLocale = Locale.getDefault(); - + if (isDisplaySimSun(defaultLocale)) { guiFRFont = getNamedFont("SimSun"); } else if(isDisplayDialog(defaultLocale)) { @@ -272,57 +245,50 @@ public class DesignUtils { } else { guiFRFont = getNamedFont("Tahoma"); } - + //先初始化的设计器locale, 后初始化lookandfeel.如果顺序改了, 这边也要调整. Locale designerLocale = FRContext.getLocale(); String file = Inter.getLocText("FR-Designer_File"); char displayChar = file.charAt(0); if (!guiFRFont.canDisplay(displayChar)) { - //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 - //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) - guiFRFont = getNamedFont("SimSun"); - if (!guiFRFont.canDisplay(displayChar)) { + //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 + //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) + guiFRFont = getNamedFont("SimSun"); + if (!guiFRFont.canDisplay(displayChar)) { //比如想在中文或英文系统里用韩文设计器 guiFRFont = getNamedFont("Dialog"); if(!guiFRFont.canDisplay(displayChar)) { FRContext.getLogger().error(Inter.getLocText("FR-Base_SimSun_Not_Found")); } - } - } - + } + } + return guiFRFont; } - + private static FRFont getNamedFont(String name){ - return FRFont.getInstance(name, Font.PLAIN, 12); + return FRFont.getInstance(name, Font.PLAIN, 12); } - + private static boolean isDisplaySimSun(Locale defaultLocale){ - return ComparatorUtils.equals(defaultLocale, Locale.SIMPLIFIED_CHINESE); + return ComparatorUtils.equals(defaultLocale, Locale.SIMPLIFIED_CHINESE); } - + private static boolean isDisplayDialog(Locale defaultLocale){ - return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE) - || ComparatorUtils.equals(defaultLocale, Locale.JAPANESE) - || ComparatorUtils.equals(defaultLocale, Locale.JAPAN) + return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE) + || ComparatorUtils.equals(defaultLocale, Locale.JAPANESE) + || ComparatorUtils.equals(defaultLocale, Locale.JAPAN) || ComparatorUtils.equals(defaultLocale, Locale.KOREAN) || ComparatorUtils.equals(defaultLocale, Locale.KOREA); } - /** - * 访问服务器环境-空参数 - */ - public static void visitEnvServer() { - visitEnvServerByParameters(StringUtils.EMPTY, new String[] {}, new String[] {}); - } - /** * 访问服务器环境 * * @param names 参数名字 * @param values 参数值 */ - public static void visitEnvServerByParameters(String baseRoute, String[] names, String[] values) { + public static void visitEnvServerByParameters(String[] names, String[] values) { int len = Math.min(ArrayUtils.getLength(names), ArrayUtils.getLength(values)); String[] segs = new String[len]; for (int i = 0; i < len; i++) { @@ -353,8 +319,7 @@ public class DesignUtils { } else { try { String web = GeneralContext.getCurrentAppNameOfEnv(); - String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() - + "/" + web + "/" + ServerConfig.getInstance().getServletName() + baseRoute + String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping() + postfixOfUri; StartServer.browserURLWithLocalEnv(url); } catch (Throwable e) { @@ -474,10 +439,10 @@ public class DesignUtils { private static InputStream postBytes2ServerB(byte[] bytes) throws Exception { - HttpClient client = new HttpClient("http://114.215.175.35:8080/WebReport/product_advice.jsp"); + HttpClient client = new HttpClient("http://114.215.175.35:8080/WebReport/product_advice.jsp"); client.asGet(); - client.setContent(bytes); - return execute4InputStream(client); + client.setContent(bytes); + return execute4InputStream(client); } @@ -487,7 +452,7 @@ public class DesignUtils { private static ByteArrayInputStream execute4InputStream(HttpClient client) throws Exception { int statusCode = client.getResponseCode(); if(statusCode != HttpURLConnection.HTTP_OK){ - throw new EnvException("Method failed: " + statusCode); + throw new EnvException("Method failed: " + statusCode); } InputStream in = client.getResponseStream(); if (in == null) { @@ -519,4 +484,4 @@ public class DesignUtils { } -} \ 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 4165bf9bc..d1d794f8d 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -1,33 +1,73 @@ package com.fr.env; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.File; +import java.util.*; + +import javax.swing.BorderFactory; + +import com.fr.design.gui.ilable.UILabel; + +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.text.AttributeSet; +import javax.swing.text.BadLocationException; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; + +import com.fr.base.BaseUtils; import com.fr.base.Env; +import com.fr.base.FRContext; +import com.fr.general.NameObject; import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; +import com.fr.design.beans.BasicBeanPane; +import com.fr.design.dialog.InformationWarnPane; import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; +import com.fr.design.gui.ipasswordfield.UIPassWordField; +import com.fr.design.gui.itree.filetree.JFileTree; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.itextarea.UITextArea; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.layout.TableLayout; +import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.scrollruler.ModLineBorder; +import com.fr.file.filter.OnlyShowDirectoryFileFilter; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; -import com.fr.general.NameObject; import com.fr.stable.Nameable; +import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; +import com.fr.third.org.hibernate.boot.jaxb.SourceType; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -/** - * @author yaohwu - */ public class EnvListPane extends JListControlPane { public EnvListPane() { super(); addEditingListner(new PropertyChangeAdapter() { - @Override public void propertyChange() { String tempName = getEditingName(); String[] allListNames = nameableList.getAllNames(); @@ -46,6 +86,7 @@ public class EnvListPane extends JListControlPane { nameableList.stopEditing(); JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(EnvListPane.this), Inter.getLocText(waning, sign)); setWarnigText(editingIndex); + return; } } }); @@ -56,7 +97,6 @@ public class EnvListPane extends JListControlPane { * * @return 返回添加按钮的NameableCreator */ - @Override public NameableCreator[] createNameableCreators() { NameableCreator local = new NameObjectCreator(Inter.getLocText("Env-Local_Directory"), "com/fr/design/images/data/bind/localconnect.png", LocalEnv.class, LocalEnvPane.class); @@ -78,13 +118,14 @@ public class EnvListPane extends JListControlPane { public void populateEnvManager(String selectedEnv) { DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); Iterator nameIt = mgr.getEnvNameIterator(); - List nameObjectList = new ArrayList<>(); + List nameObjectList = new ArrayList(); + nameIt.hasNext(); while (nameIt.hasNext()) { String name = nameIt.next(); nameObjectList.add(new NameObject(name, mgr.getEnv(name))); } - this.populate(nameObjectList.toArray(new NameObject[0])); + this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); if (StringUtils.isBlank(selectedEnv)) { selectedEnv = mgr.getCurEnvName(); @@ -102,10 +143,457 @@ public class EnvListPane extends JListControlPane { DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); mgr.clearAllEnv(); Nameable[] res = this.update(); - for (Nameable re : res) { - NameObject nameObject = (NameObject) re; + NameObject[] envNameObjectArray = new NameObject[res.length]; + java.util.Arrays.asList(res).toArray(envNameObjectArray); + for (int i = 0; i < envNameObjectArray.length; i++) { + NameObject nameObject = envNameObjectArray[i]; mgr.putEnv(nameObject.getName(), (Env) nameObject.getObject()); } + return this.getSelectedName(); } -} \ No newline at end of file + + public static class LocalEnvPane extends BasicBeanPane { + + private UITextField pathTextField; + private JFileTree localEnvTree; + + public LocalEnvPane() { + this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); + + // northPane + JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + this.add(northPane, BorderLayout.NORTH); + + northPane.add(new UILabel(Inter.getLocText("Location") + ":"), BorderLayout.WEST); + northPane.add(pathTextField = new UITextField(), BorderLayout.CENTER); + + // 删除选择文件按钮 添加JFileTree + + // centerPane + JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + this.add(centerPane, BorderLayout.CENTER); + + // 添加JFileTree + localEnvTree = new JFileTree(); + JScrollPane localEnvPane = new JScrollPane(localEnvTree); + centerPane.add(localEnvPane, BorderLayout.CENTER); + + // 设置根路径File 和 文件过滤类型 + localEnvTree.setFileFilter(new OnlyShowDirectoryFileFilter()); + localEnvTree.setRootFiles(File.listRoots()); + localEnvTree.addTreeSelectionListener(new TreeSelectionListener() { + + @Override + public void valueChanged(TreeSelectionEvent e) { + pathTextField.setText(localEnvTree.getSelectedFile().getPath()); + } + }); + + UITextArea description = new UITextArea(); + centerPane.add(description, BorderLayout.SOUTH); + description.setText(Inter.getLocText("Env-Des1")); + description.setEditable(false); + } + + @Override + protected String title4PopupWindow() { + return Inter.getLocText("Location"); + } + + @Override + public LocalEnv updateBean() { + String path = pathTextField.getText(); + return LocalEnv.createEnv(path); + } + + public String getPath() { + return pathTextField.getText(); + } + + @Override + public void populateBean(LocalEnv ob) { + if (StringUtils.isBlank(ob.getPath())) { + return; + } + pathTextField.setText(ob.getPath()); + + final File tmpFile = new File(ob.getPath()); + localEnvTree.selectFile(tmpFile); + localEnvTree.setEnabled(true); + } + } + + public static class RemoteEnvPane extends BasicBeanPane { + public static final int HTTPS_HOST_INDEX = 8; + public static final int HTTP_HOST_INDEX = 7; + + private UICheckBox httpsCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Https_Enable")); + private UITextField servletPathField = new UITextField(); + private UITextField hostNameField = new UITextField(); + private UITextField portNameField = new UITextField(); + private UITextField webApplyField = new UITextField(); + private UITextField servletField = new UITextField(); + private UITextField userTextField = new UITextField(); + private UIPassWordField passwordTextField = new UIPassWordField(); + private UITextField certificatePath = new UITextField(); + private UIPassWordField certificatePass = new UIPassWordField(); + private UIButton chooseDirBtn = new UIButton("..."); + private String envPath; + private String hint; + + // 各种参数面板 + private JPanel northPane; + // 提示面板 + private JPanel previewPane; + // 面板的所有组件 + private Component[][] coms; + DocumentListener docListener = new DocumentListener() { + + @Override + public void changedUpdate(DocumentEvent e) { + showServletPathField(httpsCheckBox.isSelected()); + } + + @Override + public void insertUpdate(DocumentEvent e) { + showServletPathField(httpsCheckBox.isSelected()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + showServletPathField(httpsCheckBox.isSelected()); + } + }; + + private void setHttpsState(boolean enable){ + chooseDirBtn.setEnabled(enable); + DesignerEnvManager.getEnvManager().setHttps(enable); + } + + public RemoteEnvPane() { + this.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Inter.getLocText("Config_Servlet"))); + this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); + // 位置 + JPanel servletPathPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + servletPathPane.add(new UILabel(Inter.getLocText("Server_Path") + ":")); + servletPathField.setEditable(false); + + hostNameField.getDocument().addDocumentListener(docListener); + portNameField.getDocument().addDocumentListener(docListener); + webApplyField.getDocument().addDocumentListener(docListener); + servletField.getDocument().addDocumentListener(docListener); + + // 主机名 + JPanel servletNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + servletNamePane.add(new UILabel(Inter.getLocText("Host_Name") + "/IP" + ":")); + // 端口 + JPanel portNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + portNamePane.add(new UILabel(Inter.getLocText("Port") + ":")); + // web应用 + JPanel webApplyPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + webApplyPane.add(new UILabel(Inter.getLocText("Web_Apply") + ":")); + // servlet + JPanel servletPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + servletPane.add(new UILabel("Servlet" + ":")); + // 用户名 + JPanel userNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + userNamePane.add(new UILabel(Inter.getLocText("Username") + ":")); + // 密码 + JPanel passWordPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + passWordPane.add(new UILabel(Inter.getLocText("Password") + ":")); + // https证书路径 + JPanel certificatePathPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + certificatePathPane.add(new UILabel(Inter.getLocText("FR-Designer_Certificate_Path")+ ":")); + // https秘钥 + JPanel certificatePassPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + certificatePassPane.add(new UILabel(Inter.getLocText("FR-Designer_Certificate_Pass") + ":")); + + //输入密码的时候检测下大写锁定 + passwordTextField.addMouseListener(new MouseAdapter() { + public void mouseEntered(MouseEvent e) { + if (java.awt.Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) { + hint = Inter.getLocText("CapsLock"); + } else { + hint = null; + } + ToolTipManager.sharedInstance().setInitialDelay(100); + passwordTextField.setToolTipText(hint); + } + }); + + coms = new Component[][]{ + new Component[]{initHttpsCheckBoxPane(),new UILabel()}, + new Component[]{servletPathPane, initServletNameToolBar()}, + new Component[]{servletNamePane, hostNameField}, + new Component[]{portNamePane, portNameField}, + new Component[]{webApplyPane, webApplyField}, + new Component[]{servletPane, servletField}, + new Component[]{userNamePane, userTextField}, + new Component[]{passWordPane, passwordTextField}, + new Component[]{certificatePathPane,initHttpsPane()}, + new Component[]{certificatePassPane,certificatePass} + }; + + setHttpsState(httpsCheckBox.isSelected()); + initNorthPane(true); + initCenterPane(); + this.add(northPane, BorderLayout.NORTH); + this.add(previewPane, BorderLayout.CENTER); + } + + private JToolBar initServletNameToolBar(){ + JToolBar servletNameToolBar = new JToolBar(); + + servletNameToolBar.setFloatable(false); + servletNameToolBar.setLayout(FRGUIPaneFactory.createBorderLayout()); + + servletNameToolBar.add(this.servletPathField); + UIButton testConnctionButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/m_web/cache.png")); + testConnctionButton.setToolTipText(Inter.getLocText("Datasource-Test_Connection")); + servletNameToolBar.add(testConnctionButton, BorderLayout.EAST); + + testConnctionButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent ev) { + if (testConnection()) { + JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(RemoteEnvPane.this), Inter.getLocText("Datasource-Connection_successfully")); + } + } + }); + + return servletNameToolBar; + } + + private void initCenterPane(){ + // centerPane + previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); + previewPane.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Inter.getLocText("Note"))); + + JTextPane previewTextArea = new JTextPane(); + + // e:当行的长度大于所分配的宽度时,将换行. +// previewTextArea.setLineWrap(true); + previewTextArea.setEditable(false); + previewTextArea.setText(Inter.getLocText("Env-Des2")); + try { + previewTextArea.getDocument().insertString(previewTextArea.getText().length(), Inter.getLocText("Env_Des"), this.getRedSytleAttribute()); + previewTextArea.getDocument().insertString(previewTextArea.getText().length(), "\n" + Inter.getLocText("FR-Designer_Env_Des_Https"), this.getRedSytleAttribute()); + } catch (BadLocationException e) { + FRContext.getLogger().error(e.getMessage(), e); + } + previewPane.add(new JScrollPane(previewTextArea), BorderLayout.CENTER); + } + + @Override + protected String title4PopupWindow() { + return "Remote"; + } + + private JPanel initHttpsPane(){ + JPanel httpsPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + httpsPane.setLayout(FRGUIPaneFactory.createBorderLayout()); + httpsPane.add(certificatePath,BorderLayout.CENTER); + httpsPane.add(chooseDirBtn, BorderLayout.EAST); + chooseDirBtn.setPreferredSize(new Dimension(25, 25)); + chooseDirBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + int saveValue = fileChooser.showOpenDialog(DesignerContext.getDesignerFrame()); + if (saveValue == JFileChooser.APPROVE_OPTION) { + File selectedFile = fileChooser.getSelectedFile(); + certificatePath.setText(selectedFile.getAbsolutePath()); + } + } + }); + return httpsPane; + } + + private JPanel initHttpsCheckBoxPane(){ + JPanel checkBoxPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); + checkBoxPane.add(httpsCheckBox); + httpsCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + boolean isHttps = httpsCheckBox.isSelected(); + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + manager.setHttps(isHttps); + setHttpsState(isHttps); + updateNorthPane(isHttps); + } + }); + return checkBoxPane; + } + + private void setHttpsParas(){ + System.setProperty("javax.net.ssl.trustStore", this.certificatePath.getText()); + System.setProperty("javax.net.ssl.trustStorePassword", new String(this.certificatePass.getPassword())); + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + manager.setCertificatePath(this.certificatePath.getText()); + manager.setCertificatePass(new String(this.certificatePass.getPassword())); + manager.setHttps(this.httpsCheckBox.isSelected()); + } + + private boolean testConnection() { + RemoteEnv env = new RemoteEnv(); + String url = servletPathField.getText(); + env.setPath(url); + env.setUser(userTextField.getText()); + env.setPassword(new String(passwordTextField.getPassword())); + boolean connect = false; + try { + if (!StringUtils.isBlank(servletPathField.getText().trim())) { + if(url.startsWith("https:") && !this.httpsCheckBox.isSelected()){ + JOptionPane.showMessageDialog(this, Inter.getLocText("Datasource-Connection_failed")); + return false; + } + if(url.startsWith("https:")){ + setHttpsParas(); + } + connect = env.testConnectionWithOutRegisteServer(this); + } + } catch (Exception e) { + JOptionPane.showMessageDialog(this, Inter.getLocText("Datasource-Connection_failed")); + FRContext.getLogger().error(e.getMessage(), e); + } + if (connect) { + try { + String remoteVersion = env.getDesignerVersion(); + 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; + } + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + + } + + return connect; + } + + private AttributeSet getRedSytleAttribute() { + SimpleAttributeSet ds = new SimpleAttributeSet(); + StyleConstants.setForeground(ds, Color.red); + return ds; + } + + /** + * 显示show the content of serverPathFiled + * @param isHttps 是否启用https + */ + public void showServletPathField(boolean isHttps) { + String s = StringUtils.isBlank(webApplyField.getText()) ? "" : "/", t = StringUtils.isBlank(servletField.getText()) ? "" : "/", colon = StringUtils.isBlank(portNameField.getText()) ? "" + : ":"; + String prefix = isHttps ? "https://" : "http://"; + servletPathField.setText(prefix + hostNameField.getText() + colon + portNameField.getText() + s + webApplyField.getText() + t + servletField.getText()); + } + + @Override + public void populateBean(RemoteEnv ob) { + envPath = ob.getPath(); + boolean isHttps = false; + if(envPath != null){ + isHttps = envPath.startsWith("https"); + httpsCheckBox.setSelected(isHttps); + setHttpsState(isHttps); + } + updateNorthPane(isHttps); + if (envPath == null || ComparatorUtils.equals(envPath, StringUtils.EMPTY)) { + this.hostNameField.setText(StringUtils.EMPTY); + this.portNameField.setText(StringUtils.EMPTY); + this.webApplyField.setText(StringUtils.EMPTY); + this.servletField.setText(StringUtils.EMPTY); + this.servletPathField.setText(StringUtils.EMPTY); + this.httpsCheckBox.setSelected(false); + } else { + DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); + this.certificatePath.setText(manager.getCertificatePath()); + this.certificatePass.setText(manager.getCertificatePass()); + // 第二次出现":"的地方,port位置起始点 + int secondTime = envPath.indexOf(":", envPath.indexOf(":") + 1); + // 第三次出现"/"的地方 + int thirdTime = envPath.indexOf("/", secondTime + 1); + // 最后出现"/"的地方 + int lastTime = envPath.lastIndexOf("/"); + String hostName = isHttps ? envPath.substring(HTTPS_HOST_INDEX, secondTime) : envPath.substring(HTTP_HOST_INDEX, secondTime); + this.hostNameField.setText(hostName); + if (thirdTime < 0) { + this.portNameField.setText(envPath.substring(secondTime + 1)); + this.webApplyField.setText(StringUtils.EMPTY); + } else { + this.portNameField.setText(envPath.substring(secondTime + 1, thirdTime)); + if (thirdTime == lastTime) { + this.webApplyField.setText(StringUtils.EMPTY); + } else { + this.webApplyField.setText(envPath.substring(thirdTime + 1, lastTime)); + } + this.servletField.setText(envPath.substring(lastTime + 1)); + } + this.servletPathField.setText(envPath); + } + + this.userTextField.setText(ob.getUser() == null ? StringUtils.EMPTY : ob.getUser()); + + this.passwordTextField.setText(ob.getPassword() == null ? StringUtils.EMPTY : ob.getPassword()); + } + + private void initNorthPane(boolean isHttps){ + double p = TableLayout.PREFERRED; + double f = TableLayout.FILL; + double[] rowSize; + double[] size = {p,p,p,p,p,p,p,p}; + double[] httpsSize = {p,p,p,p,p,p,p,p,p,p}; + if(isHttps){ + rowSize = httpsSize; + }else{ + rowSize = size; + } + double[] columnSize = {p, f}; + northPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); + } + + private void updateNorthPane(boolean isHttps){ + this.removeAll(); + initNorthPane(isHttps); + this.add(northPane, BorderLayout.NORTH); + this.add(previewPane,BorderLayout.CENTER); + this.revalidate(); + this.doLayout(); + this.repaint(); + } + + @Override + public RemoteEnv updateBean() { + String hostName = this.hostNameField.getText(); +// String port = this.portNameField.getText(); + String webApply = this.webApplyField.getText(); + String servlet = this.servletField.getText(); + String path = this.servletPathField.getText(); + String user = this.userTextField.getText(); + String password = new String(this.passwordTextField.getPassword()); + if (isAllEmpty(new String[]{hostName, webApply, servlet})) { + path = StringUtils.EMPTY; + } + + return new RemoteEnv(path, user, password); + } + + private boolean isAllEmpty(String[] strs) { + for (int i = 0; i < strs.length; i++) { + if (StringUtils.isNotEmpty(strs[i])) { + return false; + } + } + return true; + } + } + + public static void main(String[] args) { + Byte[] a = new Byte[1]; + System.out.println(a.getClass()); + } +} diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index c1533aca5..ed43bc2da 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -1,6 +1,13 @@ package com.fr.env; -import com.fr.base.*; +import com.fr.base.AbstractEnv; +import com.fr.base.EnvException; +import com.fr.base.FRContext; +import com.fr.base.ModifiedTable; +import com.fr.base.Parameter; +import com.fr.base.StoreProcedureParameter; +import com.fr.base.TableData; +import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreUtils; @@ -18,21 +25,31 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrameFileDealerPane; +import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.file.CacheManager; -import com.fr.file.ConnectionConfig; -import com.fr.file.TableDataConfig; +import com.fr.file.DatasourceManager; +import com.fr.file.DatasourceManagerProvider; import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRLogger; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.general.LogRecordTime; +import com.fr.general.LogUtils; import com.fr.general.http.HttpClient; -import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.license.function.VT4FR; import com.fr.regist.License; -import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; -import com.fr.stable.*; +import com.fr.stable.ArrayUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.JavaCompileInfo; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLPrintWriter; @@ -41,25 +58,42 @@ import com.fr.stable.xml.XMLableReader; import com.fr.web.ResourceConstants; import javax.swing.*; -import javax.xml.transform.*; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.awt.*; -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.NoRouteToHostException; import java.net.Socket; import java.net.URLEncoder; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Timer; +import java.util.TimerTask; import java.util.logging.Level; import java.util.regex.Pattern; -/** - * @author null - */ -public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { +public class RemoteEnv extends AbstractEnv { private static final int TIME_OUT = 30 * 1000; private static final int PLAIN_SOCKET_PORT = 80; private static final int SSL_PORT = 443; @@ -69,7 +103,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; - private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; + private final static String[] FILE_TYPE = {"cpt", "frm", "form", "cht", "chart"}; private String path; private String user; private String password; @@ -79,7 +113,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private int licNotSupport = 0; private boolean isRoot = false; private Timer logTimer = null; - private static ThreadLocal threadLocal = new ThreadLocal<>(); + private static ThreadLocal threadLocal = new ThreadLocal(); private boolean isReadTimeOut = false; private String buildFilePath; @@ -109,7 +143,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 当前设计环境的用户名,用于远程设计 */ - @Override public String getUser() { return user; } @@ -123,11 +156,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return password; } - /** - * 修复密码中包含特殊字符,无法登录的问题 - * - * @return - */ + // 修复密码中包含特殊字符,无法登录的问题 private String getEncodedPassword() { try { return URLEncoder.encode(password, "UTF-8"); @@ -187,39 +216,31 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 根据nameValuePairs,也就是参数对,生成PostMethod */ - private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { + private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException, UnsupportedEncodingException { String methodPath = this.path; if (!isSignIn) { methodPath = methodPath + "?id=" + createUserID(); } - HttpClient client = new HttpClient(methodPath, para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ - client.asGet(); - return client; + return new HttpClient(methodPath, para); } /** * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters */ - private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { + private HttpClient createHttpMethod2(HashMap para) throws EnvException { String methodPath = path + '?' + "id=" + createUserID(); - return new HttpClient(methodPath); + return new HttpClient(methodPath, para, true); } - /* - * Read the response body. - * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 - * - * 这样做的目的是确保method.releaseConnection - * - * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... - */ + /* + * Read the response body. + * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 + * + * 这样做的目的是确保method.releaseConnection + * + * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... + */ /** * execute method之后,取返回的inputstream @@ -255,6 +276,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } else if (ComparatorUtils.equals(message, RemoteDeziConstants.FILE_LOCKED)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Remote_File_is_Locked")); return null; + } else if (message.startsWith(RemoteDeziConstants.RUNTIME_ERROR_PREFIX)) { } return new ByteArrayInputStream(bytes); } finally { @@ -341,7 +363,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 链接是否成功 * @throws Exception 异常 */ - @Override public boolean testServerConnectionWithOutShowMessagePane() throws Exception { return testConnection(false, true, DesignerContext.getDesignerFrame()); } @@ -361,7 +382,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { extraChangeEnvPara(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "test_server_connection"); para.put("user", user); @@ -376,11 +397,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl String res = stream2String(execute4InputStream(client)); if (res == null) { if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText("Datasource-Connection_failed"), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(parentComponent, Inter.getLocText("Datasource-Connection_failed")); } return false; } else if (ComparatorUtils.equals(res, "true")) { @@ -390,33 +407,22 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } return true; } else if (ComparatorUtils.equals(res, "invalid username or password.")) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}), - Inter.getLocText("FR-Server-All_Error"), - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(parentComponent, + Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) + , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); return false; } else if (res.contains("RegistEditionException")) { if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"}), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE - ); + JOptionPane.showMessageDialog(parentComponent, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); } else { - FRContext.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + FRLogger.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); } return false; } else if (ComparatorUtils.equals(res, "war not support remote design.")) { if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"}), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(parentComponent, Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); } else { - FRContext.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + FRLogger.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); } return false; } else { @@ -444,17 +450,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { SignIn.signIn(this); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } } /** * 心跳访问,用来更新当前用户的访问时间 * - * @throws Exception e + * @throws Exception */ public void heartBeatConnection() throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "heart_beat"); para.put("user", user); @@ -471,7 +477,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // DesignerFrameFileDealerPane.getInstance().refresh(); // } // } catch (Exception e) { -// FRContext.getLogger().error(e.getMessage()); +// FRLogger.getLogger().error(e.getMessage()); // } } @@ -480,7 +486,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @return 描述环境名字的字符串 */ - @Override public String getEnvDescription() { return Inter.getLocText("Env-Remote_Server"); } @@ -488,7 +493,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 登录,返回userID */ - @Override public void signIn() throws Exception { if (clock != null && clock.connected) { return; @@ -499,7 +503,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } clearUserID(); startLogTimer(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "r_sign_in"); para.put("user", user); @@ -520,7 +524,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } timer = new Timer(); timer.schedule(new TimerTask() { - @Override public void run() { try { RemoteEnv.this.setThreadLocal("HEART_BEAT"); @@ -540,13 +543,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl logTimer = new Timer(); logTimer.schedule(new TimerTask() { - @Override public void run() { try { RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); FRContext.getCurrentEnv().printLogMessage(); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FRLogger.getLogger().info(e.getMessage()); } } }, 10000, 10000); @@ -563,9 +565,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 根据userID sign out * * @return 成功签出返回true - * @throws Exception e + * @throws Exception */ - @Override public boolean signOut() throws Exception { if (userID == null) { return true; @@ -576,7 +577,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // richer:把轮训使用的定时器也去掉 timer.cancel(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "r_sign_out"); para.put("id", userID); @@ -593,7 +594,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { resJSON = stream2String(execute4InputStream(client)); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } if (resJSON == null) { @@ -640,7 +641,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } JSONArray ja = new JSONArray(filePathes); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", cmd); para.put("pathes", ja.toString()); @@ -662,7 +663,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param filePathes 文件路径 * @return 成功解锁返回true - * @throws Exception e + * @throws Exception */ public boolean releaseLock(String[] filePathes) throws Exception { return doLockOperation(filePathes, "design_release_lock"); @@ -680,7 +681,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return false; } - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_report_exist"); para.put("report_path", reportPath); @@ -695,11 +696,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 * * @param tplPath 路径 - * @throws Exception e + * @throws Exception */ @Override public void unlockTemplate(String tplPath) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_close_report"); para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); @@ -748,9 +749,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 刷新数出流,并提交 * - * @throws IOException e + * @throws IOException */ - @Override public void flush() throws IOException { super.flush(); post2Server(); @@ -760,9 +760,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 将指定字节写入输入流数组 * * @param b 写入的字节 + * @throws IOException */ @Override - public void write(int b) { + public void write(int b) throws IOException { out.write(b); } @@ -783,7 +784,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // 把database写成xml文件到out DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_test_con"); @@ -796,18 +797,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } - @Override - public boolean updateAuthorities(DesignAuthority[] authorities) throws Exception { - return RemoteEnvUtils.updateAuthorities(authorities, this); - } - - @Override - public DesignAuthority[] getAuthorities() { - - return RemoteEnvUtils.getAuthorities(this); - - } - /** * ben:取schema */ @@ -816,7 +805,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl ByteArrayOutputStream out = new ByteArrayOutputStream(); DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_schema"); InputStream input = postBytes2ServerB(out.toByteArray(), para); @@ -833,7 +822,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl public TableProcedure[] getTableProcedure(com.fr.data.impl.Connection database, String type, String schema) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_tables"); para.put("__type__", type); @@ -845,7 +834,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return DavXMLUtils.readXMLSQLTables(input); } - @Override public List getProcedures(com.fr.data.impl.Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { HashMap schemaTableProcedureMap = new HashMap(); List sqlTableObjs = new ArrayList(); @@ -878,11 +866,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param folderPath 文件名 * @return 成功创建返回true - * @throws Exception e + * @throws Exception */ @Override public boolean createFolder(String folderPath) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_create_folder"); para.put("folder_path", folderPath); @@ -902,11 +890,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param filePath :目标文件相对路径 * @return 成功新建返回true - * @throws Exception e + * @throws Exception */ - @Override public boolean createFile(String filePath) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_create_file"); para.put("file_path", filePath); @@ -921,9 +908,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } - @Override public boolean renameFile(String newPath, String oldPath) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_rename_file"); para.put("newPath", newPath); @@ -944,7 +930,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param filePath :目标文件相对路径 * @return 文件是否存在 - * @throws Exception e + * @throws Exception */ @Override public boolean fileExists(String filePath) throws Exception { @@ -952,7 +938,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return false; } - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_file_exists"); para.put("file_path", filePath); @@ -972,15 +958,14 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param filePath 文件路径 * @return 文件被锁住了,返回true - * @throws Exception e + * @throws Exception */ - @Override public boolean fileLocked(String filePath) throws Exception { if (filePath == null) { return false; } - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_file_locked"); para.put("file_path", filePath); @@ -1001,7 +986,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param env 用户环境 */ - @Override public void registerUserEnv(UserBaseEnv env) { } @@ -1009,7 +993,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 用于检测用户环境 * ,启动定时器 */ - @Override public void startUserCheckTimer() { } @@ -1026,13 +1009,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param filePath 文件地址 * @return 删除成功返回true */ - @Override public boolean deleteFile(String filePath) { if (filePath == null) { return false; } try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "delete_file"); para.put("file_path", filePath); @@ -1046,7 +1028,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } return false; } @@ -1057,10 +1039,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param key 键值 * @param value 值 * @return 如果写入成功,返回true - * @throws Exception e + * @throws Exception */ public boolean writePrivilegeMap(String key, String value) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); para.put("current_user", this.user); @@ -1068,8 +1050,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("key", key); para.put("value", value); - //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); + HttpClient client = createHttpMethod(para); //jim :加上user,远程设计点击预览时传递用户角色信息 InputStream input = execute4InputStream(client); if (input == null) { @@ -1082,12 +1063,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * DataSource中去除当前角色没有权限访问的数据源 */ - @Override public void removeNoPrivilegeConnection() { - TableDataConfig dm = TableDataConfig.getInstance(); + DatasourceManagerProvider dm = DatasourceManager.getProviderInstance(); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fs_remote_design"); para.put("cmd", "env_get_role"); para.put("currentUsername", this.getUser()); @@ -1096,11 +1076,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HttpClient client = createHttpMethod(para); InputStream input = execute4InputStream(client); JSONArray ja = new JSONArray(stream2String(input)); - ArrayList toBeRemoveTDName = new ArrayList<>(); + ArrayList toBeRemoveTDName = new ArrayList(); for (int i = 0; i < ja.length(); i++) { String toBeRemoveConnName = (String) ((JSONObject) ja.get(i)).get("name"); - ConnectionConfig.getInstance().removeConnection(toBeRemoveConnName); - Iterator it = dm.getTableDatas().keySet().iterator(); + dm.removeConnection(toBeRemoveConnName); + Iterator it = dm.getTableDataNameIterator(); while (it.hasNext()) { String tdName = (String) it.next(); TableData td = dm.getTableData(tdName); @@ -1121,7 +1101,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param rootFilePath 指定目录 * @return WEB-INF目录下指定路径的文件夹与文件 - * @throws Exception e + * @throws Exception */ @Override public FileNode[] listFile(String rootFilePath) throws Exception { @@ -1133,7 +1113,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param rootFilePath 指定目录 * @return WEB-INF上层目录下指定路径的文件夹与文件 - * @throws Exception e + * @throws Exception */ @Override public FileNode[] listReportPathFile(String rootFilePath) throws Exception { @@ -1143,7 +1123,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { FileNode[] fileNodes; - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fs_remote_design"); para.put("cmd", "design_list_file"); para.put("file_path", rootFilePath); @@ -1160,7 +1140,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // 远程环境下左侧目录树暂不需要打开xlsx,xls文件 fileNodes = DavXMLUtils.readXMLFileNodes(input); - ArrayList al = new ArrayList<>(); + ArrayList al = new ArrayList(); for (int i = 0; i < fileNodes.length; i++) { al.add(fileNodes[i]); } @@ -1179,9 +1159,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param rootFilePath 指定目录 * @return 列出目标目录下所有cpt文件或文件夹 + * @throws Exception */ - @Override - public FileNode[] listCpt(String rootFilePath) { + public FileNode[] listCpt(String rootFilePath) throws Exception { return listCpt(rootFilePath, false); } @@ -1191,11 +1171,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param rootFilePath 指定目录 * @param recurse 是否递归查找其子目录 * @return 列出目标目录下所有cpt文件或文件夹 - * @throws Exception e + * @throws Exception */ - @Override public FileNode[] listCpt(String rootFilePath, boolean recurse) { - List fileNodeList = new ArrayList<>(); + List fileNodeList = new ArrayList(); try { listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); } catch (Exception e) { @@ -1235,14 +1214,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 数据集的参数 * @throws Exception 获取参数失败则抛出此异常 */ - @Override public Parameter[] getTableDataParameters(TableData tableData) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - //把tableData写成xml文件到out +// 把tableData写成xml文件到out DavXMLUtils.writeXMLFileTableData(tableData, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_td_pars"); InputStream input = postBytes2ServerB(out.toByteArray(), para); @@ -1261,13 +1239,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 返回存储过程中的所有参数组成的数组 * @throws Exception 如果获取参数失败则抛出此异常 */ - @Override public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); // 把tableData写成xml文件到out DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_sp_pars"); InputStream input = postBytes2ServerB(out.toByteArray(), para); @@ -1292,7 +1269,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 实际的二维数据集 * @throws Exception 如果生成数据失败则抛出此异常 */ - @Override public EmbeddedTableData previewTableData(TableDataSource dataSource, Object tableData, java.util.Map parameterMap, int rowCount) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -1302,7 +1278,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // 把parameterMap转成JSON格式的字符串 JSONObject jo = new JSONObject(parameterMap); String jsonParameter = jo.toString(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_preview_td"); para.put("pars", jsonParameter); @@ -1328,7 +1304,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 实际的二位数据条 * @throws Exception 异常 */ - @Override public Object previewTableData(Object tableData, java.util.Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { return previewTableData(tableData, parameterMap, -1); } @@ -1348,13 +1323,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ public InputStream postBytes2ServerB(byte[] bytes, HashMap para) throws Exception { HttpClient client = createHttpMethod2(para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ -// client.asGet(); client.setContent(bytes); return execute4InputStream(client); } @@ -1364,7 +1332,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * The method will be invoked when read data from XML file.
* May override the method to read the data that you saved. */ - @Override public void readXML(XMLableReader reader) { if (reader.isChildNode()) { String tmpVal; @@ -1389,7 +1356,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param writer the PrintWriter. */ - @Override public void writeXML(XMLPrintWriter writer) { writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); } @@ -1468,7 +1434,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { String infor = Inter.getLocText("FR-Server_Version_Tip"); String moreInfo = Inter.getLocText("FR-Server_Version_Tip_MoreInfo"); - FRContext.getLogger().log(Level.WARNING, infor); + FRLogger.getLogger().log(Level.WARNING, infor); new InformationWarnPane(infor, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); return; } @@ -1491,10 +1457,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl Pattern pattern = Pattern.compile("[/:]+"); String[] strs = pattern.split(remoteEnv.path); - //host,如:192.168.100.195 - String shost = strs[1]; - //端口,如:8080 - int sport = Integer.parseInt(strs[2]); + String shost = strs[1];//host,如:192.168.100.195 + int sport = Integer.parseInt(strs[2]);//端口,如:8080 Socket socket = new Socket(shost, sport); //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 @@ -1509,7 +1473,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param resourceName 配置文件的名字,如datasource.xml * @return 输入流 - * @throws Exception e + * @throws Exception */ @Override public InputStream readResource(String resourceName) throws Exception { @@ -1523,14 +1487,18 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param path 制定路径,是基于报表目录下resource文件夹路径 * @return 读到的文件 */ - @Override - public String[] readPathSvgFiles(String path) { - String cataloguePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path); + public File[] readPathSvgFiles(String path) { + String cataloguePath = StableUtils.pathJoin(new String[]{CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path}); + //检查缓存文件保存的目录下serversvgs文件夹是否存在 ,先用来暂存服务器读过来的svg文件 + File catalogue = new File(cataloguePath); + if (!catalogue.exists()) { + catalogue.mkdirs(); + } - ArrayList fileArray = new ArrayList<>(); + ArrayList fileArray = new ArrayList<>(); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); @@ -1544,17 +1512,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl JSONObject jsonObject = (JSONObject) ja.get(i); String svgFileName = (String) jsonObject.get("svgfileName"); String svgfileContent = (String) jsonObject.get("svgfileContent"); - - String file = StableUtils.pathJoin(cataloguePath, svgFileName); + File file = new File(StableUtils.pathJoin(new String[]{cataloguePath, svgFileName})); InputStream in = new ByteArrayInputStream(svgfileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); - ResourceIOUtils.write(file, in); + FileOutputStream out = new FileOutputStream(file); + IOUtils.copyBinaryTo(in, out); fileArray.add(file); } } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } - return fileArray.toArray(new String[fileArray.size()]); + return fileArray.toArray(new File[fileArray.size()]); } @@ -1565,12 +1533,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 是否写入成功 * @throws Exception 异常 */ - @Override public boolean writeSvgFile(SvgProvider svgFile) throws Exception { testServerConnection(); - HashMap para = new HashMap<>(); - para.put("op", "svgrelate"); + HashMap para = new HashMap(); + para.put("op", "svginit"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); para.put("current_uid", this.createUserID()); @@ -1622,7 +1589,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl public boolean writeResource(XMLFileManagerProvider mgr) throws Exception { testServerConnection(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); @@ -1657,10 +1624,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param prefix 当前Env下得工程分类,如reportlets,lib等 * @return InputStream 输入流 */ - @Override public InputStream readBean(String beanPath, String prefix) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fs_remote_design"); para.put("cmd", "design_open"); para.put(RemoteDeziConstants.PREFXI, prefix); @@ -1679,9 +1645,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param prefix 当前Env下得工程分类,如reportlets,lib等 * @return OutputStream 输出流 */ - @Override - public OutputStream writeBean(String beanPath, String prefix) { - HashMap para = new HashMap<>(); + public OutputStream writeBean(String beanPath, String prefix) + throws Exception { + HashMap para = new HashMap(); para.put("op", "fs_remote_design"); para.put("cmd", "design_save_report"); para.put(RemoteDeziConstants.PREFXI, prefix); @@ -1699,7 +1665,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_columns"); para.put("dsName", selectedName); @@ -1730,7 +1696,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getProcedureText(String connectionName, String databaseName) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_procedure_text"); para.put("procedure_name", databaseName); @@ -1747,7 +1713,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_sp_parameters"); para.put("__name__", databaseName); @@ -1764,10 +1730,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 获取datasource.xml文件的修改表 */ - @Override public ModifiedTable getDataSourceModifiedTables(String type) { try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "get_datasource_modified_tables"); para.put("type", type); @@ -1792,7 +1757,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param type 操作类型,是数据连接还是服务器数据集 * @return 写入成功返回true */ - @Override public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -1800,7 +1764,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl // 把tableData写成xml文件到out DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "update_modifytable_to_server"); para.put("type", type); @@ -1820,7 +1784,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl public String[] getProcedureColumns(StoreProcedure storeProcedure, java.util.Map parameterMap) throws Exception { String[] columns; - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "list_sp"); HttpClient client = createHttpMethod(para); @@ -1834,15 +1798,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl columns = DavXMLUtils.readXMLSPColumns(input); return columns; } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } return new String[0]; } + ; + public String[] getProcedureColumns(String name) throws Exception { String[] columns; - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "list_sp_columns_name"); para.put("name", name); @@ -1855,7 +1821,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl columns = DavXMLUtils.readXMLSPColumns(input); return columns; } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } return new String[0]; @@ -1866,10 +1832,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @throws Exception */ - @Override public void printLogMessage() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "get_log_message"); @@ -1879,16 +1844,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } LogRecordTime[] records = LogUtils.readXMLLogRecords(input); for (LogRecordTime logRecordTime : records) { - //TODO + DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); } } - @Override public String getUserID() { return userID; } + //TODO: + /** * 预览存储过程 * @@ -1909,7 +1875,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl String jsonParameter = jo.toString(); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "list_sp"); para.put("pars", jsonParameter); @@ -1933,13 +1899,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } return new ProcedureDataModel[0]; } - @Override public String getAppName() { return "WebReport"; } @@ -1951,11 +1916,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @return 是返回true * @throws Exception */ - @Override public boolean isOracle(Connection database) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_isOracle"); InputStream input = postBytes2ServerB(out.toByteArray(), para); @@ -1965,7 +1929,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return DavXMLUtils.readXMLBoolean(input); } - @Override public String[] getSupportedTypes() { return FILE_TYPE; } @@ -1975,7 +1938,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @return 不支持返回false */ - @Override public boolean isSupportLocalFileOperate() { return false; } @@ -1986,11 +1948,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param path 路径 * @return 有权限则返回true */ - @Override public boolean hasFileFolderAllow(String path) { HttpClient client = null; try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); para.put("current_uid", this.createUserID()); @@ -2004,7 +1965,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); return false; } @@ -2015,7 +1976,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @return 是则返回true */ - @Override public boolean isRoot() { return isRoot; } @@ -2032,7 +1992,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getDesignerVersion() throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_designer_version"); para.put("user", user); @@ -2042,12 +2002,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { return stream2String(execute4InputStream(client)); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FRLogger.getLogger().error(e.getMessage()); } return null; } - @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); } @@ -2057,7 +2016,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl public ArrayList getAllRole4Privilege(boolean isFS) { ArrayList allRoleList = new ArrayList(); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "get_all_role"); para.put("isFS", String.valueOf(isFS)); @@ -2089,7 +2048,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 获取当前env的build文件路径 */ - @Override public String getBuildFilePath() { return StringUtils.isEmpty(buildFilePath) ? ResourceConstants.BUILD_PATH : buildFilePath; } @@ -2097,7 +2055,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 设置当前env的build文件路径 */ - @Override public void setBuildFilePath(String buildFilePath) { this.buildFilePath = buildFilePath; } @@ -2108,9 +2065,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param sourceText 源代码 * @return 编译信息,有可能是成功信息,也有可能是出错或者警告信息 */ - @Override public JavaCompileInfo compilerSourceCode(String sourceText) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_compile_source_code"); InputStream in = postBytes2ServerB(sourceText.getBytes(EncodeConstants.ENCODING_UTF_8), para); @@ -2129,69 +2085,70 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String pluginServiceAction(String serviceID, String req) throws Exception { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_plugin_service_data"); para.put("serviceID", serviceID); para.put("req", req); - //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); + HttpClient client = createHttpMethod(para); //jim :加上user,远程设计点击预览时传递用户角色信息 InputStream inputStream = execute4InputStream(client); return IOUtils.inputStream2String(inputStream); } /** * 远程不启动,使用虚拟服务 - *

* - * @param serviceID serviceID + * @param serviceID */ @Override public void pluginServiceStart(String serviceID) { } @Override - public String[] loadREUFile() { - ResourceIOUtils.delete(StableUtils.pathJoin( - CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), - ShareConstants.DIR_SHARE_CACHE)); - - String zipFilePath = null; + public File[] loadREUFile() throws Exception { + File target = new File(CacheManager.getProviderInstance().getCacheDirectory(), + ShareConstants.DIR_SHARE_CACHE); + StableUtils.deleteFile(target); + StableUtils.mkdirs(target); + File cacheDir = null; + File zip = null; + OutputStream out = null; try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); para.put("current_uid", this.createUserID()); para.put("currentUsername", this.getUser()); HttpClient client = createHttpMethod(para); - //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 - InputStream input = client.getResponseStream(); - - zipFilePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), "share.zip"); - String cacheDir = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE); - - ResourceIOUtils.write(zipFilePath, input); - ResourceIOUtils.unzip(zipFilePath, cacheDir, EncodeConstants.ENCODING_GBK); - - - return ResourceIOUtils.listWithFullPath(cacheDir, new Filter() { - @Override - public boolean accept(String s) { - return s.endsWith(ProjectConstants.REU); - } - }); + InputStream input = client.getResponseStream();//拿到服务端传过来的整个共享文件夹的压缩文件的文件流 + zip = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), "share.zip"); + cacheDir = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), ShareConstants.DIR_SHARE_CACHE); + StableUtils.deleteFile(cacheDir); + StableUtils.mkdirs(cacheDir); + StableUtils.makesureFileExist(zip); + out = new FileOutputStream(zip); + IOUtils.copyBinaryTo(input, out);//放到本地缓存目录下 + + IOUtils.unzip(zip, cacheDir.getAbsolutePath(), EncodeConstants.ENCODING_GBK);//先解压到临时目录 + if (cacheDir.exists() && cacheDir.isDirectory()) { + return cacheDir.listFiles(new FilenameFilter() { + public boolean accept(File file, String s) { + return s.endsWith("reu"); + } + }); + } } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } finally { - - if (zipFilePath != null) { - ResourceIOUtils.delete(zipFilePath); + if (out != null) { + out.flush(); + out.close(); } + StableUtils.deleteFile(zip); } - - return new String[0]; + return new File[0]; } @Override @@ -2204,7 +2161,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl String shareXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_MODULE); String helpXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_HELP); try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); para.put("current_uid", this.createUserID()); @@ -2231,7 +2188,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return true; } try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); para.put("current_uid", this.createUserID()); @@ -2248,22 +2205,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getSharePath() { - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.createUserID()); - para.put("currentUsername", this.getUser()); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - return stream2String(input); - } catch (Exception e) { - return StringUtils.EMPTY; - } + return StringUtils.EMPTY; } - @Override public void doWhenServerShutDown() { } @@ -2284,7 +2228,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl public JSONArray getPluginStatus() { try { - HashMap para = new HashMap<>(); + HashMap para = new HashMap(); para.put("op", "plugin"); para.put("cmd", "get_status"); para.put("current_uid", this.createUserID()); @@ -2297,4 +2241,14 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return JSONArray.create(); } } -} \ No newline at end of file + + public String post(HashMap para, boolean isSignIn) { + try { + HttpClient client = createHttpMethod(para, isSignIn); + return stream2String(execute4InputStream(client)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + return StringUtils.EMPTY; + } + } +} diff --git a/designer-base/src/com/fr/env/SignIn.java b/designer-base/src/com/fr/env/SignIn.java index a5f2860ec..8cb021a82 100644 --- a/designer-base/src/com/fr/env/SignIn.java +++ b/designer-base/src/com/fr/env/SignIn.java @@ -40,4 +40,4 @@ public class SignIn { FRContext.getLogger().error(e.getMessage(), e); } } -} \ No newline at end of file +} From b9b023752ec3e6cd6bdc5a88ee135fc6121bee16 Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 25 May 2018 15:32:42 +0800 Subject: [PATCH 02/29] merge --- .../src/com/fr/design/DesignerEnvManager.java | 194 +- .../design/actions/file/SwitchExistEnv.java | 40 +- .../com/fr/design/file/FileOperations.java | 18 +- .../design/file/HistoryTemplateListPane.java | 4 +- .../com/fr/design/file/TemplateTreePane.java | 57 +- .../fr/design/mainframe/DesignerFrame.java | 123 +- .../DesignerFrameFileDealerPane.java | 86 +- .../com/fr/design/mainframe/TemplatePane.java | 719 ++----- .../loghandler/DesignerLogHandler.java | 20 +- .../src/com/fr/design/utils/DesignUtils.java | 111 +- designer-base/src/com/fr/env/EnvListPane.java | 527 +---- .../src/com/fr/env/LocalEnvPane.java | 9 +- designer-base/src/com/fr/env/RemoteEnv.java | 1697 ++--------------- .../src/com/fr/env/RemoteEnvPane.java | 5 +- designer-base/src/com/fr/env/SignIn.java | 64 +- .../src/com/fr/start/server/FRTomcat.java | 8 +- .../src/com/fr/start/Designer4Debug.java | 6 +- 17 files changed, 753 insertions(+), 2935 deletions(-) diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index 111e4f625..fcc4c2b26 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -4,9 +4,12 @@ package com.fr.design; import com.fr.base.BaseXMLUtils; -import com.fr.base.Env; import com.fr.base.FRContext; import com.fr.base.Utils; +import com.fr.base.env.resource.EnvConfigUtils; +import com.fr.base.env.resource.LocalEnvConfig; +import com.fr.base.env.resource.RemoteEnvConfig; +import com.fr.core.env.EnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.constants.UIConstants; @@ -61,7 +64,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private static final int MAX_SHOW_NUM = 10; private static final String VERSION_80 = "80"; - private static final int CACHINGTEMPLATE_LIMIT = 5; private static DesignerEnvManager designerEnvManager; // gui. private String activationKey = null; @@ -73,7 +75,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; @@ -100,7 +102,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private int language; //2014-8-26默认显示全部, 因为以前的版本, 虽然是false, 实际上是显示所有表, 因此这边要兼容 private boolean useOracleSystemSpace = true; - private int cachingTemplateLimit = CACHINGTEMPLATE_LIMIT; private boolean autoBackUp = true; private int undoLimit = 5; private short pageLengthUnit = Constants.UNIT_MM; @@ -148,7 +149,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private boolean isHttps = false; private static List mapWorkerList = new ArrayList(); - private boolean imageCompress = false;//图片压缩 /** * DesignerEnvManager. @@ -194,7 +194,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (installHome != null) { String name = Inter.getLocText("FR-Engine_DEFAULT"); String envPath = StableUtils.pathJoin(new String[]{installHome, ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME}); - designerEnvManager.putEnv(name, LocalEnv.createEnv(envPath)); + designerEnvManager.putEnv(name, new LocalEnvConfig(envPath)); designerEnvManager.setCurEnvName(name); } } @@ -247,8 +247,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { // 写文件的LogLocation String logLocation = DesignerEnvManager.getEnvManager().getLogLocation(); - //Mac下8.0,9.0 选项-日志设置为空时在根目录下检测文件存在会抛无权限,这里应该设个默认值比较好吧 - if (StringUtils.isNotEmpty(logLocation)) { + if (logLocation != null) { try { Calendar calender = GregorianCalendar.getInstance(); calender.setTimeInMillis(System.currentTimeMillis()); @@ -327,7 +326,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { FRContext.getLogger().error(e.getMessage(), e); } // 清空前一个版本中的工作目录和最近打开 - nameEnvMap = new ListMap(); + nameEnvMap = new ListMap(); recentOpenedFilePathList = new ArrayList(); curEnvName = null; designerEnvManager.saveXMLFile(); @@ -474,7 +473,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { * @return 是默认则返回true */ public boolean isCurrentEnvDefault() { - Env currentEnv = this.getEnv(curEnvName); + EnvConfig currentEnv = this.getEnv(curEnvName); String defaultEnvPath = StableUtils.pathJoin(new String[]{StableUtils.getInstallHome(), ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME}); return ComparatorUtils.equals(new File(defaultEnvPath).getPath(), currentEnv.getPath()); } @@ -482,21 +481,19 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { /** * 返回默认环境 */ - public Env getDefaultEnv() { + public EnvConfig getDefaultEnv() { String installHome = StableUtils.getInstallHome(); - String defaultenvPath = StableUtils.pathJoin(new String[]{installHome, ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME}); + String defaultenvPath = StableUtils.pathJoin(installHome, ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME); defaultenvPath = new File(defaultenvPath).getPath(); - if (nameEnvMap.size() >= 0) { - Iterator> entryIt = nameEnvMap.entrySet().iterator(); - while (entryIt.hasNext()) { - Entry entry = entryIt.next(); - Env env = entry.getValue(); - if (ComparatorUtils.equals(defaultenvPath, env.getPath())) { - return env; - } + Iterator> entryIt = nameEnvMap.entrySet().iterator(); + while (entryIt.hasNext()) { + Entry entry = entryIt.next(); + EnvConfig env = entry.getValue(); + if (ComparatorUtils.equals(defaultenvPath, env.getPath())) { + return env; } } - Env newDefaultEnv = LocalEnv.createEnv(defaultenvPath); + EnvConfig newDefaultEnv = new LocalEnvConfig(defaultenvPath); this.putEnv(Inter.getLocText(new String[]{"Default", "Utils-Report_Runtime_Env"}), newDefaultEnv); return newDefaultEnv; } @@ -509,10 +506,10 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { String defaultenvPath = StableUtils.pathJoin(new String[]{installHome, ProjectConstants.WEBAPP_NAME, ProjectConstants.WEBINF_NAME}); defaultenvPath = new File(defaultenvPath).getPath(); if (nameEnvMap.size() >= 0) { - Iterator> entryIt = nameEnvMap.entrySet().iterator(); + Iterator> entryIt = nameEnvMap.entrySet().iterator(); while (entryIt.hasNext()) { - Entry entry = entryIt.next(); - Env env = entry.getValue(); + Entry entry = entryIt.next(); + EnvConfig env = entry.getValue(); if (ComparatorUtils.equals(defaultenvPath, env.getPath())) { return entry.getKey(); } @@ -635,21 +632,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.useOracleSystemSpace = displayOracleSystem; } - /** - * 配置最大缓存模板个数 - */ - public void setCachingTemplateLimit(int cachingTemplateLimit) { - this.cachingTemplateLimit = cachingTemplateLimit; - } - - - /** - * 获取最大缓存模板个数 - */ - public int getCachingTemplateLimit() { - return this.cachingTemplateLimit; - } - /** * 是否加入产品改良 * @@ -699,7 +681,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { /** * 根据名称返回环境 */ - public Env getEnv(String name) { + public EnvConfig getEnv(String name) { return this.nameEnvMap.get(name); } @@ -709,7 +691,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { * @param name 名称 * @param env 对应的环境 */ - public void putEnv(String name, Env env) { + public void putEnv(String name, EnvConfig env) { this.nameEnvMap.put(name, env); } @@ -1413,16 +1395,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.setMaxNumberOrPreviewRow(reader.getAttrAsInt("maxNumberOrPreviewRow", 200)); this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true)); - this.setCachingTemplateLimit(reader.getAttrAsInt("cachingTemplateLimit", CACHINGTEMPLATE_LIMIT)); this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true)); - this.setImageCompress(reader.getAttrAsBoolean("imageCompress", true)); this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true)); this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false)); // peter:读取webinfLocation if ((tmpVal = reader.getAttrAsString("webinfLocation", null)) != null) { // marks:兼容6.1的 // marks:设置默认的目录. - Env reportServer = LocalEnv.createEnv(tmpVal); + EnvConfig reportServer = new LocalEnvConfig(tmpVal); String curReportServerName = Inter.getLocText("Server-Embedded_Server"); this.putEnv(curReportServerName, reportServer); @@ -1479,7 +1459,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { // marks:获取名字 String reportServerName = reader.getAttrAsString("name", null); - Env env = readEnv(reader); + EnvConfig env = readEnv(reader); if (env == null) { return; } @@ -1605,7 +1585,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { Iterator nameIt = this.getEnvNameIterator(); while (nameIt.hasNext()) { String envName = nameIt.next(); - Env env = this.getEnv(envName); + EnvConfig env = this.getEnv(envName); writeEnv(writer, envName, env); } @@ -1635,15 +1615,9 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { if (!this.isOracleSystemSpace()) { writer.attr("useOracleSystemSpace", this.isOracleSystemSpace()); } - if (this.getCachingTemplateLimit() >= 0) { - writer.attr("cachingTemplateLimit", this.getCachingTemplateLimit()); - } if (!this.isJoinProductImprove()) { writer.attr("joinProductImprove", this.isJoinProductImprove()); } - if (!this.isImageCompress()) { - writer.attr("imageCompress", this.isImageCompress()); - } if (!this.isAutoBackUp()) { writer.attr("autoBackUp", this.isAutoBackUp()); } @@ -1770,44 +1744,44 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } /* - * 写Env为xml - */ - private static void writeEnv(XMLPrintWriter writer, String name, Env env) { + * 写Env为xml + */ + private static void writeEnv(XMLPrintWriter writer, String name, EnvConfig env) { if (env == null) { return; } - writer.startTAG("Env"); + writer.startTAG("EnvConfig"); writer.classAttr(env.getClass()); writer.attr("name", name); - env.writeXML(writer); - + EnvConfigXMLAdapter xmlAdapter = env instanceof RemoteEnvConfig + ? new RemoteEnvConfigXMLAdapter() + : new LocalEnvConfigXMLAdapter(); + xmlAdapter.fromEnvConfig(env).writeXML(writer); writer.end(); } /* - * 从xml读Env - */ - private static Env readEnv(XMLableReader reader) { - Env env = null; - + * 从xml读Env + */ + private static EnvConfig readEnv(XMLableReader reader) { + EnvConfigXMLAdapter xmlAdapter = null; String tmpVal; //temp value if ((tmpVal = reader.getAttrAsString("class", null)) != null) { - if (tmpVal.endsWith(".LocalEnv")) { - env = LocalEnv.createEnv(); - } else if (tmpVal.endsWith(".RemoteEnv")) { - env = new RemoteEnv(); + if (tmpVal.contains(".LocalEnv")) { + xmlAdapter = new LocalEnvConfigXMLAdapter(); + } else if (tmpVal.contains(".RemoteEnv")) { + xmlAdapter = new RemoteEnvConfigXMLAdapter(); } } - if (env == null) { - return env; + if (xmlAdapter == null) { + return null; } - reader.readXMLObject(env); - - return env; + reader.readXMLObject(xmlAdapter); + return xmlAdapter.toEnvConfig(); } public AlphaFineConfigManager getAlphaFineConfigManager() { @@ -1818,11 +1792,77 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.alphaFineConfigManager = alphaFineConfigManager; } - public boolean isImageCompress() { - return imageCompress; + private interface EnvConfigXMLAdapter extends XMLReadable, XMLWriter { + EnvConfig toEnvConfig(); + + EnvConfigXMLAdapter fromEnvConfig(EnvConfig envConfig); } - public void setImageCompress(boolean imageCompress) { - this.imageCompress = imageCompress; + 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; + } } -} +} \ No newline at end of file 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 ea709385f..2da352c83 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -3,6 +3,9 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.env.resource.LocalEnvConfig; +import com.fr.base.env.resource.RemoteEnvConfig; +import com.fr.core.env.EnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; @@ -36,9 +39,6 @@ import java.util.logging.Level; public class SwitchExistEnv extends MenuDef { - // 标志开始切换环境 - private static boolean isSwitching = false; - public SwitchExistEnv() { this.setMenuKeySet(KeySetUtils.SWITCH_ENV); this.setName(getMenuKeySet().getMenuName()); @@ -74,10 +74,10 @@ public class SwitchExistEnv extends MenuDef { public GetExistEnvAction(String envName) { this.setName(envName); - Env env = DesignerEnvManager.getEnvManager().getEnv(envName); - if (env instanceof LocalEnv) { + EnvConfig env = DesignerEnvManager.getEnvManager().getEnv(envName); + if (env instanceof LocalEnvConfig) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); - } else if (env instanceof RemoteEnv) { + } else if (env instanceof RemoteEnvConfig) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); } } @@ -104,35 +104,29 @@ public class SwitchExistEnv extends MenuDef { * @param e 事件 */ public void actionPerformed(ActionEvent e) { - isSwitching = true; DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - Env selectedEnv = envManager.getEnv(this.getName()); + EnvConfig selectedEnv = envManager.getEnv(this.getName()); try { if (selectedEnv instanceof RemoteEnv && !((RemoteEnv) selectedEnv).testServerConnection()) { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); return; } - String remoteVersion = selectedEnv.getDesignerVersion(); - 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"); - FRLogger.getLogger().log(Level.WARNING, infor); - new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); - return; - } +// String remoteVersion = selectedEnv.getDesignerVersion(); +// 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"); +// FRLogger.getLogger().log(Level.WARNING, infor); +// new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); +// return; +// } SignIn.signIn(selectedEnv); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); } catch (Exception em) { FRContext.getLogger().error(em.getMessage(), em); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); TemplatePane.getInstance().editItems(); - } finally { - isSwitching = false; } } } - - public static boolean isSwitching() { - return isSwitching; - } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/file/FileOperations.java b/designer-base/src/com/fr/design/file/FileOperations.java index 390a28e0c..34b86cbc6 100644 --- a/designer-base/src/com/fr/design/file/FileOperations.java +++ b/designer-base/src/com/fr/design/file/FileOperations.java @@ -5,34 +5,34 @@ public interface FileOperations { /** *打开选中的报表文件 */ - public void openSelectedReport(); + public void openSelectedReport(); /** *打开文件夹 */ - public void openContainerFolder(); + public void openContainerFolder(); /** *刷新 */ - public void refresh(); + public void refresh(); /** *删除文件 */ - public void deleteFile(); + public void deleteFile(); /** *加上文件锁 */ - public void lockFile(); + public void lockFile(); /** *文件解锁 */ - public void unLockFile(); + public void unLockFile(); - public String getSelectedTemplatePath(); + public String getSelectedTemplatePath(); /** *文件名是否存在 @@ -41,5 +41,5 @@ public interface FileOperations { * @param suffix 后缀名 * @return 是否存在 */ - public boolean isNameAlreadyExist(String newName, String oldName, String suffix); -} + public boolean isNameAlreadyExist(String newName, String oldName, String suffix); +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java index deda53953..dfd1f123f 100644 --- a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java +++ b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java @@ -38,7 +38,7 @@ import com.fr.design.utils.gui.GUIPaintUtils; public class HistoryTemplateListPane extends JPanel implements FileOperations, CallbackEvent { //最大保存内存中面板数,为0时关闭优化内存 - private static final int DEAD_LINE = DesignerEnvManager.getEnvManager().getCachingTemplateLimit(); + private static final int DEAD_LINE = 5; private static final int LIST_BORDER = 4; private List> historyList; private JTemplate editingTemplate; @@ -438,4 +438,4 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations, C return isNameAreadyExist; } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/file/TemplateTreePane.java b/designer-base/src/com/fr/design/file/TemplateTreePane.java index 969a66f32..a52e42389 100644 --- a/designer-base/src/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/com/fr/design/file/TemplateTreePane.java @@ -26,7 +26,11 @@ import com.sun.jna.platform.FileUtils; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.*; -import java.awt.event.*; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -139,7 +143,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { public void openContainerFolder() { FileNode fn = TemplateTreePane.this.reportletsTree.getSelectedFileNode(); LocalEnv localEnv = (LocalEnv) FRContext.getCurrentEnv(); - String filePath = StableUtils.pathJoin(new String[]{localEnv.path, fn.getEnvPath()}); + String filePath = StableUtils.pathJoin(localEnv.getPath(), fn.getEnvPath()); filePath = filePath.substring(0, filePath.lastIndexOf(CoreConstants.SEPARATOR)); try { Desktop.getDesktop().open(new File(filePath)); @@ -189,6 +193,16 @@ public class TemplateTreePane extends JPanel implements FileOperations { reportletsTree.refresh(); } + @Override + public void lockFile() { + throw new UnsupportedOperationException("unsupport now"); + } + + @Override + public void unLockFile() { + throw new UnsupportedOperationException("unsupport now"); + } + private void deleteHistory(String fileName) { int index = HistoryTemplateListPane.getInstance().contains(fileName); int size = HistoryTemplateListPane.getInstance().getHistoryCount(); @@ -214,41 +228,6 @@ public class TemplateTreePane extends JPanel implements FileOperations { MutilTempalteTabPane.getInstance().repaint(); } - /** - * 加上文件锁 - */ - public void lockFile() { - FileNode fn = reportletsTree.getSelectedFileNode(); - RemoteEnv remoteEnv = (RemoteEnv) FRContext.getCurrentEnv(); - if (fn == null) { - return; - } - try { - remoteEnv.getLock(new String[]{fn.getEnvPath()}); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage()); - } - reportletsTree.refresh(); - } - - /** - * 文件解锁 - */ - public void unLockFile() { - FileNode fn = reportletsTree.getSelectedFileNode(); - if (fn == null) { - return; - } - RemoteEnv remoteEnv = (RemoteEnv) FRContext.getCurrentEnv(); - try { - remoteEnv.releaseLock(new String[]{fn.getEnvPath()}); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage()); - } - reportletsTree.refresh(); - } public String getSelectedTemplatePath() { return reportletsTree.getSelectedTemplatePath(); @@ -315,6 +294,8 @@ public class TemplateTreePane extends JPanel implements FileOperations { if (fileUtils.hasTrash()) { try { fileUtils.moveToTrash(new File[]{new File(StableUtils.pathJoin(nodeFile.getEnvPath(), nodeFile.getPath()))}); + //todo 走下这个流程,否则集群下其它节点无法同步删除 + FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); } catch (IOException e) { FRLogger.getLogger().info(e.getMessage()); FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); @@ -325,4 +306,4 @@ public class TemplateTreePane extends JPanel implements FileOperations { } } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index 06911ee1d..f00a0830e 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -6,26 +6,19 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; -import com.fr.base.vcs.DesignerMode; +import com.fr.base.env.resource.EnvConfigUtils; +import com.fr.core.env.EnvConfig; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.actions.core.ActionFactory; -import com.fr.design.actions.file.SwitchExistEnv; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; -import com.fr.design.event.DesignerOpenedListener; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.file.MutilTempalteTabPane; -import com.fr.design.file.NewTemplatePane; -import com.fr.design.file.SaveSomeTemplatePane; -import com.fr.design.file.TemplateTreePane; +import com.fr.design.file.*; import com.fr.design.fun.TitlePlaceProcessor; -import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuHighLight; import com.fr.design.gui.iscrollbar.UIScrollBar; @@ -35,7 +28,6 @@ import com.fr.design.mainframe.loghandler.LogMessageBar; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.MenuManager; -import com.fr.design.menu.ShortCut; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.file.FILE; @@ -64,27 +56,14 @@ import javax.swing.border.MatteBorder; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.dnd.DnDConstants; -import java.awt.dnd.DropTarget; -import java.awt.dnd.DropTargetDragEvent; -import java.awt.dnd.DropTargetDropEvent; -import java.awt.dnd.DropTargetEvent; -import java.awt.dnd.DropTargetListener; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; +import java.awt.dnd.*; +import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Set; import java.util.logging.Level; public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { @@ -97,12 +76,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta private static final Integer TOP_LAYER = new Integer((200)); private static java.util.List> appList = new java.util.ArrayList>(); - private List designerOpenedListenerList = new ArrayList<>(); - - //顶部日志+登陆按钮 - private static final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - - private static ToolBarMenuDock ad; + private ToolBarMenuDock ad; private DesktopCardPane centerTemplateCardPane; @@ -186,8 +160,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } public void mouseReleased(MouseEvent e) { - if (DesignerMode.isAuthorityEditing()) { - DesignerMode.setMode(DesignerMode.NORMARL); + if (BaseUtils.isAuthorityEditing()) { + BaseUtils.setAuthorityEditing(false); WestRegionContainerPane.getInstance().replaceDownPane( TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); @@ -263,7 +237,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta this.addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent e) { reCalculateFrameSize(); - if (DesignerMode.isAuthorityEditing()) { + if (BaseUtils.isAuthorityEditing()) { doResize(); } } @@ -294,22 +268,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } - /** - * 注册"设计器初始化完成"的监听 - */ - public void addDesignerOpenedListener(DesignerOpenedListener listener) { - designerOpenedListenerList.add(listener); - } - - /** - * 触发"设计器初始化完成"事件 - */ - public void fireDesignerOpened() { - for (DesignerOpenedListener listener : designerOpenedListenerList) { - listener.designerOpened(); - } - } - protected DesktopCardPane getCenterTemplateCardPane() { return centerTemplateCardPane; } @@ -320,39 +278,41 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta protected void initMenuPane() { menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - menuPane.add(initNorthEastPane(), BorderLayout.EAST); + menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); basePane.add(menuPane, BorderLayout.NORTH); this.resetToolkitByPlus(null); } /** + * @param ad * @return */ - protected JPanel initNorthEastPane() { + protected JPanel initNorthEastPane(final ToolBarMenuDock ad) { //hugh: private修改为protected方便oem的时候修改右上的组件构成 - + //顶部日志+登陆按钮 + final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); //优先级为-1,保证最后全面刷新一次 GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { @Override public void on(PluginEvent event) { - refreshNorthEastPane(); + refreshNorthEastPane(northEastPane, ad); DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv()); } }, new PluginFilter() { @Override public boolean accept(PluginContext context) { - return !SwitchExistEnv.isSwitching() - && context.contain(PluginModule.ExtraDesign); + + return context.contain(PluginModule.ExtraDesign); } }); - refreshNorthEastPane(); + refreshNorthEastPane(northEastPane, ad); return northEastPane; } - public static void refreshNorthEastPane() { + private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { northEastPane.removeAll(); northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); northEastPane.add(LogMessageBar.getInstance()); @@ -457,7 +417,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * 刷新 */ public void refreshDottedLine() { - if (DesignerMode.isAuthorityEditing()) { + if (BaseUtils.isAuthorityEditing()) { populateAuthorityArea(); populateCloseButton(); addDottedLine(); @@ -516,7 +476,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta for (int i = 0; i < fixButtons.length; i++) { combineUp.add(fixButtons[i]); } - if (!DesignerMode.isAuthorityEditing()) { + if (!BaseUtils.isAuthorityEditing()) { combineUp.addSeparator(new Dimension(2, 16)); if (toolbar4Form != null) { for (int i = 0; i < toolbar4Form.length; i++) { @@ -627,16 +587,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta */ public void needToAddAuhtorityPaint() { - newWorkBookPane.setButtonGray(DesignerMode.isAuthorityEditing()); - - // 进入或退出权限编辑模式,通知插件 - Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); - for (ShortCut shortCut : extraShortCuts) { - if (shortCut instanceof AbstractTemplateTreeShortCutProvider) { - ((AbstractTemplateTreeShortCutProvider) shortCut).notifyFromAuhtorityChange(DesignerMode.isAuthorityEditing()); - } - } - + newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); } /** @@ -660,10 +611,10 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta defaultTitleSB.append(ProductConstants.BRANCH); // james:标识登录的用户和登录的ENV String envName = DesignerEnvManager.getEnvManager().getCurEnvName(); - Env env = DesignerEnvManager.getEnvManager().getEnv(envName); + EnvConfig env = DesignerEnvManager.getEnvManager().getEnv(envName); if (env != null) { - defaultTitleSB.append(env.getUser()).append('@').append(envName).append('['); - defaultTitleSB.append(env.getEnvDescription()); + defaultTitleSB.append(EnvConfigUtils.getUsername(env)).append('@').append(envName).append('['); + defaultTitleSB.append(Inter.getLocText("Env-Remote_Server")); defaultTitleSB.append(']'); if (editingTemplate != null) { String path = editingTemplate.getEditingFILE().getPath(); @@ -716,16 +667,13 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param env 环境 */ public void refreshEnv(Env env) { + this.setTitle(); DesignerFrameFileDealerPane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); TemplateTreePane.getInstance().refreshDockingView(); DesignTableDataManager.clearGlobalDs(); EastRegionContainerPane.getInstance().refreshDownPane(); - JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (template != null) { - template.refreshToolArea(); - } } /** @@ -788,8 +736,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 添加的模板. */ public void addAndActivateJTemplate(JTemplate jt) { - //释放模板对象 - ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -806,8 +752,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 模板 */ public void activateJTemplate(JTemplate jt) { - //释放模板对象 - ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -913,16 +857,13 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta String fileExtention = fileName.substring(indexOfLastDot + 1); for (int i = 0, len = appList.size(); i < len; i++) { App app = appList.get(i); - String[] defaultAppExtentions = app.defaultExtentions(); + String[] defaultAppExtentions = app.defaultExtensions(); boolean opened = false; for (int j = 0; j < defaultAppExtentions.length; j++) { if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { - JTemplate jt = null; - try { - jt = app.openTemplate(tplFile); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); - } + // 不要catch + JTemplate jt = app.openTemplate(tplFile); + if (jt == null) { return; } @@ -969,6 +910,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } else { this.addAndActivateJTemplate(jt); } + //REPORT-5084:激活后刷新一下右側面板 + jt.refreshEastPropertiesPane(); } /** @@ -1080,4 +1023,4 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index e5cfdfa69..af03db3fe 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; import com.fr.base.FRContext; -import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; @@ -11,11 +10,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.FileOperations; -import com.fr.design.file.FileToolbarStateChangeListener; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.file.MutilTempalteTabPane; -import com.fr.design.file.TemplateTreePane; +import com.fr.design.file.*; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -33,6 +28,7 @@ import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.io.utils.ResourceIOUtils; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; import com.fr.stable.project.ProjectConstants; @@ -46,7 +42,6 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -57,11 +52,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private CardLayout card; private JPanel cardPane; - private java.util.List otherToobarStateChangeListeners= new ArrayList<>(); - - public FileOperations getSelectedOperation() { - return selectedOperation; - } private FileOperations selectedOperation; private UIToolbar toolBar; @@ -120,7 +110,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); //处理自动新建的模板 MutilTempalteTabPane.getInstance().doWithtemTemplate(); - if (DesignerMode.isAuthorityEditing()) { + if (BaseUtils.isAuthorityEditing()) { RolesAlreadyEditedPane.getInstance().refreshDockingView(); } @@ -144,7 +134,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } toolbarDef.addShortCut(delFileAction); Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); - for (ShortCut shortCut : extraShortCuts) { + for (ShortCut shortCut : extraShortCuts){ toolbarDef.addShortCut(shortCut); } @@ -170,9 +160,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } /** - * 响应数据集改变 - * - * @param map 改变名字的数据集 + * 响应数据集改变 + * @param map 改变名字的数据集 */ public void fireDSChanged(Map map) { DesignTableDataManager.fireDSChanged(map); @@ -223,21 +212,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt public void actionPerformed(ActionEvent evt) { selectedOperation.refresh(); stateChange(); - - } - } - - public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { - this.otherToobarStateChangeListeners.add(toobarStateChangeListener); - } - - public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { - this.otherToobarStateChangeListeners.remove(toobarStateChangeListener); - } - - private void otherStateChange() { - for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) { - toobarStateChangeListener.stateChange(); } } @@ -275,38 +249,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } - /* - * 加锁 - */ - private class GetLockAction extends UpdateAction { - - public GetLockAction() { - this.setName(Inter.getLocText("FR-Designer_Get_Lock")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/lock.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.lockFile(); - } - } - - /* - * 解锁 - */ - private class ReleaseLockAction extends UpdateAction { - - public ReleaseLockAction() { - this.setName(Inter.getLocText("FR-Designer_Release_Lock")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/unlock.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.unLockFile(); - } - } - /** * 按钮状态改变 */ @@ -321,8 +263,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt openReportAction.setEnabled(false); } FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); - if (selectedOperation.getSelectedTemplatePath() != null) { - if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { + if (selectedOperation.getSelectedTemplatePath() != null){ + if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(),node.getLock())){ delFileAction.setEnabled(false); } else { delFileAction.setEnabled(true); @@ -355,7 +297,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt delFileAction.setEnabled(true); } - otherStateChange(); } /** @@ -410,8 +351,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt return; } - final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, reportPath}), false)); - final String path = StableUtils.pathJoin(new String[]{nodeFile.getEnvPath(), nodeFile.getPath()}); + final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, reportPath), false)); + final String path = nodeFile.getPath(); oldName = nodeFile.getName(); suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); oldName = oldName.replaceAll(suffix, ""); @@ -504,8 +445,9 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String newPath = path.replace(nodeFile.getName(), userInput + suffix); renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix); DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\")); - File newFile = new File(newPath); - new File(path).renameTo(newFile); + + //模版重命名 + ResourceIOUtils.renameTo(path, newPath); selectedOperation.refresh(); DesignerContext.getDesignerFrame().setTitle(); jd.dispose(); @@ -595,4 +537,4 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt return null; } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/TemplatePane.java b/designer-base/src/com/fr/design/mainframe/TemplatePane.java index e5cfdfa69..f95e0aee4 100644 --- a/designer-base/src/com/fr/design/mainframe/TemplatePane.java +++ b/designer-base/src/com/fr/design/mainframe/TemplatePane.java @@ -1,598 +1,279 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; -import com.fr.base.vcs.DesignerMode; +import com.fr.base.Env; +import com.fr.core.env.EnvConfig; +import com.fr.dav.LocalEnv; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.actions.UpdateAction; -import com.fr.design.constants.UIConstants; -import com.fr.design.data.DesignTableDataManager; -import com.fr.design.data.datapane.TableDataTreePane; -import com.fr.design.data.tabledata.ResponseDataSourceChange; -import com.fr.design.file.FileOperations; -import com.fr.design.file.FileToolbarStateChangeListener; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.InformationWarnPane; import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.TemplateTreePane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.imenu.UIMenuHighLight; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.gui.itoolbar.UIToolbar; -import com.fr.design.gui.itree.filetree.TemplateFileTree; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.menu.KeySetUtils; -import com.fr.design.menu.ShortCut; -import com.fr.design.menu.ToolBarDef; -import com.fr.design.roleAuthority.RolesAlreadyEditedPane; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.file.FILE; -import com.fr.file.FileNodeFILE; -import com.fr.file.filetree.FileNode; +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.Inter; -import com.fr.stable.CoreConstants; -import com.fr.stable.StableUtils; -import com.fr.stable.project.ProjectConstants; +import com.fr.stable.EnvChangedListener; +import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; import javax.swing.*; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.io.File; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; -public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarStateChangeListener, ResponseDataSourceChange { - private static final String FILE = "file"; - private static DesignerFrameFileDealerPane THIS; +//TODO: august TemplatePane和TemplateTreePane最好合并成一个类 +public class TemplatePane extends JPanel implements MouseListener { + private static final long NUM = 1L; + private static int NUM200 = 200; - private CardLayout card; - private JPanel cardPane; - private java.util.List otherToobarStateChangeListeners= new ArrayList<>(); - - public FileOperations getSelectedOperation() { - return selectedOperation; + public static TemplatePane getInstance() { + return HOLDER.singleton; } - private FileOperations selectedOperation; - private UIToolbar toolBar; - - private OpenReportAction openReportAction = new OpenReportAction(); - private RefreshTreeAction refreshTreeAction = new RefreshTreeAction(); - private OpenFolderAction openFolderAction = new OpenFolderAction(); - private RenameAction renameAction = new RenameAction(); - private DelFileAction delFileAction = new DelFileAction(); - - - /** - * 刷新 - */ - public void refresh() { - selectedOperation.refresh(); - } - - public static final DesignerFrameFileDealerPane getInstance() { - if (THIS == null) { - THIS = new DesignerFrameFileDealerPane(); - } - return THIS; + private static class HOLDER { + private static TemplatePane singleton = new TemplatePane(); } - private DesignerFrameFileDealerPane() { - setLayout(new BorderLayout()); - toolBar = ToolBarDef.createJToolBar(); - toolBar.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, UIConstants.TOOLBAR_BORDER_COLOR)); - toolBar.setBorderPainted(true); - JPanel tooBarPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - JPanel parent = new JPanel(new BorderLayout()); - parent.add(toolBar, BorderLayout.CENTER); - parent.setBorder(BorderFactory.createEmptyBorder(3, 0, 4, 0)); - tooBarPane.add(parent, BorderLayout.CENTER); - tooBarPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); - - add(tooBarPane, BorderLayout.NORTH); - cardPane = new JPanel(card = new CardLayout()); - cardPane.add(TemplateTreePane.getInstance(), FILE); - - selectedOperation = TemplateTreePane.getInstance(); - card.show(cardPane, FILE); - - TemplateTreePane.getInstance().setToobarStateChangeListener(this); - - add(cardPane, BorderLayout.CENTER); - stateChange(); + private static final long serialVersionUID = 2108412478281713143L; + public static final int HEIGHT = 23;// 最好和日志的高度统一 用同一个变量 + private static javax.swing.Icon leftIcon = BaseUtils.readIcon("/com/fr/design/images/docking/left.png"); + ; + private static javax.swing.Icon rightIcon = BaseUtils.readIcon("/com/fr/design/images/docking/right.png"); + ; + private boolean isExpanded = false; + private UIButton editButton; + private UILabel envLabel; + + private TemplatePane() { + super(); + this.initComponents(); + this.setFocusable(true); + this.addMouseListener(this); + isExpanded = DesignerEnvManager.getEnvManager().isTemplateTreePaneExpanded(); + // TemplateTreePane.getInstance().setVisible(isExpanded); + TemplateTreePane.getInstance().setVisible(true); } - - public final void setCurrentEditingTemplate(JTemplate jt) { - DesignModelAdapter.setCurrentModelAdapter(jt == null ? null : jt.getModel()); - fireDSChanged(); - TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); - HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); - //处理自动新建的模板 - MutilTempalteTabPane.getInstance().doWithtemTemplate(); - if (DesignerMode.isAuthorityEditing()) { - RolesAlreadyEditedPane.getInstance().refreshDockingView(); - } - - jt.setComposite(); - jt.refreshToolArea(); - jt.fireJTemplateOpened(); - jt.requestFocus(); - jt.revert(); - - FRContext.getLogger().info("\"" + jt.getEditingFILE().getName() + "\"" + Inter.getLocText("LOG-Has_Been_Openned") + "!"); + private void initComponents() { + GeneralContext.addEnvChangedListener(new EnvChangedListener() { + public void envChanged() { + setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); + } + }); + this.setLayout(new BorderLayout(25, 0)); + editButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/control/control-center2.png")) { + private static final long serialVersionUID = NUM; + + @Override + public Point getToolTipLocation(MouseEvent event) { + return new Point(25, 2); + } + }; + editButton.setOpaque(false); + editButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 10)); + editButton.setMargin(null); + editButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); + editButton.setToolTipText(Inter.getLocText("Env-Configure_Workspace")); + this.add(new UILabel(" "), BorderLayout.WEST); + this.add(editButton, BorderLayout.EAST); + editButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + editItems(); + } + }); + envLabel = new UILabel(); + envLabel.setForeground(new Color(102, 102, 102)); + setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); + this.add(envLabel, BorderLayout.CENTER); } /** - * 刷新菜单 + * 是否可扩展 + * @return 同上 */ - public void refreshDockingView() { - ToolBarDef toolbarDef = new ToolBarDef(); - toolbarDef.addShortCut(openReportAction, refreshTreeAction); - if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) { - toolbarDef.addShortCut(openFolderAction, renameAction); - } - toolbarDef.addShortCut(delFileAction); - Set extraShortCuts = ExtraDesignClassManager.getInstance().getExtraShortCuts(); - for (ShortCut shortCut : extraShortCuts) { - toolbarDef.addShortCut(shortCut); - } - - toolbarDef.updateToolBar(toolBar); - refreshActions(); + public boolean IsExpanded() { + return this.isExpanded; } - - private void refreshActions() { - openReportAction.setEnabled(false); - refreshTreeAction.setEnabled(true); - openFolderAction.setEnabled(false); - renameAction.setEnabled(false); - delFileAction.setEnabled(false); + public void setExpand(boolean b) { + this.isExpanded = b; this.repaint(); } - /** - * 响应数据集改变 - */ - public void fireDSChanged() { - fireDSChanged(new HashMap()); - } - - /** - * 响应数据集改变 - * - * @param map 改变名字的数据集 - */ - public void fireDSChanged(Map map) { - DesignTableDataManager.fireDSChanged(map); - } - - - /* - * Open Report Action - */ - private class OpenReportAction extends UpdateAction { - - public OpenReportAction() { - this.setName(KeySetUtils.OPEN_TEMPLATE.getMenuKeySetName()); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/buttonicon/open.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.openSelectedReport(); - } - - } - - private class OpenFolderAction extends UpdateAction { - - public OpenFolderAction() { - this.setName(Inter.getLocText("FR-Designer_Show_in_Containing_Folder")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/view_folder.png")); + private boolean envListOkAction(EnvListPane envListPane) { + String selectedName = envListPane.updateEnvManager(); + DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); + EnvConfig selectedEnv = envManager.getEnv(selectedName); + GeneralContext.fireEnvWillChangeListener(); + try { + //如果是远程的还要先测试下,如果失败就不切换 + if (selectedEnv instanceof RemoteEnv) { + if (!((RemoteEnv) selectedEnv).testServerConnection()) { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); + return false; + } else { +// String remoteVersion = selectedEnv.getDesignerVersion(); +// 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); + JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + if (template != null) { + template.refreshToolArea(); + } + setJLabel(selectedName); + } catch (Exception e) { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); + return false; } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.openContainerFolder(); + TemplateTreePane.getInstance().refreshDockingView(); + DesignModelAdapter model = DesignModelAdapter.getCurrentModelAdapter(); + if (model != null) { + model.envChanged(); } + return true; } - /* - * 刷新ReportletsTree + /** + * 编辑items */ - private class RefreshTreeAction extends UpdateAction { + public void editItems() { + final EnvListPane envListPane = new EnvListPane(); + final BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame())); + + envListPane.populateEnvManager(envLabel.getText()); + envListDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + envListOkAction(envListPane); + } - public RefreshTreeAction() { - this.setName(Inter.getLocText("FR-Designer_Refresh")); - this.setSmallIcon(UIConstants.REFRESH_ICON); - } + public void doCancel() { + envListDialog.setVisible(false); + } + }); + envListDialog.setVisible(true); + } - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.refresh(); - stateChange(); + private void setJLabel(String name) { + if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof LocalEnv) { + envLabel.setIcon(BaseUtils.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")); } + envLabel.setText(name); + envLabel.repaint(); } - public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { - this.otherToobarStateChangeListeners.add(toobarStateChangeListener); - } - - public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) { - this.otherToobarStateChangeListeners.remove(toobarStateChangeListener); + @Override + public Dimension getPreferredSize() { + return new Dimension(250, HEIGHT); } - private void otherStateChange() { - for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) { - toobarStateChangeListener.stateChange(); - } + @Override + public void paintComponent(Graphics g) { + super.paintComponent(g); + paintBackgroundIcon(g); } - /* - * 重命名文件 - */ - private class RenameAction extends UpdateAction { - - public RenameAction() { - this.setName(Inter.getLocText("FR-Designer_Rename")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/data/source/rename.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - new RenameDialog(); - MutilTempalteTabPane.getInstance().repaint(); - } + private void paintBackgroundIcon(Graphics g) { + int w = this.getWidth(); + int h = this.getHeight(); + Graphics2D g2d = (Graphics2D) g; + Color lightColor = new Color(226, 230, 234); + Color darkColor = new Color(183, 188, 195); + GradientPaint gp = new GradientPaint(1, 1, lightColor, 1, h - 1, darkColor); + g2d.setPaint(gp); + g2d.fillRect(1, 1, w - 2, h - 1); + g2d.setColor(lightColor); + g2d.drawLine(0, 2, 0, h - 1); + g2d.setColor(darkColor); + g2d.drawLine(w - 1, 2, w - 1, h - 1); + Icon icon = !isExpanded ? leftIcon : rightIcon; + icon.paintIcon(this, g2d, 4, 4); } - /* - * 删除指定文件 + /** + * 鼠标点击 + * @param e 事件 */ - private class DelFileAction extends UpdateAction { - - public DelFileAction() { - this.setName(Inter.getLocText("FR-Designer_Remove")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/data/source/delete.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.deleteFile(); - } + @Override + public void mouseClicked(MouseEvent e) { } - /* - * 加锁 + /** + * 鼠标按下 + * @param e 事件 */ - private class GetLockAction extends UpdateAction { - - public GetLockAction() { - this.setName(Inter.getLocText("FR-Designer_Get_Lock")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/lock.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.lockFile(); + @Override + public void mousePressed(MouseEvent e) { + if (e.getX() < NUM200) { + isExpanded = !isExpanded; + TemplateTreePane.getInstance().setVisible(isExpanded); + this.setExpand(isExpanded); + DesignerEnvManager.getEnvManager().setTemplateTreePaneExpanded(isExpanded); } } - /* - * 解锁 + /** + * 鼠标放开 + * @param e 事件 */ - private class ReleaseLockAction extends UpdateAction { - - public ReleaseLockAction() { - this.setName(Inter.getLocText("FR-Designer_Release_Lock")); - this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/control/unlock.png")); - } - - @Override - public void actionPerformed(ActionEvent evt) { - selectedOperation.unLockFile(); - } + @Override + public void mouseReleased(MouseEvent e) { } /** - * 按钮状态改变 + * 鼠标进入 + * @param e 事件 */ @Override - public void stateChange() { - //当前环境为远程环境时 - if (FRContext.getCurrentEnv() != null) { - if (!FRContext.getCurrentEnv().isSupportLocalFileOperate()) { - if (selectedOperation.getSelectedTemplatePath() != null) { - openReportAction.setEnabled(true); - } else { - openReportAction.setEnabled(false); - } - FileNode node = TemplateTreePane.getInstance().getTemplateFileTree().getSelectedFileNode(); - if (selectedOperation.getSelectedTemplatePath() != null) { - if (node.getLock() != null && !ComparatorUtils.equals(node.getUserID(), node.getLock())) { - delFileAction.setEnabled(false); - } else { - delFileAction.setEnabled(true); - } - } else { - delFileAction.setEnabled(false); - } - } else { - //当前环境为本地环境时 - if (selectedOperation.getSelectedTemplatePath() != null) { - openReportAction.setEnabled(true); - renameAction.setEnabled(true); - delFileAction.setEnabled(true); - } else { - openReportAction.setEnabled(false); - renameAction.setEnabled(false); - delFileAction.setEnabled(false); - } - openFolderAction.setEnabled(containsFolderNums() + seletedTemplateNums() != 0); - } - refreshTreeAction.setEnabled(true); - } - if (containsFolderNums() > 0 && (containsFolderNums() + seletedTemplateNums() > 1)) { - refreshActions(); - } else if (containsFolderNums() == 0 && seletedTemplateNums() > 1) { - openReportAction.setEnabled(false); - refreshTreeAction.setEnabled(true); - openFolderAction.setEnabled(false); - renameAction.setEnabled(false); - delFileAction.setEnabled(true); - } - - otherStateChange(); + public void mouseEntered(MouseEvent e) { } /** - * 是否包含文件夹 - * - * @return + * 鼠标离开 + * @param e 事件 */ - - private int containsFolderNums() { - TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); - if (fileTree.getSelectionPaths() == null) { - return 0; - } - - //选择的包含文件和文件夹的数目 - if (fileTree.getSelectionPaths().length == 0) { - return 0; - } - //所有的num减去模板的num,得到文件夹的num - return fileTree.getSelectionPaths().length - fileTree.getSelectedTemplatePaths().length; + @Override + public void mouseExited(MouseEvent e) { } /** - * 是否选择了多个模板 - * - * @return + * 处理异常 */ - private int seletedTemplateNums() { - TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); - if (fileTree.getSelectionPaths() == null) { - return 0; - } - - return fileTree.getSelectedTemplatePaths().length; - } - - - // js: 重命名对话框,模仿Eclipse的重命名,支持快捷键F2,Enter,ESC - private class RenameDialog { - - private UITextField jt; - private String userInput; - private String oldName; - private UILabel hintsLabel; - private UIButton confirmButton; - private JDialog jd; - private String suffix; - - public RenameDialog() { - final String reportPath = selectedOperation.getSelectedTemplatePath(); - if (reportPath == null) { - return; - } - - final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, reportPath}), false)); - final String path = StableUtils.pathJoin(new String[]{nodeFile.getEnvPath(), nodeFile.getPath()}); - oldName = nodeFile.getName(); - suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); - oldName = oldName.replaceAll(suffix, ""); - - jd = new JDialog(); - jd.setLayout(new GridLayout(2, 2)); - jd.setModal(true); - UILabel newNameLabel = new UILabel(Inter.getLocText("FR-Designer_Enter-New-FileName")); - newNameLabel.setMinimumSize(new Dimension(150, 27)); - newNameLabel.setHorizontalAlignment(SwingConstants.RIGHT); - jt = new UITextField(oldName); - jt.getDocument().addDocumentListener(getdoDocumentListener()); - jt.selectAll(); - jt.setPreferredSize(new Dimension(150, 20)); - - JPanel newNamePanel = new JPanel(); - newNamePanel.setLayout(new BoxLayout(newNamePanel, BoxLayout.X_AXIS)); - newNamePanel.add(Box.createHorizontalGlue()); - newNamePanel.add(newNameLabel); - newNamePanel.add(Box.createHorizontalStrut(5)); - jd.add(newNamePanel); - - JPanel jtPanel = new JPanel(); - jtPanel.setLayout(new BoxLayout(jtPanel, BoxLayout.Y_AXIS)); - JPanel containJt = new JPanel(new BorderLayout()); - containJt.add(jt, BorderLayout.WEST); - containJt.setMaximumSize(new Dimension(200, 20)); - jtPanel.add(Box.createVerticalGlue()); - jtPanel.add(containJt); - jtPanel.add(Box.createVerticalGlue()); - jd.add(jtPanel); - - addUITextFieldListener(nodeFile, path); - - hintsLabel = new UILabel(); - hintsLabel.setBounds(20, 50, 250, 30); - hintsLabel.setMaximumSize(new Dimension(200, 30)); - hintsLabel.setHorizontalAlignment(SwingConstants.RIGHT); - hintsLabel.setForeground(Color.RED); - hintsLabel.setVisible(false); - - confirmButton = new UIButton(Inter.getLocText("FR-Designer_Confirm")); - confirmButton.setPreferredSize(new Dimension(80, 25)); - confirmButton.setMinimumSize(new Dimension(80, 25)); - confirmButton.setMaximumSize(new Dimension(80, 25)); - confirmButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - confirmClose(nodeFile, path); + public void dealEvnExceptionWhenStartDesigner() { + final EnvListPane envListPane = new EnvListPane(); + envListPane.populateEnvManager(envLabel.getText()); + BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame())); + envListDialog.addDialogActionListener(new DialogActionAdapter() { + public void doOk() { + if (!envListOkAction(envListPane)) { + System.exit(0); } - }); - - UIButton cancelButton = new UIButton(Inter.getLocText("FR-Designer_Cancel")); - cancelButton.setPreferredSize(new Dimension(80, 25)); - cancelButton.setMinimumSize(new Dimension(80, 25)); - cancelButton.setMaximumSize(new Dimension(80, 25)); - - cancelButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - jd.dispose(); - } - }); - - JPanel hintsPanel = new JPanel(); - hintsPanel.setLayout(new BorderLayout()); - hintsPanel.add(hintsLabel, BorderLayout.EAST); - jd.add(hintsLabel); - - JPanel btPanel = new JPanel(new BorderLayout()); - btPanel.setLayout(new BoxLayout(btPanel, BoxLayout.X_AXIS)); - btPanel.add(Box.createHorizontalGlue()); - btPanel.add(confirmButton); - btPanel.add(Box.createHorizontalStrut(5)); - btPanel.add(cancelButton); - btPanel.add(Box.createHorizontalStrut(20)); - jd.add(btPanel); - - jd.setSize(380, 200); - jd.setTitle(Inter.getLocText("FR-Designer_Rename")); - jd.setResizable(false); - jd.setAlwaysOnTop(true); - jd.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); - jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); - GUICoreUtils.centerWindow(jd); - jd.setVisible(true); - } - - public void confirmClose(FileNodeFILE nodeFile, String path) { - userInput = userInput == null ? oldName : userInput; - String oldPath = path.replaceAll("/", "\\\\"); - String newPath = path.replace(nodeFile.getName(), userInput + suffix); - renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix); - DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\")); - File newFile = new File(newPath); - new File(path).renameTo(newFile); - selectedOperation.refresh(); - DesignerContext.getDesignerFrame().setTitle(); - jd.dispose(); - } - private void renameTemplateInMemory(FILE tplFile, String newName, String oldName) { - JTemplate dPane = getSpecialTemplateByFILE(tplFile); - if (dPane == null) { - return; } - FILE renameFile = dPane.getEditingFILE(); - renameFile.setPath(renameFile.getPath().replace(oldName, newName)); - } - - // 增加enter以及esc快捷键的支持 - public void addUITextFieldListener(final FileNodeFILE nodeFile, final String path) { - - jt.addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - jd.dispose(); - } - } - }); - - jt.addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ENTER) { - if (confirmButton.isEnabled()) { - confirmClose(nodeFile, path); - } - } - } - }); - - } - // UITextField的输入监听 - public DocumentListener getdoDocumentListener() { - DocumentListener dl = new DocumentListener() { - - public void changedUpdate(DocumentEvent e) { - isNameAlreadyExist(); - } - - public void insertUpdate(DocumentEvent e) { - isNameAlreadyExist(); - } - - public void removeUpdate(DocumentEvent e) { - isNameAlreadyExist(); - } - }; - - return dl; - } - - private void isNameAlreadyExist() { - userInput = jt.getText().trim(); - if (selectedOperation.isNameAlreadyExist(userInput, oldName, suffix)) { - jt.selectAll(); - // 如果文件名已存在,则灰掉确认按钮 - hintsLabel.setText(Inter.getLocText(new String[]{"Utils-File_name", "Already_exists"}, new String[]{userInput})); - hintsLabel.setVisible(true); - confirmButton.setEnabled(false); - } else { - hintsLabel.setVisible(false); - confirmButton.setEnabled(true); + public void doCancel() { + System.exit(0); } - } - } - - /** - * @param tplFile - * @return 内存中的template重命名一下 - */ - private JTemplate getSpecialTemplateByFILE(FILE tplFile) { - HistoryTemplateListPane historyHandle = HistoryTemplateListPane.getInstance(); - if (ComparatorUtils.equals(historyHandle.getCurrentEditingTemplate().getEditingFILE(), tplFile)) { - return historyHandle.getCurrentEditingTemplate(); - } - for (int i = 0; i < historyHandle.getHistoryCount(); i++) { - if (ComparatorUtils.equals(historyHandle.get(i).getEditingFILE(), tplFile)) { - return historyHandle.get(i); - } - } - return null; + }); + envListDialog.setVisible(true); } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index b718760ed..9a5effae4 100644 --- a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -1,7 +1,7 @@ package com.fr.design.mainframe.loghandler; import com.fr.base.BaseUtils; -import com.fr.base.ConfigManager; +import com.fr.base.ServerConfig; import com.fr.base.FRContext; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.imenu.UIMenuItem; @@ -16,23 +16,13 @@ import com.fr.log.LogHandler; import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.LogRecordTimeProvider; -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JTextPane; -import javax.swing.KeyStroke; +import javax.swing.*; import javax.swing.text.BadLocationException; import javax.swing.text.DefaultEditorKit; import javax.swing.text.Document; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -130,7 +120,7 @@ public class DesignerLogHandler { @Override public void actionPerformed(ActionEvent e) { JPopupMenu showsetPopup = new JPopupMenu(); - int logLevelvalue = ConfigManager.getProviderInstance().getServerLogLevel().intValue(); + int logLevelvalue = ServerConfig.getInstance().getServerLogLevel().intValue(); if (logLevelvalue <= INFO_INT) { showsetPopup.add(showInfo); showsetPopup.add(showError); @@ -356,4 +346,4 @@ public class DesignerLogHandler { }; } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 4ee3ff9c0..469e7fd1a 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -1,6 +1,12 @@ package com.fr.design.utils; -import com.fr.base.*; +import com.fr.base.BaseUtils; +import com.fr.base.ServerConfig; +import com.fr.base.Env; +import com.fr.base.EnvException; +import com.fr.base.FRContext; +import com.fr.base.FeedBackInfo; +import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; import com.fr.dav.DavXMLUtils; import com.fr.dav.LocalEnv; @@ -9,18 +15,39 @@ import com.fr.design.ExtraDesignClassManager; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.gui.UILookAndFeel; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrame; import com.fr.env.RemoteEnv; import com.fr.file.FileFILE; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.FRFont; +import com.fr.general.FRLogger; +import com.fr.general.GeneralContext; +import com.fr.general.Inter; import com.fr.general.http.HttpClient; -import com.fr.stable.*; +import com.fr.stable.ArrayUtils; +import com.fr.stable.CodeUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.start.StartServer; import javax.swing.*; import java.awt.*; -import java.io.*; -import java.net.*; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.URI; +import java.net.URLEncoder; import java.util.Calendar; import java.util.Enumeration; import java.util.Locale; @@ -182,18 +209,18 @@ public class DesignUtils { // 更新CurrentEnv于FRContext & DesignerEnvManager FRContext.setCurrentEnv(env); - DesignerFrame.refreshNorthEastPane(); + refreshDesignerFrame(env); // 当换了运行环境,重置服务器,让它下次预览时重启 if (env instanceof LocalEnv && !ComparatorUtils.equals(env.getPath(), oldEnvPath)) { StartServer.currentEnvChanged(); } } - + public static void refreshDesignerFrame(Env env) { - + final Env run_env = env; - + // 刷新DesignerFrame里面的面板 SwingUtilities.invokeLater(new Runnable() { @@ -206,7 +233,7 @@ public class DesignUtils { } }); } - + /** * p:初始化look and feel, 把一切放到这个里面.可以让多个地方调用. */ @@ -229,15 +256,15 @@ public class DesignUtils { } } } - + private static boolean isTextField(String key){ - return key.startsWith("TextField.") || key.startsWith("PasswordField."); + return key.startsWith("TextField.") || key.startsWith("PasswordField."); } - + private static FRFont getCurrentLocaleFont(){ FRFont guiFRFont; Locale defaultLocale = Locale.getDefault(); - + if (isDisplaySimSun(defaultLocale)) { guiFRFont = getNamedFont("SimSun"); } else if(isDisplayDialog(defaultLocale)) { @@ -245,50 +272,57 @@ public class DesignUtils { } else { guiFRFont = getNamedFont("Tahoma"); } - + //先初始化的设计器locale, 后初始化lookandfeel.如果顺序改了, 这边也要调整. Locale designerLocale = FRContext.getLocale(); String file = Inter.getLocText("FR-Designer_File"); char displayChar = file.charAt(0); if (!guiFRFont.canDisplay(displayChar)) { - //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 - //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) - guiFRFont = getNamedFont("SimSun"); - if (!guiFRFont.canDisplay(displayChar)) { + //如果不能用默认的语言显示字体, 比如想在英文系统里用中文设计器 + //默认语言(中文:宋体, 英文:Tahoma, 其他:Dialog) + guiFRFont = getNamedFont("SimSun"); + if (!guiFRFont.canDisplay(displayChar)) { //比如想在中文或英文系统里用韩文设计器 guiFRFont = getNamedFont("Dialog"); if(!guiFRFont.canDisplay(displayChar)) { FRContext.getLogger().error(Inter.getLocText("FR-Base_SimSun_Not_Found")); } - } - } - + } + } + return guiFRFont; } - + private static FRFont getNamedFont(String name){ - return FRFont.getInstance(name, Font.PLAIN, 12); + return FRFont.getInstance(name, Font.PLAIN, 12); } - + private static boolean isDisplaySimSun(Locale defaultLocale){ - return ComparatorUtils.equals(defaultLocale, Locale.SIMPLIFIED_CHINESE); + return ComparatorUtils.equals(defaultLocale, Locale.SIMPLIFIED_CHINESE); } - + private static boolean isDisplayDialog(Locale defaultLocale){ - return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE) - || ComparatorUtils.equals(defaultLocale, Locale.JAPANESE) - || ComparatorUtils.equals(defaultLocale, Locale.JAPAN) + return ComparatorUtils.equals(defaultLocale, Locale.TRADITIONAL_CHINESE) + || ComparatorUtils.equals(defaultLocale, Locale.JAPANESE) + || ComparatorUtils.equals(defaultLocale, Locale.JAPAN) || ComparatorUtils.equals(defaultLocale, Locale.KOREAN) || ComparatorUtils.equals(defaultLocale, Locale.KOREA); } + /** + * 访问服务器环境-空参数 + */ + public static void visitEnvServer() { + visitEnvServerByParameters(StringUtils.EMPTY, new String[] {}, new String[] {}); + } + /** * 访问服务器环境 * * @param names 参数名字 * @param values 参数值 */ - public static void visitEnvServerByParameters(String[] names, String[] values) { + public static void visitEnvServerByParameters(String baseRoute, String[] names, String[] values) { int len = Math.min(ArrayUtils.getLength(names), ArrayUtils.getLength(values)); String[] segs = new String[len]; for (int i = 0; i < len; i++) { @@ -319,7 +353,8 @@ public class DesignUtils { } else { try { String web = GeneralContext.getCurrentAppNameOfEnv(); - String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping() + String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + + "/" + web + "/" + ServerConfig.getInstance().getServletName() + baseRoute + postfixOfUri; StartServer.browserURLWithLocalEnv(url); } catch (Throwable e) { @@ -439,10 +474,10 @@ public class DesignUtils { private static InputStream postBytes2ServerB(byte[] bytes) throws Exception { - HttpClient client = new HttpClient("http://114.215.175.35:8080/WebReport/product_advice.jsp"); + HttpClient client = new HttpClient("http://114.215.175.35:8080/WebReport/product_advice.jsp"); client.asGet(); - client.setContent(bytes); - return execute4InputStream(client); + client.setContent(bytes); + return execute4InputStream(client); } @@ -452,7 +487,7 @@ public class DesignUtils { private static ByteArrayInputStream execute4InputStream(HttpClient client) throws Exception { int statusCode = client.getResponseCode(); if(statusCode != HttpURLConnection.HTTP_OK){ - throw new EnvException("Method failed: " + statusCode); + throw new EnvException("Method failed: " + statusCode); } InputStream in = client.getResponseStream(); if (in == null) { @@ -484,4 +519,4 @@ public class DesignUtils { } -} +} \ 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 d1d794f8d..951f6cdda 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -1,73 +1,34 @@ package com.fr.env; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.File; -import java.util.*; - -import javax.swing.BorderFactory; - -import com.fr.design.gui.ilable.UILabel; - -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextPane; -import javax.swing.JToolBar; -import javax.swing.SwingUtilities; -import javax.swing.ToolTipManager; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.text.AttributeSet; -import javax.swing.text.BadLocationException; -import javax.swing.text.SimpleAttributeSet; -import javax.swing.text.StyleConstants; - -import com.fr.base.BaseUtils; import com.fr.base.Env; -import com.fr.base.FRContext; -import com.fr.general.NameObject; +import com.fr.core.env.EnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; -import com.fr.design.beans.BasicBeanPane; -import com.fr.design.dialog.InformationWarnPane; import com.fr.design.gui.controlpane.JListControlPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; -import com.fr.design.gui.ipasswordfield.UIPassWordField; -import com.fr.design.gui.itree.filetree.JFileTree; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.itextarea.UITextArea; -import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.layout.TableLayout; -import com.fr.design.layout.TableLayoutHelper; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.scrollruler.ModLineBorder; -import com.fr.file.filter.OnlyShowDirectoryFileFilter; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.general.NameObject; import com.fr.stable.Nameable; -import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.core.PropertyChangeAdapter; -import com.fr.third.org.hibernate.boot.jaxb.SourceType; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +/** + * @author yaohwu + */ public class EnvListPane extends JListControlPane { public EnvListPane() { super(); addEditingListner(new PropertyChangeAdapter() { + @Override public void propertyChange() { String tempName = getEditingName(); String[] allListNames = nameableList.getAllNames(); @@ -86,7 +47,6 @@ public class EnvListPane extends JListControlPane { nameableList.stopEditing(); JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(EnvListPane.this), Inter.getLocText(waning, sign)); setWarnigText(editingIndex); - return; } } }); @@ -97,6 +57,7 @@ public class EnvListPane extends JListControlPane { * * @return 返回添加按钮的NameableCreator */ + @Override public NameableCreator[] createNameableCreators() { NameableCreator local = new NameObjectCreator(Inter.getLocText("Env-Local_Directory"), "com/fr/design/images/data/bind/localconnect.png", LocalEnv.class, LocalEnvPane.class); @@ -118,14 +79,13 @@ public class EnvListPane extends JListControlPane { public void populateEnvManager(String selectedEnv) { DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); Iterator nameIt = mgr.getEnvNameIterator(); - List nameObjectList = new ArrayList(); - nameIt.hasNext(); + List nameObjectList = new ArrayList<>(); while (nameIt.hasNext()) { String name = nameIt.next(); nameObjectList.add(new NameObject(name, mgr.getEnv(name))); } - this.populate(nameObjectList.toArray(new NameObject[nameObjectList.size()])); + this.populate(nameObjectList.toArray(new NameObject[0])); if (StringUtils.isBlank(selectedEnv)) { selectedEnv = mgr.getCurEnvName(); @@ -143,457 +103,10 @@ public class EnvListPane extends JListControlPane { DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); mgr.clearAllEnv(); Nameable[] res = this.update(); - NameObject[] envNameObjectArray = new NameObject[res.length]; - java.util.Arrays.asList(res).toArray(envNameObjectArray); - for (int i = 0; i < envNameObjectArray.length; i++) { - NameObject nameObject = envNameObjectArray[i]; - mgr.putEnv(nameObject.getName(), (Env) nameObject.getObject()); + for (Nameable re : res) { + NameObject nameObject = (NameObject) re; + mgr.putEnv(nameObject.getName(), (EnvConfig) nameObject.getObject()); } - return this.getSelectedName(); } - - public static class LocalEnvPane extends BasicBeanPane { - - private UITextField pathTextField; - private JFileTree localEnvTree; - - public LocalEnvPane() { - this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); - - // northPane - JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - this.add(northPane, BorderLayout.NORTH); - - northPane.add(new UILabel(Inter.getLocText("Location") + ":"), BorderLayout.WEST); - northPane.add(pathTextField = new UITextField(), BorderLayout.CENTER); - - // 删除选择文件按钮 添加JFileTree - - // centerPane - JPanel centerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - this.add(centerPane, BorderLayout.CENTER); - - // 添加JFileTree - localEnvTree = new JFileTree(); - JScrollPane localEnvPane = new JScrollPane(localEnvTree); - centerPane.add(localEnvPane, BorderLayout.CENTER); - - // 设置根路径File 和 文件过滤类型 - localEnvTree.setFileFilter(new OnlyShowDirectoryFileFilter()); - localEnvTree.setRootFiles(File.listRoots()); - localEnvTree.addTreeSelectionListener(new TreeSelectionListener() { - - @Override - public void valueChanged(TreeSelectionEvent e) { - pathTextField.setText(localEnvTree.getSelectedFile().getPath()); - } - }); - - UITextArea description = new UITextArea(); - centerPane.add(description, BorderLayout.SOUTH); - description.setText(Inter.getLocText("Env-Des1")); - description.setEditable(false); - } - - @Override - protected String title4PopupWindow() { - return Inter.getLocText("Location"); - } - - @Override - public LocalEnv updateBean() { - String path = pathTextField.getText(); - return LocalEnv.createEnv(path); - } - - public String getPath() { - return pathTextField.getText(); - } - - @Override - public void populateBean(LocalEnv ob) { - if (StringUtils.isBlank(ob.getPath())) { - return; - } - pathTextField.setText(ob.getPath()); - - final File tmpFile = new File(ob.getPath()); - localEnvTree.selectFile(tmpFile); - localEnvTree.setEnabled(true); - } - } - - public static class RemoteEnvPane extends BasicBeanPane { - public static final int HTTPS_HOST_INDEX = 8; - public static final int HTTP_HOST_INDEX = 7; - - private UICheckBox httpsCheckBox = new UICheckBox(Inter.getLocText("FR-Designer_Https_Enable")); - private UITextField servletPathField = new UITextField(); - private UITextField hostNameField = new UITextField(); - private UITextField portNameField = new UITextField(); - private UITextField webApplyField = new UITextField(); - private UITextField servletField = new UITextField(); - private UITextField userTextField = new UITextField(); - private UIPassWordField passwordTextField = new UIPassWordField(); - private UITextField certificatePath = new UITextField(); - private UIPassWordField certificatePass = new UIPassWordField(); - private UIButton chooseDirBtn = new UIButton("..."); - private String envPath; - private String hint; - - // 各种参数面板 - private JPanel northPane; - // 提示面板 - private JPanel previewPane; - // 面板的所有组件 - private Component[][] coms; - DocumentListener docListener = new DocumentListener() { - - @Override - public void changedUpdate(DocumentEvent e) { - showServletPathField(httpsCheckBox.isSelected()); - } - - @Override - public void insertUpdate(DocumentEvent e) { - showServletPathField(httpsCheckBox.isSelected()); - } - - @Override - public void removeUpdate(DocumentEvent e) { - showServletPathField(httpsCheckBox.isSelected()); - } - }; - - private void setHttpsState(boolean enable){ - chooseDirBtn.setEnabled(enable); - DesignerEnvManager.getEnvManager().setHttps(enable); - } - - public RemoteEnvPane() { - this.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Inter.getLocText("Config_Servlet"))); - this.setLayout(FRGUIPaneFactory.createM_BorderLayout()); - // 位置 - JPanel servletPathPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - servletPathPane.add(new UILabel(Inter.getLocText("Server_Path") + ":")); - servletPathField.setEditable(false); - - hostNameField.getDocument().addDocumentListener(docListener); - portNameField.getDocument().addDocumentListener(docListener); - webApplyField.getDocument().addDocumentListener(docListener); - servletField.getDocument().addDocumentListener(docListener); - - // 主机名 - JPanel servletNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - servletNamePane.add(new UILabel(Inter.getLocText("Host_Name") + "/IP" + ":")); - // 端口 - JPanel portNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - portNamePane.add(new UILabel(Inter.getLocText("Port") + ":")); - // web应用 - JPanel webApplyPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - webApplyPane.add(new UILabel(Inter.getLocText("Web_Apply") + ":")); - // servlet - JPanel servletPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - servletPane.add(new UILabel("Servlet" + ":")); - // 用户名 - JPanel userNamePane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - userNamePane.add(new UILabel(Inter.getLocText("Username") + ":")); - // 密码 - JPanel passWordPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - passWordPane.add(new UILabel(Inter.getLocText("Password") + ":")); - // https证书路径 - JPanel certificatePathPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - certificatePathPane.add(new UILabel(Inter.getLocText("FR-Designer_Certificate_Path")+ ":")); - // https秘钥 - JPanel certificatePassPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - certificatePassPane.add(new UILabel(Inter.getLocText("FR-Designer_Certificate_Pass") + ":")); - - //输入密码的时候检测下大写锁定 - passwordTextField.addMouseListener(new MouseAdapter() { - public void mouseEntered(MouseEvent e) { - if (java.awt.Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) { - hint = Inter.getLocText("CapsLock"); - } else { - hint = null; - } - ToolTipManager.sharedInstance().setInitialDelay(100); - passwordTextField.setToolTipText(hint); - } - }); - - coms = new Component[][]{ - new Component[]{initHttpsCheckBoxPane(),new UILabel()}, - new Component[]{servletPathPane, initServletNameToolBar()}, - new Component[]{servletNamePane, hostNameField}, - new Component[]{portNamePane, portNameField}, - new Component[]{webApplyPane, webApplyField}, - new Component[]{servletPane, servletField}, - new Component[]{userNamePane, userTextField}, - new Component[]{passWordPane, passwordTextField}, - new Component[]{certificatePathPane,initHttpsPane()}, - new Component[]{certificatePassPane,certificatePass} - }; - - setHttpsState(httpsCheckBox.isSelected()); - initNorthPane(true); - initCenterPane(); - this.add(northPane, BorderLayout.NORTH); - this.add(previewPane, BorderLayout.CENTER); - } - - private JToolBar initServletNameToolBar(){ - JToolBar servletNameToolBar = new JToolBar(); - - servletNameToolBar.setFloatable(false); - servletNameToolBar.setLayout(FRGUIPaneFactory.createBorderLayout()); - - servletNameToolBar.add(this.servletPathField); - UIButton testConnctionButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/m_web/cache.png")); - testConnctionButton.setToolTipText(Inter.getLocText("Datasource-Test_Connection")); - servletNameToolBar.add(testConnctionButton, BorderLayout.EAST); - - testConnctionButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ev) { - if (testConnection()) { - JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(RemoteEnvPane.this), Inter.getLocText("Datasource-Connection_successfully")); - } - } - }); - - return servletNameToolBar; - } - - private void initCenterPane(){ - // centerPane - previewPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); - previewPane.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Inter.getLocText("Note"))); - - JTextPane previewTextArea = new JTextPane(); - - // e:当行的长度大于所分配的宽度时,将换行. -// previewTextArea.setLineWrap(true); - previewTextArea.setEditable(false); - previewTextArea.setText(Inter.getLocText("Env-Des2")); - try { - previewTextArea.getDocument().insertString(previewTextArea.getText().length(), Inter.getLocText("Env_Des"), this.getRedSytleAttribute()); - previewTextArea.getDocument().insertString(previewTextArea.getText().length(), "\n" + Inter.getLocText("FR-Designer_Env_Des_Https"), this.getRedSytleAttribute()); - } catch (BadLocationException e) { - FRContext.getLogger().error(e.getMessage(), e); - } - previewPane.add(new JScrollPane(previewTextArea), BorderLayout.CENTER); - } - - @Override - protected String title4PopupWindow() { - return "Remote"; - } - - private JPanel initHttpsPane(){ - JPanel httpsPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - httpsPane.setLayout(FRGUIPaneFactory.createBorderLayout()); - httpsPane.add(certificatePath,BorderLayout.CENTER); - httpsPane.add(chooseDirBtn, BorderLayout.EAST); - chooseDirBtn.setPreferredSize(new Dimension(25, 25)); - chooseDirBtn.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - int saveValue = fileChooser.showOpenDialog(DesignerContext.getDesignerFrame()); - if (saveValue == JFileChooser.APPROVE_OPTION) { - File selectedFile = fileChooser.getSelectedFile(); - certificatePath.setText(selectedFile.getAbsolutePath()); - } - } - }); - return httpsPane; - } - - private JPanel initHttpsCheckBoxPane(){ - JPanel checkBoxPane = FRGUIPaneFactory.createRightFlowInnerContainer_S_Pane(); - checkBoxPane.add(httpsCheckBox); - httpsCheckBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - boolean isHttps = httpsCheckBox.isSelected(); - DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); - manager.setHttps(isHttps); - setHttpsState(isHttps); - updateNorthPane(isHttps); - } - }); - return checkBoxPane; - } - - private void setHttpsParas(){ - System.setProperty("javax.net.ssl.trustStore", this.certificatePath.getText()); - System.setProperty("javax.net.ssl.trustStorePassword", new String(this.certificatePass.getPassword())); - DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); - manager.setCertificatePath(this.certificatePath.getText()); - manager.setCertificatePass(new String(this.certificatePass.getPassword())); - manager.setHttps(this.httpsCheckBox.isSelected()); - } - - private boolean testConnection() { - RemoteEnv env = new RemoteEnv(); - String url = servletPathField.getText(); - env.setPath(url); - env.setUser(userTextField.getText()); - env.setPassword(new String(passwordTextField.getPassword())); - boolean connect = false; - try { - if (!StringUtils.isBlank(servletPathField.getText().trim())) { - if(url.startsWith("https:") && !this.httpsCheckBox.isSelected()){ - JOptionPane.showMessageDialog(this, Inter.getLocText("Datasource-Connection_failed")); - return false; - } - if(url.startsWith("https:")){ - setHttpsParas(); - } - connect = env.testConnectionWithOutRegisteServer(this); - } - } catch (Exception e) { - JOptionPane.showMessageDialog(this, Inter.getLocText("Datasource-Connection_failed")); - FRContext.getLogger().error(e.getMessage(), e); - } - if (connect) { - try { - String remoteVersion = env.getDesignerVersion(); - 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; - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - - } - - return connect; - } - - private AttributeSet getRedSytleAttribute() { - SimpleAttributeSet ds = new SimpleAttributeSet(); - StyleConstants.setForeground(ds, Color.red); - return ds; - } - - /** - * 显示show the content of serverPathFiled - * @param isHttps 是否启用https - */ - public void showServletPathField(boolean isHttps) { - String s = StringUtils.isBlank(webApplyField.getText()) ? "" : "/", t = StringUtils.isBlank(servletField.getText()) ? "" : "/", colon = StringUtils.isBlank(portNameField.getText()) ? "" - : ":"; - String prefix = isHttps ? "https://" : "http://"; - servletPathField.setText(prefix + hostNameField.getText() + colon + portNameField.getText() + s + webApplyField.getText() + t + servletField.getText()); - } - - @Override - public void populateBean(RemoteEnv ob) { - envPath = ob.getPath(); - boolean isHttps = false; - if(envPath != null){ - isHttps = envPath.startsWith("https"); - httpsCheckBox.setSelected(isHttps); - setHttpsState(isHttps); - } - updateNorthPane(isHttps); - if (envPath == null || ComparatorUtils.equals(envPath, StringUtils.EMPTY)) { - this.hostNameField.setText(StringUtils.EMPTY); - this.portNameField.setText(StringUtils.EMPTY); - this.webApplyField.setText(StringUtils.EMPTY); - this.servletField.setText(StringUtils.EMPTY); - this.servletPathField.setText(StringUtils.EMPTY); - this.httpsCheckBox.setSelected(false); - } else { - DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); - this.certificatePath.setText(manager.getCertificatePath()); - this.certificatePass.setText(manager.getCertificatePass()); - // 第二次出现":"的地方,port位置起始点 - int secondTime = envPath.indexOf(":", envPath.indexOf(":") + 1); - // 第三次出现"/"的地方 - int thirdTime = envPath.indexOf("/", secondTime + 1); - // 最后出现"/"的地方 - int lastTime = envPath.lastIndexOf("/"); - String hostName = isHttps ? envPath.substring(HTTPS_HOST_INDEX, secondTime) : envPath.substring(HTTP_HOST_INDEX, secondTime); - this.hostNameField.setText(hostName); - if (thirdTime < 0) { - this.portNameField.setText(envPath.substring(secondTime + 1)); - this.webApplyField.setText(StringUtils.EMPTY); - } else { - this.portNameField.setText(envPath.substring(secondTime + 1, thirdTime)); - if (thirdTime == lastTime) { - this.webApplyField.setText(StringUtils.EMPTY); - } else { - this.webApplyField.setText(envPath.substring(thirdTime + 1, lastTime)); - } - this.servletField.setText(envPath.substring(lastTime + 1)); - } - this.servletPathField.setText(envPath); - } - - this.userTextField.setText(ob.getUser() == null ? StringUtils.EMPTY : ob.getUser()); - - this.passwordTextField.setText(ob.getPassword() == null ? StringUtils.EMPTY : ob.getPassword()); - } - - private void initNorthPane(boolean isHttps){ - double p = TableLayout.PREFERRED; - double f = TableLayout.FILL; - double[] rowSize; - double[] size = {p,p,p,p,p,p,p,p}; - double[] httpsSize = {p,p,p,p,p,p,p,p,p,p}; - if(isHttps){ - rowSize = httpsSize; - }else{ - rowSize = size; - } - double[] columnSize = {p, f}; - northPane = TableLayoutHelper.createTableLayoutPane(coms, rowSize, columnSize); - } - - private void updateNorthPane(boolean isHttps){ - this.removeAll(); - initNorthPane(isHttps); - this.add(northPane, BorderLayout.NORTH); - this.add(previewPane,BorderLayout.CENTER); - this.revalidate(); - this.doLayout(); - this.repaint(); - } - - @Override - public RemoteEnv updateBean() { - String hostName = this.hostNameField.getText(); -// String port = this.portNameField.getText(); - String webApply = this.webApplyField.getText(); - String servlet = this.servletField.getText(); - String path = this.servletPathField.getText(); - String user = this.userTextField.getText(); - String password = new String(this.passwordTextField.getPassword()); - if (isAllEmpty(new String[]{hostName, webApply, servlet})) { - path = StringUtils.EMPTY; - } - - return new RemoteEnv(path, user, password); - } - - private boolean isAllEmpty(String[] strs) { - for (int i = 0; i < strs.length; i++) { - if (StringUtils.isNotEmpty(strs[i])) { - return false; - } - } - return true; - } - } - - public static void main(String[] args) { - Byte[] a = new Byte[1]; - System.out.println(a.getClass()); - } -} +} \ 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 1ee7a25ff..d2719636d 100644 --- a/designer-base/src/com/fr/env/LocalEnvPane.java +++ b/designer-base/src/com/fr/env/LocalEnvPane.java @@ -1,5 +1,6 @@ package com.fr.env; +import com.fr.base.env.resource.LocalEnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.ilable.UILabel; @@ -21,7 +22,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 +71,9 @@ public class LocalEnvPane extends BasicBeanPane { } @Override - public LocalEnv updateBean() { + public LocalEnvConfig updateBean() { String path = pathTextField.getText(); - return LocalEnv.createEnv(path); + return new LocalEnvConfig(path); } public String getPath() { @@ -80,7 +81,7 @@ public class LocalEnvPane extends BasicBeanPane { } @Override - public void populateBean(LocalEnv ob) { + public void populateBean(LocalEnvConfig ob) { if (StringUtils.isBlank(ob.getPath())) { return; } diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index ed43bc2da..6cb776a40 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -3,61 +3,42 @@ package com.fr.env; import com.fr.base.AbstractEnv; import com.fr.base.EnvException; import com.fr.base.FRContext; -import com.fr.base.ModifiedTable; -import com.fr.base.Parameter; -import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; import com.fr.base.Utils; +import com.fr.base.env.EnvContext; +import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.base.remote.RemoteDeziConstants; import com.fr.data.TableDataSource; -import com.fr.data.core.DataCoreUtils; -import com.fr.data.core.db.TableProcedure; -import com.fr.data.impl.Connection; import com.fr.data.impl.EmbeddedTableData; -import com.fr.data.impl.storeproc.ProcedureDataModel; -import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.dav.DavXMLUtils; -import com.fr.dav.UserBaseEnv; import com.fr.design.DesignerEnvManager; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.dialog.InformationWarnPane; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.fun.DesignerEnvProcessor; -import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrameFileDealerPane; -import com.fr.design.mainframe.loghandler.DesignerLogHandler; import com.fr.file.CacheManager; -import com.fr.file.DatasourceManager; -import com.fr.file.DatasourceManagerProvider; +import com.fr.file.ConnectionConfig; +import com.fr.file.TableDataConfig; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.general.LogRecordTime; import com.fr.general.LogUtils; import com.fr.general.http.HttpClient; +import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; -import com.fr.license.function.VT4FR; -import com.fr.regist.License; +import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; -import com.fr.stable.ArrayUtils; import com.fr.stable.EncodeConstants; +import com.fr.stable.Filter; import com.fr.stable.JavaCompileInfo; -import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; -import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLTools; -import com.fr.stable.xml.XMLableReader; import com.fr.web.ResourceConstants; -import javax.swing.*; +import javax.swing.JOptionPane; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; @@ -65,14 +46,12 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.awt.*; +import java.awt.Component; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -80,52 +59,25 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; -import java.net.NoRouteToHostException; -import java.net.Socket; -import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import java.util.logging.Level; -import java.util.regex.Pattern; - -public class RemoteEnv extends AbstractEnv { - private static final int TIME_OUT = 30 * 1000; - private static final int PLAIN_SOCKET_PORT = 80; - private static final int SSL_PORT = 443; - private static final int MAX_PER_ROUTE = 20; - private static final int MAX_TOTAL = 100; - private static final String REMOTE_PLUGIN = "remote_plugin.info"; + +/** + * @author null + */ +public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; - private final static String[] FILE_TYPE = {"cpt", "frm", "form", "cht", "chart"}; - private String path; - private String user; - private String password; - private Clock clock = null; - private String userID; - private Timer timer; - private int licNotSupport = 0; - private boolean isRoot = false; - private Timer logTimer = null; - private static ThreadLocal threadLocal = new ThreadLocal(); - private boolean isReadTimeOut = false; + private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; private String buildFilePath; - - public RemoteEnv() { - this.clock = new Clock(this); - } + private final RemoteEnvConfig env; public RemoteEnv(String path, String userName, String password) { - this(); - this.path = path; - this.user = userName; - this.password = password; + env = new RemoteEnvConfig(path, userName, password); } /** @@ -133,81 +85,22 @@ public class RemoteEnv extends AbstractEnv { */ @Override public String getPath() { - return this.path; - } - - public void setPath(String s) { - this.path = s; + return env.getPath(); } /** * 当前设计环境的用户名,用于远程设计 */ + @Override public String getUser() { - return user; + return env.getUsername(); } - public void setUser(String user) { - this.user = user; - clearUserID(); - } public String getPassword() { - return password; - } - - // 修复密码中包含特殊字符,无法登录的问题 - private String getEncodedPassword() { - try { - return URLEncoder.encode(password, "UTF-8"); - } catch (UnsupportedEncodingException e) { - return password; - } - } - - public void setPassword(String password) { - this.password = password; - clearUserID(); - } - - public Clock getClock() { - return this.clock; + return env.getPassword(); } - public void setClock(Clock clock) { - this.clock = clock; - } - - private void clearUserID() { - this.userID = null; - } - - public void setThreadLocal(String value) { - synchronized (this) { - threadLocal.set(value); - } - - } - - public String getThreadLocal() { - return threadLocal.get(); - } - - /** - * 所有与服务器端交互前,都要调用这个方法生成UserID - */ - private String createUserID() throws EnvException { - // 如果登录之后userID还是null - if (this.userID == null) { - if (!VT4FR.RemoteDesign.support() && licNotSupport <= 0) { - licNotSupport++; - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - } - throw new EnvException(Inter.getLocText("Env-Invalid_User_and_Password")); - } - - return this.userID; - } private HttpClient createHttpMethod(HashMap para) throws EnvException, UnsupportedEncodingException { return createHttpMethod(para, false); @@ -216,31 +109,43 @@ public class RemoteEnv extends AbstractEnv { /** * 根据nameValuePairs,也就是参数对,生成PostMethod */ - private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException, UnsupportedEncodingException { - String methodPath = this.path; + private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { + String methodPath = getPath(); if (!isSignIn) { - methodPath = methodPath + "?id=" + createUserID(); - } - return new HttpClient(methodPath, para); + methodPath = methodPath + "?id=" + EnvContext.currentToken(); + } + HttpClient client = new HttpClient(methodPath, para); + /* + todo post 方法好象过去不了 + 但是get方法也会有一些url参数问题,尤其是图表部分 + 比如: + op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= + */ + client.asGet(); + return client; } /** * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters */ - private HttpClient createHttpMethod2(HashMap para) throws EnvException { - String methodPath = path + '?' + "id=" + createUserID(); - return new HttpClient(methodPath, para, true); + private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { + String methodPath = getPath() + '?' + "id=" + createUserID(); + return new HttpClient(methodPath); + } + + private String createUserID() { + return EnvContext.currentToken(); } - /* - * Read the response body. - * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 - * - * 这样做的目的是确保method.releaseConnection - * - * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... - */ + /* + * Read the response body. + * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 + * + * 这样做的目的是确保method.releaseConnection + * + * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... + */ /** * execute method之后,取返回的inputstream @@ -276,7 +181,6 @@ public class RemoteEnv extends AbstractEnv { } else if (ComparatorUtils.equals(message, RemoteDeziConstants.FILE_LOCKED)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Remote_File_is_Locked")); return null; - } else if (message.startsWith(RemoteDeziConstants.RUNTIME_ERROR_PREFIX)) { } return new ByteArrayInputStream(bytes); } finally { @@ -288,17 +192,6 @@ public class RemoteEnv extends AbstractEnv { } } - private void doWithTimeOutException() { - boolean isNotNeedTip = ComparatorUtils.equals(getThreadLocal(), "HEART_BEAT") || ComparatorUtils.equals(getThreadLocal(), "LOG_MESSAGE"); - if (!isReadTimeOut && !isNotNeedTip) { - isReadTimeOut = true; - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Data", "read_time_out"})); - isReadTimeOut = false; - } - FRContext.getLogger().info("Connection reset "); - } - - /** * nameValuePairs,这个参数要接着this.path,拼成一个URL,否则服务器端req.getParameter是无法得到的 * @@ -347,371 +240,38 @@ public class RemoteEnv extends AbstractEnv { return sb.toString(); } - /** - * 测试连接服务器 - * - * @return 测试连接成功返回true - * @throws Exception 异常 - */ public boolean testServerConnection() throws Exception { - return testConnection(true, true, DesignerContext.getDesignerFrame()); + throw new UnsupportedOperationException("unsupport now"); +// return testConnection(true, true, DesignerContext.getDesignerFrame()); } - /** - * 测试当前配置是否正确 - * - * @return 链接是否成功 - * @throws Exception 异常 - */ + @Override public boolean testServerConnectionWithOutShowMessagePane() throws Exception { - return testConnection(false, true, DesignerContext.getDesignerFrame()); + throw new UnsupportedOperationException("unsupport now"); } - /** - * 主要用于在环境配置面板中的测试连接按钮时,不要注册进远程环境 - * - * @param messageParentPane 弹框的依赖的面板 - * @return 是否测试连接成功 - * @throws Exception 异常 - */ public boolean testConnectionWithOutRegisteServer(Component messageParentPane) throws Exception { - return testConnection(true, false, messageParentPane); - } - - - private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { - extraChangeEnvPara(); - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "test_server_connection"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - if (path.startsWith("https") && (!DesignerEnvManager.getEnvManager().isHttps())) { - return false; - } - - HttpClient client = createHttpMethod(para, true); - - String res = stream2String(execute4InputStream(client)); - if (res == null) { - if (needMessage) { - JOptionPane.showMessageDialog(parentComponent, Inter.getLocText("Datasource-Connection_failed")); - } - return false; - } else if (ComparatorUtils.equals(res, "true")) { - if (!clock.connected && isRegisteServer) { - //服务器中断又重新启动之后,重新向远程服务器注册 - register2Server(); - } - return true; - } else if (ComparatorUtils.equals(res, "invalid username or password.")) { - JOptionPane.showMessageDialog(parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) - , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); - return false; - } else if (res.contains("RegistEditionException")) { - if (needMessage) { - JOptionPane.showMessageDialog(parentComponent, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); - } else { - FRLogger.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); - } - return false; - } else if (ComparatorUtils.equals(res, "war not support remote design.")) { - if (needMessage) { - JOptionPane.showMessageDialog(parentComponent, Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); - } else { - FRLogger.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); - } - return false; - } else { - throw new EnvException(res); - } - } - - private void extraChangeEnvPara() { - //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. - DesignerEnvProcessor envProcessor = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); - if (envProcessor != null) { - this.path = envProcessor.changeEnvPathBeforeConnect(user, password, path); - } + throw new UnsupportedOperationException("unsupport now"); } private void setHttpsParas() { - if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { + if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); System.setProperty(PWD_KEY, envManager.getCertificatePass()); } } - private void register2Server() { - try { - SignIn.signIn(this); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - } - - /** - * 心跳访问,用来更新当前用户的访问时间 - * - * @throws Exception - */ - public void heartBeatConnection() throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "heart_beat"); - para.put("user", user); - - HttpClient client = createHttpMethod(para); - execute4InputStream(client); - - //这做法不好, 30秒刷一次, 刷新的时候会重新构建树, 构建完会把子节点都收缩起来, 效果太差. - //为什么不保存刷新前树的伸缩状态, 因为刷新后的树和刷新前的树的结构未必是一致的. - - //服务器通知客户端更新左上角文件树面板 -// try { -// if (ComparatorUtils.equals(stream2String(execute4InputStream(method)), "true")) { -// DesignerFrameFileDealerPane.getInstance().refresh(); -// } -// } catch (Exception e) { -// FRLogger.getLogger().error(e.getMessage()); -// } - } - /** * 返回描述该运行环境的名字 * * @return 描述环境名字的字符串 */ + @Override public String getEnvDescription() { return Inter.getLocText("Env-Remote_Server"); } - /** - * 登录,返回userID - */ - public void signIn() throws Exception { - if (clock != null && clock.connected) { - return; - } - String remoteVersion = getDesignerVersion(); - if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { - throw new Exception("version not match"); - } - clearUserID(); - startLogTimer(); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "r_sign_in"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - simulaRPC(para, true); - - //neil:调用Clock方法,10秒向服务器发送一个字节,确保没掉线 - if (clock == null) { - Clock clock = new Clock(this); - setClock(clock); - } - clock.start(); - - // 远程登录的心跳访问, 防止设计器强制关闭而没有Logout - if (timer != null) { - timer.cancel(); - } - timer = new Timer(); - timer.schedule(new TimerTask() { - public void run() { - try { - RemoteEnv.this.setThreadLocal("HEART_BEAT"); - RemoteEnv.this.heartBeatConnection(); - } catch (Exception e) { - FRContext.getLogger().error("Server may be disconnected.", e); - } - } - }, RemoteDeziConstants.HEARTBEAT_DELAY, RemoteDeziConstants.HEARTBEAT_DELAY); - } - - - private void startLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - } - - logTimer = new Timer(); - logTimer.schedule(new TimerTask() { - public void run() { - try { - RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); - FRContext.getCurrentEnv().printLogMessage(); - } catch (Exception e) { - FRLogger.getLogger().info(e.getMessage()); - } - } - }, 10000, 10000); - } - - private void stopLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - logTimer = null; - } - } - - /** - * 根据userID sign out - * - * @return 成功签出返回true - * @throws Exception - */ - public boolean signOut() throws Exception { - if (userID == null) { - return true; - } - stopLogTimer(); - // richer:登出的时候就把定时发送的时钟停掉 - clock.stop(); - // richer:把轮训使用的定时器也去掉 - timer.cancel(); - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "r_sign_out"); - para.put("id", userID); - - return simulaRPC(para, false - ); - } - - protected boolean simulaRPC(HashMap para, boolean isSignIn) throws Exception { - HttpClient client = createHttpMethod(para, isSignIn); - - // execute method取到input stream再转成String - String resJSON = null; - try { - resJSON = stream2String(execute4InputStream(client)); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - - if (resJSON == null) { - return false; - } - if (resJSON.contains("RegistEditionException")) { - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - return false; - } - try { - JSONObject jo = new JSONObject(resJSON); - - if (isSignIn) { - if (jo.has("id")) { - userID = jo.getString("id"); - } - if (jo.has("isRoot")) { - isRoot = jo.getBoolean("isRoot"); - } - - if (userID != null) { - return true; - } - } else { - if (jo.has("res")) { - return jo.getBoolean("res"); - } - } - String exception = jo.getString("exp"); - if (exception != null) { - throw new EnvException(exception); - } - } catch (JSONException je) { - // 返回的resJSON不是JSON格式的,那就直接返回resJSON作为userID - return true; - } - - return true; - } - - protected boolean doLockOperation(String[] filePathes, String cmd) throws Exception { - if (filePathes == null || filePathes.length == 0) { - return true; - } - - JSONArray ja = new JSONArray(filePathes); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", cmd); - para.put("pathes", ja.toString()); - - return simulaRPC(para, false); - } - - /** - * 取路径filePath下面文件的lock - *

- * 处于同一个原子操作,要么拿到所有的锁,要么一个锁也没有拿到 - */ - public boolean getLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_get_lock"); - } - - /** - * 解锁文件 - * - * @param filePathes 文件路径 - * @return 成功解锁返回true - * @throws Exception - */ - public boolean releaseLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_release_lock"); - } - - /** - * 当前Env下,tplPath目录下是否存在模板 - * - * @param reportPath 路径 - * @return 是否存在 - */ - @Override - public boolean isTemplateExist(String reportPath) throws Exception { - if (reportPath == null) { - return false; - } - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_report_exist"); - para.put("report_path", reportPath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - return ComparatorUtils.equals(stream2String(input), "true"); - } - - /** - * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 - * - * @param tplPath 路径 - * @throws Exception - */ - @Override - public void unlockTemplate(String tplPath) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_close_report"); - para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); - HttpClient client = createHttpMethod(para); - - InputStream input = execute4InputStream(client); - String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); - - FRContext.getLogger().error(info); - } - public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -749,8 +309,9 @@ public class RemoteEnv extends AbstractEnv { /** * 刷新数出流,并提交 * - * @throws IOException + * @throws IOException e */ + @Override public void flush() throws IOException { super.flush(); post2Server(); @@ -760,121 +321,42 @@ public class RemoteEnv extends AbstractEnv { * 将指定字节写入输入流数组 * * @param b 写入的字节 - * @throws IOException */ @Override - public void write(int b) throws IOException { + public void write(int b) { out.write(b); } } - /** - * 测试数据连接是否能够正确的连接上 - * - * @param database 数据连接 - * @return 如果能正确的连接到数据库则返回true - * @throws Exception 无法正确连接到数据库则抛出此异常 - * TODO alex_ENV 个人以为,这里应该是测试所有Connection的连接,所以Connection与TableData接口的关联需要思考 - */ - @Override - public boolean testConnection(com.fr.data.impl.Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把database写成xml文件到out - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_test_con"); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * ben:取schema - */ @Override - public String[] getTableSchema(com.fr.data.impl.Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_schema"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - return DavXMLUtils.readXMLFileSchema(input); + public boolean updateAuthorities(DesignAuthority[] authorities) throws Exception { + return RemoteEnvUtils.updateAuthorities(authorities, this); } - /** - * b:分别取Table,View,Procedure,实际应用时更有意义 - */ @Override - public TableProcedure[] getTableProcedure(com.fr.data.impl.Connection database, String type, String schema) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_tables"); - para.put("__type__", type); - para.put("__dbschema__", schema); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new TableProcedure[0]; - } - return DavXMLUtils.readXMLSQLTables(input); - } - - public List getProcedures(com.fr.data.impl.Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { - HashMap schemaTableProcedureMap = new HashMap(); - List sqlTableObjs = new ArrayList(); - TableProcedure[] sqlTableObj = null; - int len = schemas.length; - if (len > 0) { - for (int i = 0; i < len; i++) { - String schema = schemas[i]; - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableObjs.add(sqlTableObj); - schemaTableProcedureMap.put(schema, sqlTableObj); - } - } else { - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, null); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableObjs.add(sqlTableObj); - schemaTableProcedureMap.put(null, sqlTableObj); - } - DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); - return sqlTableObjs; + public DesignAuthority[] getAuthorities() { + return RemoteEnvUtils.getAuthorities(this); } /** - * 在当前路径下新建文件夹 + * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 * - * @param folderPath 文件名 - * @return 成功创建返回true - * @throws Exception + * @param key 键值 + * @param value 值 + * @return 如果写入成功,返回true + * @throws Exception e */ - @Override - public boolean createFolder(String folderPath) throws Exception { - HashMap para = new HashMap(); + public boolean writePrivilegeMap(String key, String value) throws Exception { + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_folder"); - para.put("folder_path", folderPath); + para.put("cmd", "write_privilege_map"); + para.put("current_user", getUser()); + para.put("current_password", this.getPassword()); + para.put("key", key); + para.put("value", value); + //jim :加上user,远程设计点击预览时传递用户角色信息 HttpClient client = createHttpMethod(para); InputStream input = execute4InputStream(client); @@ -886,188 +368,14 @@ public class RemoteEnv extends AbstractEnv { } /** - * 新建一个文件 - * - * @param filePath :目标文件相对路径 - * @return 成功新建返回true - * @throws Exception + * DataSource中去除当前角色没有权限访问的数据源 */ - public boolean createFile(String filePath) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_file"); - para.put("file_path", filePath); + @Override + public void removeNoPrivilegeConnection() { + TableDataConfig dm = TableDataConfig.getInstance(); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - public boolean renameFile(String newPath, String oldPath) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_rename_file"); - para.put("newPath", newPath); - para.put("oldPath", oldPath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否存在 - * - * @param filePath :目标文件相对路径 - * @return 文件是否存在 - * @throws Exception - */ - @Override - public boolean fileExists(String filePath) throws Exception { - if (filePath == null) { - return false; - } - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_exists"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否锁住 - * - * @param filePath 文件路径 - * @return 文件被锁住了,返回true - * @throws Exception - */ - public boolean fileLocked(String filePath) throws Exception { - if (filePath == null) { - return false; - } - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_locked"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - - /** - * 注册环境,用于检测是否启动定时器,主要用于本地环境来监测远程 - * - * @param env 用户环境 - */ - public void registerUserEnv(UserBaseEnv env) { - } - - /** - * 用于检测用户环境 - * ,启动定时器 - */ - public void startUserCheckTimer() { - } - - - /** - * 停止定时器 - */ - public void stopUserCheckTimer() { - } - - /** - * 删除文件 - * - * @param filePath 文件地址 - * @return 删除成功返回true - */ - public boolean deleteFile(String filePath) { - if (filePath == null) { - return false; - } try { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "delete_file"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - return false; - } - - /** - * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 - * - * @param key 键值 - * @param value 值 - * @return 如果写入成功,返回true - * @throws Exception - */ - public boolean writePrivilegeMap(String key, String value) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "write_privilege_map"); - para.put("current_user", this.user); - para.put("current_password", this.password); - para.put("key", key); - para.put("value", value); - - HttpClient client = createHttpMethod(para); //jim :加上user,远程设计点击预览时传递用户角色信息 - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * DataSource中去除当前角色没有权限访问的数据源 - */ - public void removeNoPrivilegeConnection() { - DatasourceManagerProvider dm = DatasourceManager.getProviderInstance(); - - try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "env_get_role"); para.put("currentUsername", this.getUser()); @@ -1076,11 +384,11 @@ public class RemoteEnv extends AbstractEnv { HttpClient client = createHttpMethod(para); InputStream input = execute4InputStream(client); JSONArray ja = new JSONArray(stream2String(input)); - ArrayList toBeRemoveTDName = new ArrayList(); + ArrayList toBeRemoveTDName = new ArrayList<>(); for (int i = 0; i < ja.length(); i++) { String toBeRemoveConnName = (String) ((JSONObject) ja.get(i)).get("name"); - dm.removeConnection(toBeRemoveConnName); - Iterator it = dm.getTableDataNameIterator(); + ConnectionConfig.getInstance().removeConnection(toBeRemoveConnName); + Iterator it = dm.getTableDatas().keySet().iterator(); while (it.hasNext()) { String tdName = (String) it.next(); TableData td = dm.getTableData(tdName); @@ -1096,165 +404,6 @@ public class RemoteEnv extends AbstractEnv { } } - /** - * 列出WEB-INF目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF目录下指定路径的文件夹与文件 - * @throws Exception - */ - @Override - public FileNode[] listFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, false); - } - - /** - * 列出WEB-INF上层目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF上层目录下指定路径的文件夹与文件 - * @throws Exception - */ - @Override - public FileNode[] listReportPathFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, true); - } - - private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { - FileNode[] fileNodes; - - HashMap para = new HashMap(); - para.put("op", "fs_remote_design"); - para.put("cmd", "design_list_file"); - para.put("file_path", rootFilePath); - para.put("currentUserName", this.getUser()); - para.put("currentUserId", this.createUserID()); - para.put("isWebReport", isWebReport ? "true" : "false"); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return new FileNode[0]; - } - - // 远程环境下左侧目录树暂不需要打开xlsx,xls文件 - fileNodes = DavXMLUtils.readXMLFileNodes(input); - ArrayList al = new ArrayList(); - for (int i = 0; i < fileNodes.length; i++) { - al.add(fileNodes[i]); - } - - FileNode[] fileNodes2 = new FileNode[al.size()]; - for (int i = 0; i < al.size(); i++) { - fileNodes2[i] = al.get(i); - } - - return fileNodes2; - } - - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @return 列出目标目录下所有cpt文件或文件夹 - * @throws Exception - */ - public FileNode[] listCpt(String rootFilePath) throws Exception { - return listCpt(rootFilePath, false); - } - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @param recurse 是否递归查找其子目录 - * @return 列出目标目录下所有cpt文件或文件夹 - * @throws Exception - */ - public FileNode[] listCpt(String rootFilePath, boolean recurse) { - List fileNodeList = new ArrayList(); - try { - listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - return fileNodeList.toArray(new FileNode[fileNodeList.size()]); - } - - private void listAll(String rootFilePath, List nodeList, String[] fileTypes, boolean recurse) throws Exception { - FileNode[] fns = listFile(rootFilePath); - for (FileNode fileNode : fns) { - if (isAcceptFileType(fileNode, fileTypes)) { - nodeList.add(fileNode); - } else if (fileNode.isDirectory()) { - if (recurse) { - listAll(rootFilePath + File.separator + fileNode.getName(), nodeList, fileTypes, true); - } else { - nodeList.add(fileNode); - } - } - } - } - - private boolean isAcceptFileType(FileNode fileNode, String[] fileTypes) { - for (String fileType : fileTypes) { - if (fileNode.isFileType(fileType)) { - return true; - } - } - return false; - } - - /** - * 获取指定数据集的参数 - * - * @param tableData 数据集 - * @return 数据集的参数 - * @throws Exception 获取参数失败则抛出此异常 - */ - public Parameter[] getTableDataParameters(TableData tableData) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - -// 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileTableData(tableData, out); - - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_td_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return new Parameter[0]; - } - return DavXMLUtils.readXMLParameters(input); - } - - - /** - * 获取存储过程中的参数 - * - * @param storeProcedure 存储过程 - * @return 返回存储过程中的所有参数组成的数组 - * @throws Exception 如果获取参数失败则抛出此异常 - */ - public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_sp_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return new Parameter[0]; - } - return DavXMLUtils.readXMLParameters(input); - } - @Override public EmbeddedTableData previewTableData(Object tableData, Map parameterMap, int rowCount) throws Exception { return previewTableData(null, tableData, parameterMap, rowCount); @@ -1269,6 +418,7 @@ public class RemoteEnv extends AbstractEnv { * @return 实际的二维数据集 * @throws Exception 如果生成数据失败则抛出此异常 */ + @Override public EmbeddedTableData previewTableData(TableDataSource dataSource, Object tableData, java.util.Map parameterMap, int rowCount) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -1278,7 +428,7 @@ public class RemoteEnv extends AbstractEnv { // 把parameterMap转成JSON格式的字符串 JSONObject jo = new JSONObject(parameterMap); String jsonParameter = jo.toString(); - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_preview_td"); para.put("pars", jsonParameter); @@ -1298,186 +448,41 @@ public class RemoteEnv extends AbstractEnv { * @param tableData 带参数的数据集 * @param parameterMap 参数键值对 * @param start 开始 - * @param end 结尾 - * @param cols 列名 - * @param colIdx 列序号 - * @return 实际的二位数据条 - * @throws Exception 异常 - */ - public Object previewTableData(Object tableData, java.util.Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { - return previewTableData(tableData, parameterMap, -1); - } - - @Override - public Object previewTableData(TableDataSource dataSource, Object tableData, Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { - return previewTableData(dataSource, tableData, parameterMap, -1); - } - - /** - * nameValuePairs,这个参数要接着this.path,拼成一个URL,否则服务器端req.getParameter是无法得到的 - * - * @param bytes 数据 - * @param para 参数 - * @return 从服务器端得到InputStream - * @throws Exception 异常 - */ - public InputStream postBytes2ServerB(byte[] bytes, HashMap para) throws Exception { - HttpClient client = createHttpMethod2(para); - client.setContent(bytes); - return execute4InputStream(client); - } - - /** - * Read XML.
- * The method will be invoked when read data from XML file.
- * May override the method to read the data that you saved. - */ - 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.user = tmpVal; - } - if ((tmpVal = reader.getAttrAsString("password", null)) != null) { - this.password = tmpVal; - } - } - } - } - - /** - * Write XML.
- * The method will be invoked when save data to XML file.
- * May override the method to save your own data. - * - * @param writer the PrintWriter. - */ - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); - } - - - public static class Clock { - - private static final long CONNECT_INTERVAL = 3000L; - private boolean connected = false; - - private RemoteEnv remoteEnv; - - public Clock(RemoteEnv remoteEnv) { - this.remoteEnv = remoteEnv; - } - - /** - * 开始连接 - */ - public void start() { - if (connected) { - return; - } - connected = true; - - new Thread(new Runnable() { - @Override - public void run() { - // richie:连续三次尝试连接都没有响应才判定为丢失连接 - while (connected) { - try { - attemptConnect(); - } catch (Exception ex) { - try { - attemptConnect(); - } catch (Exception ee) { - try { - attemptConnect(); - } catch (Exception exc) { - stop(); - if (exc instanceof NoRouteToHostException) { - //网络问题导致的连接中断 - if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Connect2Server_Again"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) - == JOptionPane.OK_OPTION) { - //调用重新连接服务器的方法 - connectedAgain(); - } - } else { - //服务器关闭引起的连接中断 - if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Re_Connect_to_Server"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) - == JOptionPane.OK_OPTION) { - //调用重新连接服务器的方法 - connectedAgain(); - } - } - } - } - } - } - } - }).start(); - } - - /** - * 服务器连接中断后重新连接 - */ - private void connectedAgain() { - try { - if (!remoteEnv.testServerConnectionWithOutShowMessagePane()) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Datasource-Connection_failed", "check_communication"}, - new String[]{",", "!"})); - DesignerFrameFileDealerPane.getInstance().refresh(); - return; - } - String remoteVersion = remoteEnv.getDesignerVersion(); - if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { - String infor = Inter.getLocText("FR-Server_Version_Tip"); - String moreInfo = Inter.getLocText("FR-Server_Version_Tip_MoreInfo"); - FRLogger.getLogger().log(Level.WARNING, infor); - new InformationWarnPane(infor, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); - return; - } - SignIn.signIn(remoteEnv); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); - } catch (Exception em) { - FRContext.getLogger().error(em.getMessage(), em); - } - } - - /** - * 停止连接 - */ - public void stop() { - connected = false; - } - - private void attemptConnect() throws Exception { - Thread.sleep(CONNECT_INTERVAL); - Pattern pattern = Pattern.compile("[/:]+"); - String[] strs = pattern.split(remoteEnv.path); - - String shost = strs[1];//host,如:192.168.100.195 - int sport = Integer.parseInt(strs[2]);//端口,如:8080 + * @param end 结尾 + * @param cols 列名 + * @param colIdx 列序号 + * @return 实际的二位数据条 + * @throws Exception 异常 + */ + @Override + public Object previewTableData(Object tableData, java.util.Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { + return previewTableData(tableData, parameterMap, -1); + } - Socket socket = new Socket(shost, sport); - //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 - socket.setOOBInline(false); - socket.sendUrgentData(0xFF); - socket.close(); - } + @Override + public Object previewTableData(TableDataSource dataSource, Object tableData, Map parameterMap, int start, int end, String[] cols, int[] colIdx) throws Exception { + return previewTableData(dataSource, tableData, parameterMap, -1); } /** - * 读报表运行环境所需的配置文件,如datasource.xml, config.xml,这些文件都保存在WEB-INF/resources目录下面 + * nameValuePairs,这个参数要接着this.path,拼成一个URL,否则服务器端req.getParameter是无法得到的 * - * @param resourceName 配置文件的名字,如datasource.xml - * @return 输入流 - * @throws Exception + * @param bytes 数据 + * @param para 参数 + * @return 从服务器端得到InputStream + * @throws Exception 异常 */ - @Override - public InputStream readResource(String resourceName) throws Exception { - return readBean(resourceName, ProjectConstants.RESOURCES_NAME); + public InputStream postBytes2ServerB(byte[] bytes, HashMap para) throws Exception { + HttpClient client = createHttpMethod2(para); + /* + todo post 方法好象过去不了 + 但是get方法也会有一些url参数问题,尤其是图表部分 + 比如: + op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= + */ +// client.asGet(); + client.setContent(bytes); + return execute4InputStream(client); } @@ -1487,18 +492,14 @@ public class RemoteEnv extends AbstractEnv { * @param path 制定路径,是基于报表目录下resource文件夹路径 * @return 读到的文件 */ - public File[] readPathSvgFiles(String path) { - String cataloguePath = StableUtils.pathJoin(new String[]{CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path}); + @Override + public String[] readPathSvgFiles(String path) { + String cataloguePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path); - //检查缓存文件保存的目录下serversvgs文件夹是否存在 ,先用来暂存服务器读过来的svg文件 - File catalogue = new File(cataloguePath); - if (!catalogue.exists()) { - catalogue.mkdirs(); - } - ArrayList fileArray = new ArrayList<>(); + ArrayList fileArray = new ArrayList<>(); try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); @@ -1512,17 +513,17 @@ public class RemoteEnv extends AbstractEnv { JSONObject jsonObject = (JSONObject) ja.get(i); String svgFileName = (String) jsonObject.get("svgfileName"); String svgfileContent = (String) jsonObject.get("svgfileContent"); - File file = new File(StableUtils.pathJoin(new String[]{cataloguePath, svgFileName})); + + String file = StableUtils.pathJoin(cataloguePath, svgFileName); InputStream in = new ByteArrayInputStream(svgfileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); - FileOutputStream out = new FileOutputStream(file); - IOUtils.copyBinaryTo(in, out); + ResourceIOUtils.write(file, in); fileArray.add(file); } } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } - return fileArray.toArray(new File[fileArray.size()]); + return fileArray.toArray(new String[fileArray.size()]); } @@ -1533,11 +534,12 @@ public class RemoteEnv extends AbstractEnv { * @return 是否写入成功 * @throws Exception 异常 */ + @Override public boolean writeSvgFile(SvgProvider svgFile) throws Exception { testServerConnection(); - HashMap para = new HashMap(); - para.put("op", "svginit"); + HashMap para = new HashMap<>(); + para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); para.put("current_uid", this.createUserID()); @@ -1589,7 +591,7 @@ public class RemoteEnv extends AbstractEnv { public boolean writeResource(XMLFileManagerProvider mgr) throws Exception { testServerConnection(); - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); @@ -1624,9 +626,10 @@ public class RemoteEnv extends AbstractEnv { * @param prefix 当前Env下得工程分类,如reportlets,lib等 * @return InputStream 输入流 */ + @Override public InputStream readBean(String beanPath, String prefix) throws Exception { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_open"); para.put(RemoteDeziConstants.PREFXI, prefix); @@ -1645,9 +648,9 @@ public class RemoteEnv extends AbstractEnv { * @param prefix 当前Env下得工程分类,如reportlets,lib等 * @return OutputStream 输出流 */ - public OutputStream writeBean(String beanPath, String prefix) - throws Exception { - HashMap para = new HashMap(); + @Override + public OutputStream writeBean(String beanPath, String prefix) { + HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_save_report"); para.put(RemoteDeziConstants.PREFXI, prefix); @@ -1656,185 +659,21 @@ public class RemoteEnv extends AbstractEnv { return new Bytes2ServerOutputStream(para); } - /** - * 返回数据库表的列名 - * - * @param selectedName 所选择数据库名 - * @param schema 数据库模式,用于存储过程 - * @param tableName 所选择数据库名 - */ - @Override - public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_columns"); - para.put("dsName", selectedName); - para.put("schema", schema); - para.put("tableName", tableName); - - HttpClient client = createHttpMethod2(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return null; - } - - String colums = stream2String(input); - if (StringUtils.isEmpty(colums)) { - return null; - } - return colums.split("\\."); - } - - /** - * 返回模板文件路径 - */ @Override public String getWebReportPath() { return getPath().substring(0, getPath().lastIndexOf("/")); } - @Override - public String getProcedureText(String connectionName, String databaseName) throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_procedure_text"); - para.put("procedure_name", databaseName); - para.put("connectionName", connectionName); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return StringUtils.EMPTY; - } - return DavXMLUtils.readXMLProcedureText(input); - } - - @Override - public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_sp_parameters"); - para.put("__name__", databaseName); - para.put("__default_value__", parameterDefaultValue); - para.put("connectionName", connectionName); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new StoreProcedureParameter[0]; - } - return DavXMLUtils.readXMLStoreProcedureParameters(input); - } - - /** - * 获取datasource.xml文件的修改表 - */ - public ModifiedTable getDataSourceModifiedTables(String type) { - try { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "get_datasource_modified_tables"); - para.put("type", type); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - if (input == null) { - return new ModifiedTable(); - } - return DavXMLUtils.readXMLModifiedTables(input); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new ModifiedTable(); - } - - - /** - * 写修改表 - * - * @param modifiedTable 修改表 - * @param type 操作类型,是数据连接还是服务器数据集 - * @return 写入成功返回true - */ - public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); - try { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "update_modifytable_to_server"); - para.put("type", type); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return false; - } - - public String[] getProcedureColumns(StoreProcedure storeProcedure, java.util.Map parameterMap) throws Exception { - String[] columns; - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp"); - HttpClient client = createHttpMethod(para); - try { - InputStream input = execute4InputStream(client); - - if (input == null) { - return ArrayUtils.EMPTY_STRING_ARRAY; - } - - columns = DavXMLUtils.readXMLSPColumns(input); - return columns; - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - - return new String[0]; - } - - ; - - public String[] getProcedureColumns(String name) throws Exception { - String[] columns; - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp_columns_name"); - para.put("name", name); - HttpClient client = createHttpMethod(para); - try { - InputStream input = execute4InputStream(client); - if (input == null) { - return ArrayUtils.EMPTY_STRING_ARRAY; - } - columns = DavXMLUtils.readXMLSPColumns(input); - return columns; - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - return new String[0]; - - } /** * 输出日志信息 * * @throws Exception */ + @Override public void printLogMessage() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "get_log_message"); @@ -1844,114 +683,27 @@ public class RemoteEnv extends AbstractEnv { } LogRecordTime[] records = LogUtils.readXMLLogRecords(input); for (LogRecordTime logRecordTime : records) { - DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); + //TODO } } - public String getUserID() { - return userID; - } - - //TODO: - - /** - * 预览存储过程 - * - * @param storeProcedure 存储过程 - * @param parameterMap 参数map - * @param rowCount 行数 - * @return 返回取到的存储过程 - */ @Override - public ProcedureDataModel[] previewProcedureDataModel(StoreProcedure storeProcedure, Map parameterMap, int rowCount) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - - // 把parameterMap转成JSON格式的字符串 - JSONObject jo = new JSONObject(parameterMap); - String jsonParameter = jo.toString(); - - try { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp"); - para.put("pars", jsonParameter); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - - TableData[] tableDatas = DavXMLUtils.readXMLTableDataArray(input); - if (tableDatas == null || tableDatas.length == 0) { - return new ProcedureDataModel[0]; - } - ProcedureDataModel[] procedureDataModels = new ProcedureDataModel[tableDatas.length]; - for (int i = 0; i < tableDatas.length; i++) { - if (tableDatas[i] instanceof EmbeddedTableData) { - procedureDataModels[i] = ((EmbeddedTableData) tableDatas[i]).trans2ProcedureDataModel(); - } - } - return procedureDataModels; - - - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - return new ProcedureDataModel[0]; - } - - - public String getAppName() { - return "WebReport"; - } - - /** - * 是否为Oracle数据连接 - * - * @param database 数据连接 - * @return 是返回true - * @throws Exception - */ - public boolean isOracle(Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_isOracle"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return true; - } - return DavXMLUtils.readXMLBoolean(input); - } - public String[] getSupportedTypes() { return FILE_TYPE; } - /** - * 在模板面板中是否支持增加打开所在文件夹、重命名、删除三个工具栏选项 - * - * @return 不支持返回false - */ - public boolean isSupportLocalFileOperate() { - return false; - } - /** * 判断是否有文件夹权限 * * @param path 路径 * @return 有权限则返回true */ + @Override public boolean hasFileFolderAllow(String path) { HttpClient client = null; try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); para.put("current_uid", this.createUserID()); @@ -1965,48 +717,13 @@ public class RemoteEnv extends AbstractEnv { } return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FRContext.getLogger().error(e.getMessage()); return false; } } - /** - * 是否是管理员身份 - * - * @return 是则返回true - */ - public boolean isRoot() { - return isRoot; - } - - /** - * 是否为压缩包部署 - * - * @return 是则返回true - */ - @Override - public boolean isPackDeploy() { - return false; - } - @Override - public String getDesignerVersion() throws Exception { - HashMap para = new HashMap(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_designer_version"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - HttpClient client = createHttpMethod(para, true); - try { - return stream2String(execute4InputStream(client)); - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); - } - return null; - } - public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); } @@ -2016,7 +733,7 @@ public class RemoteEnv extends AbstractEnv { public ArrayList getAllRole4Privilege(boolean isFS) { ArrayList allRoleList = new ArrayList(); try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "get_all_role"); para.put("isFS", String.valueOf(isFS)); @@ -2034,20 +751,10 @@ public class RemoteEnv extends AbstractEnv { return allRoleList; } - @Override - public String getLicName() { - return License.FILE_NAME; - } - - @Override - public void setLicName(String licName) { - //do nth - } - - /** * 获取当前env的build文件路径 */ + @Override public String getBuildFilePath() { return StringUtils.isEmpty(buildFilePath) ? ResourceConstants.BUILD_PATH : buildFilePath; } @@ -2055,6 +762,7 @@ public class RemoteEnv extends AbstractEnv { /** * 设置当前env的build文件路径 */ + @Override public void setBuildFilePath(String buildFilePath) { this.buildFilePath = buildFilePath; } @@ -2065,8 +773,9 @@ public class RemoteEnv extends AbstractEnv { * @param sourceText 源代码 * @return 编译信息,有可能是成功信息,也有可能是出错或者警告信息 */ + @Override public JavaCompileInfo compilerSourceCode(String sourceText) throws Exception { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_compile_source_code"); InputStream in = postBytes2ServerB(sourceText.getBytes(EncodeConstants.ENCODING_UTF_8), para); @@ -2085,70 +794,69 @@ public class RemoteEnv extends AbstractEnv { @Override public String pluginServiceAction(String serviceID, String req) throws Exception { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_plugin_service_data"); para.put("serviceID", serviceID); para.put("req", req); - HttpClient client = createHttpMethod(para); //jim :加上user,远程设计点击预览时传递用户角色信息 + //jim :加上user,远程设计点击预览时传递用户角色信息 + HttpClient client = createHttpMethod(para); InputStream inputStream = execute4InputStream(client); return IOUtils.inputStream2String(inputStream); } /** * 远程不启动,使用虚拟服务 + *

* - * @param serviceID + * @param serviceID serviceID */ @Override public void pluginServiceStart(String serviceID) { } @Override - public File[] loadREUFile() throws Exception { - File target = new File(CacheManager.getProviderInstance().getCacheDirectory(), - ShareConstants.DIR_SHARE_CACHE); - StableUtils.deleteFile(target); - StableUtils.mkdirs(target); - File cacheDir = null; - File zip = null; - OutputStream out = null; + public String[] loadREUFile() { + ResourceIOUtils.delete(StableUtils.pathJoin( + CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), + ShareConstants.DIR_SHARE_CACHE)); + + String zipFilePath = null; try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); para.put("current_uid", this.createUserID()); para.put("currentUsername", this.getUser()); HttpClient client = createHttpMethod(para); - InputStream input = client.getResponseStream();//拿到服务端传过来的整个共享文件夹的压缩文件的文件流 - zip = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), "share.zip"); - cacheDir = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), ShareConstants.DIR_SHARE_CACHE); - StableUtils.deleteFile(cacheDir); - StableUtils.mkdirs(cacheDir); - StableUtils.makesureFileExist(zip); - out = new FileOutputStream(zip); - IOUtils.copyBinaryTo(input, out);//放到本地缓存目录下 - - IOUtils.unzip(zip, cacheDir.getAbsolutePath(), EncodeConstants.ENCODING_GBK);//先解压到临时目录 - if (cacheDir.exists() && cacheDir.isDirectory()) { - return cacheDir.listFiles(new FilenameFilter() { - public boolean accept(File file, String s) { - return s.endsWith("reu"); - } - }); - } + //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 + InputStream input = client.getResponseStream(); + + zipFilePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), "share.zip"); + String cacheDir = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE); + + ResourceIOUtils.write(zipFilePath, input); + ResourceIOUtils.unzip(zipFilePath, cacheDir, EncodeConstants.ENCODING_GBK); + + + return ResourceIOUtils.listWithFullPath(cacheDir, new Filter() { + @Override + public boolean accept(String s) { + return s.endsWith(ProjectConstants.REU); + } + }); } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } finally { - if (out != null) { - out.flush(); - out.close(); + + if (zipFilePath != null) { + ResourceIOUtils.delete(zipFilePath); } - StableUtils.deleteFile(zip); } - return new File[0]; + + return new String[0]; } @Override @@ -2161,7 +869,7 @@ public class RemoteEnv extends AbstractEnv { String shareXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_MODULE); String helpXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_HELP); try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); para.put("current_uid", this.createUserID()); @@ -2188,7 +896,7 @@ public class RemoteEnv extends AbstractEnv { return true; } try { - HashMap para = new HashMap(); + HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); para.put("current_uid", this.createUserID()); @@ -2205,50 +913,25 @@ public class RemoteEnv extends AbstractEnv { @Override public String getSharePath() { - return StringUtils.EMPTY; - } - - public void doWhenServerShutDown() { - - } - - @Override - public boolean isLocalEnv() { - - return false; - } - - @Override - public boolean hasPluginServiceStarted(String key) { - - return true; - } - - @Override - public JSONArray getPluginStatus() { - try { - HashMap para = new HashMap(); - para.put("op", "plugin"); - para.put("cmd", "get_status"); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_share_path"); para.put("current_uid", this.createUserID()); para.put("currentUsername", this.getUser()); HttpClient client = createHttpMethod(para); InputStream input = execute4InputStream(client); - return new JSONArray(stream2String(input)); + return stream2String(input); } catch (Exception e) { - return JSONArray.create(); + return StringUtils.EMPTY; } } - public String post(HashMap para, boolean isSignIn) { - try { - HttpClient client = createHttpMethod(para, isSignIn); - return stream2String(execute4InputStream(client)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - return StringUtils.EMPTY; - } + + @Override + public boolean hasPluginServiceStarted(String key) { + + return true; } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/env/RemoteEnvPane.java b/designer-base/src/com/fr/env/RemoteEnvPane.java index 12fb4d2b4..77ae0b451 100644 --- a/designer-base/src/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/com/fr/env/RemoteEnvPane.java @@ -465,11 +465,8 @@ public class RemoteEnvPane extends BasicBeanPane { } private boolean testConnection() { - RemoteEnv env = new RemoteEnv(); String url = remoteEnvURL.getURL(); - env.setPath(url); - env.setUser(usernameInput.getText()); - env.setPassword(new String(passwordInput.getPassword())); + RemoteEnv env = new RemoteEnv(url, usernameInput.getText(), new String(passwordInput.getPassword())); boolean connect = false; try { if (StringUtils.isNotEmpty(url)) { diff --git a/designer-base/src/com/fr/env/SignIn.java b/designer-base/src/com/fr/env/SignIn.java index 8cb021a82..f876302ba 100644 --- a/designer-base/src/com/fr/env/SignIn.java +++ b/designer-base/src/com/fr/env/SignIn.java @@ -1,43 +1,61 @@ package com.fr.env; -import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.base.env.EnvContext; +import com.fr.base.env.resource.EnvConfigUtils; +import com.fr.base.env.resource.RemoteEnvConfig; +import com.fr.core.env.EnvConfig; +import com.fr.core.env.EnvEvents; +import com.fr.dav.LocalEnv; 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.env.EnvContext; +import com.fr.general.Inter; + +import javax.swing.JOptionPane; +import javax.swing.UIManager; public class SignIn { - public static Env lastSelectedEnv;// 记录最后登录的Env + + static { + EventDispatcher.listen(EnvEvents.CONNECTION_ERROR, new Listener() { + @Override + public void on(Event event, Null param) { + if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Connect2Server_Again"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) + == JOptionPane.OK_OPTION) { + try { + EnvContext.signIn(EnvContext.currentEnv()); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } + } + }); + } /** * 注册入环境 * @param selectedEnv 选择的环境 * @throws Exception 异常 */ - public static void signIn(Env selectedEnv) throws Exception { - boolean validServer; - signOutOldEnv(selectedEnv); - selectedEnv.signIn(); - validServer = true; - if (validServer) { - DesignUtils.switchToEnv(selectedEnv); - lastSelectedEnv = selectedEnv; + public static void signIn(EnvConfig selectedEnv) throws Exception { + if (EnvContext.currentEnv() != null && !ComparatorUtils.equals(EnvContext.currentEnv(), selectedEnv)) { + EnvContext.signOut(); } + EnvContext.signIn(selectedEnv); + DesignUtils.switchToEnv(trans(selectedEnv)); } - private static void signOutOldEnv(Env newEnv) { - // 环境相同直接返回,避免浪费过多时间 - if (lastSelectedEnv == null || ComparatorUtils.equals(lastSelectedEnv, newEnv)) { - return; - } - try { - EnvContext.fireBeforeSignOut(); - lastSelectedEnv.signOut(); - EnvContext.fireAfterSignOut(); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + private static com.fr.base.Env trans(EnvConfig env) { + if (env instanceof RemoteEnvConfig) { + return new RemoteEnv(env.getPath(), EnvConfigUtils.getUsername(env), EnvConfigUtils.getPassword(env)); + } else { + return new LocalEnv(); } } -} +} \ No newline at end of file diff --git a/designer-base/src/com/fr/start/server/FRTomcat.java b/designer-base/src/com/fr/start/server/FRTomcat.java index 46c529697..b7519b98a 100644 --- a/designer-base/src/com/fr/start/server/FRTomcat.java +++ b/designer-base/src/com/fr/start/server/FRTomcat.java @@ -20,9 +20,9 @@ public class FRTomcat extends Tomcat{ public Context addWebapp(String contextPath, String docBase) throws ServletException { - silence(host, contextPath); + silence(getHost(), contextPath); - Context ctx = createContext(host, contextPath); + Context ctx = createContext(getHost(), contextPath); if (ctx instanceof StandardContext) { ((StandardContext)ctx).setDelegate(true); } @@ -37,10 +37,10 @@ public class FRTomcat extends Tomcat{ ctxCfg.setDefaultWebXml(noDefaultWebXmlPath()); - if (host == null) { + if (getHost() == null) { getHost().addChild(ctx); } else { - host.addChild(ctx); + getHost().addChild(ctx); } return ctx; diff --git a/designer-realize/src/com/fr/start/Designer4Debug.java b/designer-realize/src/com/fr/start/Designer4Debug.java index 0786fee6f..6448b70bc 100644 --- a/designer-realize/src/com/fr/start/Designer4Debug.java +++ b/designer-realize/src/com/fr/start/Designer4Debug.java @@ -5,7 +5,7 @@ package com.fr.start; */ public class Designer4Debug { - public static void main(String... args) { - org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); - } +// public static void main(String... args) { +// org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); +// } } From 39a1bcb6a245735b22ab2c05f55728ecea43a297 Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 25 May 2018 15:32:50 +0800 Subject: [PATCH 03/29] merge --- .../loghandler/socketio/DesignerSocketIO.java | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java 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 new file mode 100644 index 000000000..2444ae3d1 --- /dev/null +++ b/designer-base/src/com/fr/design/mainframe/loghandler/socketio/DesignerSocketIO.java @@ -0,0 +1,90 @@ +package com.fr.design.mainframe.loghandler.socketio; + +import com.fr.base.env.EnvContext; +import com.fr.base.env.resource.LocalEnvConfig; +import com.fr.core.env.EnvConfig; +import com.fr.core.env.EnvConstants; +import com.fr.core.env.EnvEvents; +import com.fr.decision.webservice.utils.DecisionServiceConstants; +import com.fr.design.mainframe.loghandler.DesignerLogHandler; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.event.Null; +import com.fr.general.LogRecordTime; +import com.fr.general.LogUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.third.guava.base.Optional; +import com.fr.web.WebSocketConfig; +import io.socket.client.IO; +import io.socket.client.Socket; +import io.socket.emitter.Emitter; + +import java.io.ByteArrayInputStream; +import java.net.URI; +import java.net.URL; + +public class DesignerSocketIO { + + private static Optional socketIO = Optional.absent(); + + private static final Emitter.Listener printLog = new Emitter.Listener() { + @Override + public void call(Object... objects) { + //TODO 这里要测试一下类型 + String object = (String) objects[0]; + try { + LogRecordTime[] logRecordTimes = LogUtils.readXMLLogRecords(new ByteArrayInputStream(object.getBytes())); + for (LogRecordTime logRecordTime : logRecordTimes) { + DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + }; + + static { + EventDispatcher.listen(EnvEvents.AFTER_SIGN_OUT, new Listener() { + @Override + public void on(Event event, Null param) { + if (socketIO.isPresent()) { + socketIO.get().close(); + socketIO = Optional.absent(); + } + } + }); + EventDispatcher.listen(EnvEvents.AFTER_SIGN_IN, new Listener() { + @Override + public void on(Event event, Null param) { + updateSocket(); + } + }); + } + + public static void init() { + updateSocket(); + } + + private static void updateSocket() { + EnvConfig env = EnvContext.currentEnv(); + if (env instanceof LocalEnvConfig) { + return; + } + + try { + String uri = String.format("http://%s:%s/%s?%s=%s", + new URL(env.getPath()).getHost(), + WebSocketConfig.getInstance().getPort(), + EnvConstants.WS_NAMESPACE, + DecisionServiceConstants.WEB_SOCKET_TOKEN_NAME, + EnvContext.currentToken()); + + socketIO = Optional.of(IO.socket(new URI(uri))); + socketIO.get().on(EnvConstants.WS_LOGRECORD, printLog); + socketIO.get().connect(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } +} \ No newline at end of file From d6258df530d13ffe36dbd04efa64b0b76f184fcf Mon Sep 17 00:00:00 2001 From: hzzz Date: Fri, 25 May 2018 17:01:09 +0800 Subject: [PATCH 04/29] start designer socket client --- .../src/com/fr/start/module/DesignerModuleActivator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/designer-realize/src/com/fr/start/module/DesignerModuleActivator.java b/designer-realize/src/com/fr/start/module/DesignerModuleActivator.java index 7a8becd11..b6abbdf85 100644 --- a/designer-realize/src/com/fr/start/module/DesignerModuleActivator.java +++ b/designer-realize/src/com/fr/start/module/DesignerModuleActivator.java @@ -1,5 +1,6 @@ package com.fr.start.module; +import com.fr.design.mainframe.loghandler.socketio.DesignerSocketIO; import com.fr.design.module.DesignerModule; import com.fr.general.ModuleContext; import com.fr.locale.InterMutableKey; @@ -20,6 +21,8 @@ public class DesignerModuleActivator extends Activator implements Prepare { ModuleContext.registerModuleListener(getModule().upFindSingleton(ModuleListener.class)); ModuleContext.startModule(DesignerModule.class.getName()); ModuleContext.clearModuleListener(); + + DesignerSocketIO.init(); } @Override From 757a2d615b69ef24fe1c3b6897513e028ad75464 Mon Sep 17 00:00:00 2001 From: plough Date: Mon, 28 May 2018 14:19:58 +0800 Subject: [PATCH 05/29] =?UTF-8?q?REPORT-8383=20=E6=B0=B4=E5=8D=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8D=A2=E8=A1=8C=E4=B8=8E=E5=8A=9F=E8=83=BD=E7=82=B9?= =?UTF-8?q?=E5=85=A5=E5=BA=93=20=3D>=20=E5=8A=9F=E8=83=BD=E7=82=B9?= =?UTF-8?q?=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../widget/accessibles/AccessibleBodyWatermarkEditor.java | 8 ++++++++ .../fr/design/actions/report/ReportWatermarkAction.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java b/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java index 863dd1b95..a3cd042fa 100644 --- a/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java +++ b/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java @@ -7,6 +7,9 @@ import com.fr.design.mainframe.widget.editors.ITextComponent; import com.fr.design.mainframe.widget.renderer.WatermarkRenderer; import com.fr.design.mainframe.widget.wrappers.WatermarkWrapper; import com.fr.design.report.WatermarkPane; +import com.fr.plugin.ExtraClassManager; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; import javax.swing.SwingUtilities; import java.awt.Dimension; @@ -40,6 +43,11 @@ public class AccessibleBodyWatermarkEditor extends UneditableAccessibleEditor { public void doOk() { setValue(watermarkPane.update()); fireStateChanged(); + // 功能点 + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.WATERMARK); + } } }); watermarkPane.populate((WatermarkAttr) getValue()); diff --git a/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java b/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java index ebe0b4ed1..d74d1698a 100644 --- a/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java +++ b/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java @@ -9,7 +9,10 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.design.report.WatermarkPane; import com.fr.main.impl.WorkBook; +import com.fr.plugin.ExtraClassManager; import com.fr.report.core.ReportUtils; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; import java.awt.event.ActionEvent; @@ -42,6 +45,11 @@ public class ReportWatermarkAction extends JWorkBookAction { public void doOk() { wbTpl.addAttrMark(watermarkPane.update()); jwb.fireTargetModified(); + // 功能点 + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.WATERMARK); + } } }).setVisible(true); } From 6779e3e6c009edc99668d7269cd7c20e8d73d4ca Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Thu, 24 May 2018 15:30:33 +0800 Subject: [PATCH 06/29] =?UTF-8?q?REPORT-6700=20=E5=88=97=E8=A1=A8=E8=BF=87?= =?UTF-8?q?=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/com/fr/env/RemoteEnv.java | 84 +++++++++-------- .../src/com/fr/env/RemoteEnvUtils.java | 93 ++++++++++++------- 2 files changed, 108 insertions(+), 69 deletions(-) diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index c1533aca5..6cb5361b9 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -1,6 +1,13 @@ package com.fr.env; -import com.fr.base.*; +import com.fr.base.AbstractEnv; +import com.fr.base.EnvException; +import com.fr.base.FRContext; +import com.fr.base.ModifiedTable; +import com.fr.base.Parameter; +import com.fr.base.StoreProcedureParameter; +import com.fr.base.TableData; +import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreUtils; @@ -22,7 +29,11 @@ import com.fr.file.CacheManager; import com.fr.file.ConnectionConfig; import com.fr.file.TableDataConfig; import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.general.Inter; +import com.fr.general.LogRecordTime; +import com.fr.general.LogUtils; import com.fr.general.http.HttpClient; import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; @@ -32,7 +43,14 @@ import com.fr.license.function.VT4FR; import com.fr.regist.License; import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; -import com.fr.stable.*; +import com.fr.stable.ArrayUtils; +import com.fr.stable.EncodeConstants; +import com.fr.stable.Filter; +import com.fr.stable.JavaCompileInfo; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLPrintWriter; @@ -40,19 +58,38 @@ import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLableReader; import com.fr.web.ResourceConstants; -import javax.swing.*; -import javax.xml.transform.*; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.awt.*; -import java.io.*; +import java.awt.Component; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.NoRouteToHostException; import java.net.Socket; import java.net.URLEncoder; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Timer; +import java.util.TimerTask; import java.util.logging.Level; import java.util.regex.Pattern; @@ -1141,36 +1178,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { - FileNode[] fileNodes; - - HashMap para = new HashMap<>(); - para.put("op", "fs_remote_design"); - para.put("cmd", "design_list_file"); - para.put("file_path", rootFilePath); - para.put("currentUserName", this.getUser()); - para.put("currentUserId", this.createUserID()); - para.put("isWebReport", isWebReport ? "true" : "false"); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return new FileNode[0]; - } - - // 远程环境下左侧目录树暂不需要打开xlsx,xls文件 - fileNodes = DavXMLUtils.readXMLFileNodes(input); - ArrayList al = new ArrayList<>(); - for (int i = 0; i < fileNodes.length; i++) { - al.add(fileNodes[i]); - } - - FileNode[] fileNodes2 = new FileNode[al.size()]; - for (int i = 0; i < al.size(); i++) { - fileNodes2[i] = al.get(i); - } - - return fileNodes2; + return RemoteEnvUtils.listFile(rootFilePath, isWebReport, this); } diff --git a/designer-base/src/com/fr/env/RemoteEnvUtils.java b/designer-base/src/com/fr/env/RemoteEnvUtils.java index d22150bd8..19e559fd6 100644 --- a/designer-base/src/com/fr/env/RemoteEnvUtils.java +++ b/designer-base/src/com/fr/env/RemoteEnvUtils.java @@ -1,6 +1,8 @@ package com.fr.env; import com.fr.base.FRContext; +import com.fr.dav.DavXMLUtils; +import com.fr.file.filetree.FileNode; import com.fr.general.IOUtils; import com.fr.report.DesignAuthority; import com.fr.stable.EncodeConstants; @@ -26,30 +28,26 @@ public class RemoteEnvUtils { public static boolean updateAuthorities(DesignAuthority[] authorities, RemoteEnv env) { String path = env.getPath(); + // 远程设计临时用户id String userID = env.getUserID(); - String res = null; - CloseableHttpClient httpClient = HttpClients.createDefault(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - AuthorityXMLUtils.writeDesignAuthoritiesXML(authorities, outputStream); - - InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(outputStream.toByteArray()), ContentType.TEXT_XML); - HttpUriRequest request = RequestBuilder.post(path) - .addParameter("id", userID) - .addParameter("op", "remote_design_authority") - .addParameter("cmd", "update_authorities") - .setEntity(reqEntity) - .build(); - - try { - CloseableHttpResponse response = httpClient.execute(request); - HttpEntity entity = response.getEntity(); - res = IOUtils.inputStream2String(entity.getContent(), EncodeConstants.ENCODING_UTF_8); - EntityUtils.consume(entity); + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpUriRequest request = RequestBuilder.post(path) + .addParameter("id", userID) + .addParameter("op", "remote_design_authority") + .addParameter("cmd", "update_authorities") + .setEntity(reqEntity) + .build(); + try (CloseableHttpResponse response = httpClient.execute(request)) { + HttpEntity entity = response.getEntity(); + res = IOUtils.inputStream2String(entity.getContent(), EncodeConstants.ENCODING_UTF_8); + EntityUtils.consume(entity); + } } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } @@ -60,27 +58,60 @@ public class RemoteEnvUtils { public static DesignAuthority[] getAuthorities(RemoteEnv env) { String path = env.getPath(); + // 远程设计临时用户id String userID = env.getUserID(); DesignAuthority[] authorities = null; - CloseableHttpClient httpClient = HttpClients.createDefault(); - HttpUriRequest request = RequestBuilder.get(path) - .addParameter("id", userID) - .addParameter("op", "remote_design_authority") - .addParameter("cmd", "get_authorities") - .build(); - - try { - CloseableHttpResponse response = httpClient.execute(request); - HttpEntity entity = response.getEntity(); - - authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(entity.getContent()); - EntityUtils.consume(entity); - } catch (Exception e) { + try (CloseableHttpClient httpClient = HttpClients.createDefault();) { + HttpUriRequest request = RequestBuilder.get(path) + .addParameter("id", userID) + .addParameter("op", "remote_design_authority") + .addParameter("cmd", "get_authorities") + .build(); + + try (CloseableHttpResponse response = httpClient.execute(request)) { + HttpEntity entity = response.getEntity(); + authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(entity.getContent()); + EntityUtils.consume(entity); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } return authorities; + } + + public static FileNode[] listFile(String pFilePath, boolean isWebReport, RemoteEnv env) { + String path = env.getPath(); + // 远程设计临时用户id + String userID = env.getUserID(); + String username = env.getUser(); + + FileNode[] fileNodes = null; + + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpUriRequest request = RequestBuilder.get(path) + .addParameter("op", "fs_remote_design") + .addParameter("cmd", "design_list_file") + .addParameter("file_path", pFilePath) + .addParameter("currentUserName", username) + .addParameter("currentUserId", userID) + .addParameter("isWebReport", Boolean.toString(isWebReport)) + .build(); + + try (CloseableHttpResponse response = httpClient.execute(request)) { + HttpEntity entity = response.getEntity(); + fileNodes = DavXMLUtils.readXMLFileNodes((entity.getContent())); + EntityUtils.consume(entity); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return fileNodes != null ? fileNodes : new FileNode[0]; } } From 5e8bbeef0aee8a8865092a91a488bc0ff0be7f6a Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Fri, 25 May 2018 12:20:31 +0800 Subject: [PATCH 07/29] =?UTF-8?q?REPORT-6700=20=E5=AE=8C=E5=96=84+?= =?UTF-8?q?=E8=BF=9C=E7=A8=8B=E8=AE=BE=E8=AE=A1=E8=BF=87=E6=B8=A1=E6=96=B9?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RemoteDesignAuthorityManagerAction.java | 7 +- .../src/com/fr/design/utils/DesignUtils.java | 105 ++-- .../fr/env/DesignAuthorityConfigurable.java | 2 +- designer-base/src/com/fr/env/RemoteEnv.java | 512 +++++++++--------- .../src/com/fr/env/RemoteEnvUtils.java | 209 +++++-- 5 files changed, 471 insertions(+), 364 deletions(-) diff --git a/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java b/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java index 39d5921d6..da2122cb4 100644 --- a/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java +++ b/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java @@ -48,11 +48,8 @@ public class RemoteDesignAuthorityManagerAction extends UpdateAction { public void doOk() { DesignAuthority[] authorities = managerPane.update(); if (!FRContext.getCurrentEnv().isLocalEnv()) { - try { - ((RemoteEnv) FRContext.getCurrentEnv()).updateAuthorities(authorities); - } catch (Exception exception) { - FRContext.getLogger().error(exception.getMessage()); - } + boolean success = ((RemoteEnv) FRContext.getCurrentEnv()).updateAuthorities(authorities); + FRContext.getLogger().info("update remote design authority: " + success); } } diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 469e7fd1a..25be2df48 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -1,11 +1,11 @@ package com.fr.design.utils; import com.fr.base.BaseUtils; -import com.fr.base.ServerConfig; import com.fr.base.Env; import com.fr.base.EnvException; import com.fr.base.FRContext; import com.fr.base.FeedBackInfo; +import com.fr.base.ServerConfig; import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; import com.fr.dav.DavXMLUtils; @@ -23,6 +23,7 @@ import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.general.http.HttpClient; +import com.fr.security.JwtUtils; import com.fr.stable.ArrayUtils; import com.fr.stable.CodeUtils; import com.fr.stable.EncodeConstants; @@ -30,8 +31,11 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.StartServer; -import javax.swing.*; -import java.awt.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import java.awt.Desktop; +import java.awt.Font; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; @@ -74,7 +78,8 @@ public class DesignUtils { /** * 通过端口是否被占用判断设计器有没有启动 - * s + * s + * * @return 启动了返回true */ public static boolean isStarted() { @@ -120,11 +125,12 @@ public class DesignUtils { } /** - *建立监听端口 - * @param startPort 端口 - * @param suffixs 文件后缀 + * 建立监听端口 + * + * @param startPort 端口 + * @param suffixs 文件后缀 */ - public static void creatListeningServer(final int startPort,final String[] suffixs) { + public static void creatListeningServer(final int startPort, final String[] suffixs) { Thread serverSocketThread = new Thread() { public void run() { ServerSocket serverSocket = null; @@ -146,7 +152,7 @@ public class DesignUtils { String path = f.getAbsolutePath(); boolean isMatch = false; - for(int i= 0; i para) throws EnvException, UnsupportedEncodingException { - return createHttpMethod(para, false); - } - - /** - * 根据nameValuePairs,也就是参数对,生成PostMethod - */ - private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { - String methodPath = this.path; - if (!isSignIn) { - methodPath = methodPath + "?id=" + createUserID(); - } - HttpClient client = new HttpClient(methodPath, para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ - client.asGet(); - return client; - } - - /** - * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters - */ - private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { - String methodPath = path + '?' + "id=" + createUserID(); - return new HttpClient(methodPath); - } - - - /* - * Read the response body. - * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 - * - * 这样做的目的是确保method.releaseConnection - * - * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... - */ - /** - * execute method之后,取返回的inputstream + * execute method之后,取返回的 InputStream */ - private ByteArrayInputStream execute4InputStream(HttpClient client) throws Exception { - setHttpsParas(); - try { - int statusCode = client.getResponseCode(); - if (statusCode != HttpURLConnection.HTTP_OK) { - //数据加载太多,屏蔽掉 - //doWithTimeOutException(); - throw new EnvException("Method failed: " + statusCode); - } - } catch (Exception e) { - FRContext.getLogger().info("Connection reset "); - } - InputStream in = client.getResponseStream(); + private InputStream filterInputStream(InputStream in) throws Exception { if (in == null) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); try { - Utils.copyBinaryTo(in, out); - + IOUtils.copyBinaryTo(in, out); // 看一下传过来的byte[]是不是DesignProcessor.INVALID,如果是的话,就抛Exception byte[] bytes = out.toByteArray(); // carl:格式一致传中文 @@ -298,7 +244,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl synchronized (this) { in.close(); out.close(); - client.release(); } } } @@ -322,10 +267,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception 异常 */ private boolean postBytes2Server(byte[] bytes, HashMap para) throws Exception { - HttpClient client = createHttpMethod2(para); - client.setContent(bytes); - execute4InputStream(client); - + filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); return true; } @@ -339,27 +281,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl if (in == null) { return null; } - BufferedReader br; + String result = null; try { - br = new BufferedReader(new InputStreamReader(in, EncodeConstants.ENCODING_UTF_8)); + result = CommonIOUtils.inputStream2String(in, EncodeConstants.ENCODING_UTF_8); } catch (UnsupportedEncodingException e) { - br = new BufferedReader(new InputStreamReader(in)); - } - StringBuilder sb = new StringBuilder(); - String line; - - try { - while ((line = br.readLine()) != null) { - if (sb.length() > 0) { - sb.append('\n'); - } - sb.append(line); - } - } catch (IOException e) { FRContext.getLogger().error(e.getMessage(), e); } - - return sb.toString(); + return result; } /** @@ -396,28 +324,25 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { - extraChangeEnvPara(); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "test_server_connection"); - para.put("user", user); - para.put("password", getEncodedPassword()); + refreshHttpSProperty(); + changeEnvPathFromExtra(); if (path.startsWith("https") && (!DesignerEnvManager.getEnvManager().isHttps())) { return false; } - HttpClient client = createHttpMethod(para, true); + InputStream inputStream = RemoteEnvUtils.testConnection(true, this); + inputStream = filterInputStream(inputStream); + String res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); - String res = stream2String(execute4InputStream(client)); - if (res == null) { + if (StringUtils.isEmpty(res)) { if (needMessage) { JOptionPane.showMessageDialog( parentComponent, Inter.getLocText("Datasource-Connection_failed"), UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE); + JOptionPane.ERROR_MESSAGE + ); } return false; } else if (ComparatorUtils.equals(res, "true")) { @@ -429,7 +354,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } else if (ComparatorUtils.equals(res, "invalid username or password.")) { JOptionPane.showMessageDialog( parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}), + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, + new String[]{",", "", "", "!"} + ), Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); return false; @@ -437,23 +365,40 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl if (needMessage) { JOptionPane.showMessageDialog( parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"}), + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, + new String[]{",", "!"} + ), UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), JOptionPane.ERROR_MESSAGE ); } else { - FRContext.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + FRContext.getLogger().info( + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, + new String[]{",", "!"} + ) + ); } return false; } else if (ComparatorUtils.equals(res, "war not support remote design.")) { if (needMessage) { JOptionPane.showMessageDialog( parentComponent, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"}), + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "NS-war-remote"}, + new String[]{",", "!"} + ), UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE); + JOptionPane.ERROR_MESSAGE + ); } else { - FRContext.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + FRContext.getLogger().info( + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "NS-war-remote"}, + new String[]{",", "!"} + ) + ); } return false; } else { @@ -461,15 +406,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - private void extraChangeEnvPara() { + private void changeEnvPathFromExtra() { //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. - DesignerEnvProcessor envProcessor = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); - if (envProcessor != null) { - this.path = envProcessor.changeEnvPathBeforeConnect(user, password, path); + DesignerEnvProcessor processor + = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); + if (processor != null) { + this.path = processor.changeEnvPathBeforeConnect(user, password, path); } } - private void setHttpsParas() { + private void refreshHttpSProperty() { if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); @@ -491,25 +437,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception e */ public void heartBeatConnection() throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "heart_beat"); - para.put("user", user); - - HttpClient client = createHttpMethod(para); - execute4InputStream(client); - - //这做法不好, 30秒刷一次, 刷新的时候会重新构建树, 构建完会把子节点都收缩起来, 效果太差. - //为什么不保存刷新前树的伸缩状态, 因为刷新后的树和刷新前的树的结构未必是一致的. - - //服务器通知客户端更新左上角文件树面板 -// try { -// if (ComparatorUtils.equals(stream2String(execute4InputStream(method)), "true")) { -// DesignerFrameFileDealerPane.getInstance().refresh(); -// } -// } catch (Exception e) { -// FRContext.getLogger().error(e.getMessage()); -// } + // 刷新参数 + refreshHttpSProperty(); + // 获取结果 + InputStream inputStream = RemoteEnvUtils.headBeatConnection(this); + // 处理结果 + filterInputStream(inputStream); } /** @@ -542,7 +475,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("user", user); para.put("password", getEncodedPassword()); - simulaRPC(para, true); + simulateRPC(para, true); //neil:调用Clock方法,10秒向服务器发送一个字节,确保没掉线 if (clock == null) { @@ -618,31 +551,27 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "r_sign_out"); para.put("id", userID); - return simulaRPC(para, false - ); + return simulateRPC(para, false); } - protected boolean simulaRPC(HashMap para, boolean isSignIn) throws Exception { - HttpClient client = createHttpMethod(para, isSignIn); - + protected boolean simulateRPC(HashMap para, boolean isSignIn) throws Exception { + refreshHttpSProperty(); // execute method取到input stream再转成String - String resJSON = null; + String result = null; try { - resJSON = stream2String(execute4InputStream(client)); + result = stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, isSignIn, this))); } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } - - if (resJSON == null) { + if (result == null) { return false; } - if (resJSON.contains("RegistEditionException")) { + if (result.contains("RegistEditionException")) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); return false; } try { - JSONObject jo = new JSONObject(resJSON); - + JSONObject jo = new JSONObject(result); if (isSignIn) { if (jo.has("id")) { userID = jo.getString("id"); @@ -664,25 +593,24 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl throw new EnvException(exception); } } catch (JSONException je) { - // 返回的resJSON不是JSON格式的,那就直接返回resJSON作为userID return true; } return true; } - protected boolean doLockOperation(String[] filePathes, String cmd) throws Exception { - if (filePathes == null || filePathes.length == 0) { + protected boolean doLockOperation(String[] filePaths, String cmd) throws Exception { + if (filePaths == null || filePaths.length == 0) { return true; } - JSONArray ja = new JSONArray(filePathes); + JSONArray ja = new JSONArray(filePaths); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", cmd); para.put("pathes", ja.toString()); - return simulaRPC(para, false); + return simulateRPC(para, false); } /** @@ -697,12 +625,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 解锁文件 * - * @param filePathes 文件路径 + * @param filePaths 文件路径 * @return 成功解锁返回true * @throws Exception e */ - public boolean releaseLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_release_lock"); + public boolean releaseLock(String[] filePaths) throws Exception { + return doLockOperation(filePaths, "design_release_lock"); } /** @@ -713,18 +641,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean isTemplateExist(String reportPath) throws Exception { + refreshHttpSProperty(); if (reportPath == null) { return false; } - HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_report_exist"); para.put("report_path", reportPath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - + InputStream input = filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, false, this)); return ComparatorUtils.equals(stream2String(input), "true"); } @@ -736,16 +662,18 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public void unlockTemplate(String tplPath) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_close_report"); para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); - FRContext.getLogger().error(info); + FRContext.getLogger().info(info); } public class Bytes2ServerOutputStream extends OutputStream { @@ -811,10 +739,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @param database 数据连接 * @return 如果能正确的连接到数据库则返回true * @throws Exception 无法正确连接到数据库则抛出此异常 - * TODO alex_ENV 个人以为,这里应该是测试所有Connection的连接,所以Connection与TableData接口的关联需要思考 */ @Override - public boolean testConnection(com.fr.data.impl.Connection database) throws Exception { + public boolean testConnection(Connection database) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); // 把database写成xml文件到out @@ -834,22 +761,39 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } @Override - public boolean updateAuthorities(DesignAuthority[] authorities) throws Exception { - return RemoteEnvUtils.updateAuthorities(authorities, this); + public boolean updateAuthorities(DesignAuthority[] authorities) { + refreshHttpSProperty(); + String res = null; + try { + InputStream inputStream = RemoteEnvUtils.updateAuthorities(authorities, this); + inputStream = filterInputStream(inputStream); + res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return StringUtils.isNotEmpty(res) && Boolean.valueOf(res); } @Override public DesignAuthority[] getAuthorities() { - - return RemoteEnvUtils.getAuthorities(this); - + refreshHttpSProperty(); + DesignAuthority[] authorities = new DesignAuthority[0]; + try { + InputStream inputStream = RemoteEnvUtils.getAuthorities(this); + inputStream = filterInputStream(inputStream); + authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(inputStream); + return authorities; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return authorities; } /** * ben:取schema */ @Override - public String[] getTableSchema(com.fr.data.impl.Connection database) throws Exception { + public String[] getTableSchema(Connection database) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); DavXMLUtils.writeXMLFileDatabaseConnection(database, out); @@ -867,7 +811,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * b:分别取Table,View,Procedure,实际应用时更有意义 */ @Override - public TableProcedure[] getTableProcedure(com.fr.data.impl.Connection database, String type, String schema) throws Exception { + public TableProcedure[] getTableProcedure(Connection database, String type, String schema) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); DavXMLUtils.writeXMLFileDatabaseConnection(database, out); HashMap para = new HashMap<>(); @@ -883,19 +827,18 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } @Override - public List getProcedures(com.fr.data.impl.Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { - HashMap schemaTableProcedureMap = new HashMap(); - List sqlTableObjs = new ArrayList(); - TableProcedure[] sqlTableObj = null; + public List getProcedures(Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { + Map schemaTableProcedureMap = new HashMap<>(); + List sqlTableList = new ArrayList<>(); + TableProcedure[] sqlTableObj; int len = schemas.length; if (len > 0) { - for (int i = 0; i < len; i++) { - String schema = schemas[i]; + for (String schema : schemas) { sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); if (sqlTableObj == null) { sqlTableObj = new TableProcedure[0]; } - sqlTableObjs.add(sqlTableObj); + sqlTableList.add(sqlTableObj); schemaTableProcedureMap.put(schema, sqlTableObj); } } else { @@ -903,11 +846,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl if (sqlTableObj == null) { sqlTableObj = new TableProcedure[0]; } - sqlTableObjs.add(sqlTableObj); + sqlTableList.add(sqlTableObj); schemaTableProcedureMap.put(null, sqlTableObj); } DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); - return sqlTableObjs; + return sqlTableList; } /** @@ -919,13 +862,15 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean createFolder(String folderPath) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_create_folder"); para.put("folder_path", folderPath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -943,13 +888,15 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean createFile(String filePath) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_create_file"); para.put("file_path", filePath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -960,14 +907,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public boolean renameFile(String newPath, String oldPath) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_rename_file"); para.put("newPath", newPath); para.put("oldPath", oldPath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -985,6 +934,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean fileExists(String filePath) throws Exception { + refreshHttpSProperty(); if (filePath == null) { return false; } @@ -994,8 +944,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_file_exists"); para.put("file_path", filePath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -1013,6 +964,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean fileLocked(String filePath) throws Exception { + refreshHttpSProperty(); if (filePath == null) { return false; } @@ -1022,8 +974,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_file_locked"); para.put("file_path", filePath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -1065,6 +1018,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean deleteFile(String filePath) { + refreshHttpSProperty(); if (filePath == null) { return false; } @@ -1074,8 +1028,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "delete_file"); para.put("file_path", filePath); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -1097,6 +1052,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception e */ public boolean writePrivilegeMap(String key, String value) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); @@ -1106,8 +1062,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("value", value); //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -1121,6 +1078,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public void removeNoPrivilegeConnection() { + refreshHttpSProperty(); TableDataConfig dm = TableDataConfig.getInstance(); try { @@ -1130,8 +1088,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("currentUsername", this.getUser()); para.put("currentPwd", this.getPassword()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); ArrayList toBeRemoveTDName = new ArrayList<>(); for (int i = 0; i < ja.length(); i++) { @@ -1178,7 +1137,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { - return RemoteEnvUtils.listFile(rootFilePath, isWebReport, this); + refreshHttpSProperty(); + InputStream inputStream = RemoteEnvUtils.listFile(rootFilePath, isWebReport, this); + inputStream = filterInputStream(inputStream); + return DavXMLUtils.readXMLFileNodes(inputStream); } @@ -1355,16 +1317,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception 异常 */ public InputStream postBytes2ServerB(byte[] bytes, HashMap para) throws Exception { - HttpClient client = createHttpMethod2(para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ -// client.asGet(); - client.setContent(bytes); - return execute4InputStream(client); + refreshHttpSProperty(); + return filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); } /** @@ -1533,28 +1487,29 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String[] readPathSvgFiles(String path) { + refreshHttpSProperty(); String cataloguePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path); - ArrayList fileArray = new ArrayList<>(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); for (int i = 0; i < ja.length(); i++) { JSONObject jsonObject = (JSONObject) ja.get(i); String svgFileName = (String) jsonObject.get("svgfileName"); - String svgfileContent = (String) jsonObject.get("svgfileContent"); + String svgFileContent = (String) jsonObject.get("svgfileContent"); String file = StableUtils.pathJoin(cataloguePath, svgFileName); - InputStream in = new ByteArrayInputStream(svgfileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); + InputStream in = new ByteArrayInputStream(svgFileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); ResourceIOUtils.write(file, in); fileArray.add(file); } @@ -1562,7 +1517,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl FRContext.getLogger().error(e.getMessage()); } - return fileArray.toArray(new String[fileArray.size()]); + return fileArray.toArray(new String[0]); } @@ -1581,7 +1536,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); // 通过ByteArrayOutputStream将svg写成字节流 @@ -1604,9 +1559,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } try { - HttpClient client = createHttpMethod2(out.getNameValuePairs()); - client.setContent(out.getOut().toByteArray()); - String res = stream2String(execute4InputStream(client)); + String res = stream2String(filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(out.getOut().toByteArray(), out.nameValuePairs, false, this) + )); if (StringUtils.isNotEmpty(res)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Already_exist") + res); return false; @@ -1635,7 +1590,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); para.put("class_name", mgr.getClass().getName()); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); // alex:通过ByteArrayOutputStream将mgr写成字节流 @@ -1643,9 +1598,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl XMLTools.writeOutputStreamXML(mgr, out); try { - HttpClient client = createHttpMethod2(out.getNameValuePairs()); - client.setContent(out.getOut().toByteArray()); - String res = stream2String(execute4InputStream(client)); + String res = stream2String( + filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(out.getOut().toByteArray(), out.nameValuePairs, false, this) + ) + ); if (StringUtils.isNotEmpty(res)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Already_exist") + res); return false; @@ -1668,16 +1625,14 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public InputStream readBean(String beanPath, String prefix) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_open"); para.put(RemoteDeziConstants.PREFXI, prefix); para.put("resource", beanPath); - HttpClient client = createHttpMethod(para); - // return Utils.toZipIn(execute4InputStream(method)); - //Utils.toZipIn这边有bug,远程连接的时候datasource.xml不能读取,先还原了 - return execute4InputStream(client); + return filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, false, this)); } /** @@ -1707,6 +1662,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_columns"); @@ -1714,18 +1670,19 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("schema", schema); para.put("tableName", tableName); - HttpClient client = createHttpMethod2(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return null; } - String colums = stream2String(input); - if (StringUtils.isEmpty(colums)) { + String columns = stream2String(input); + if (StringUtils.isEmpty(columns)) { return null; } - return colums.split("\\."); + return columns.split("\\."); } /** @@ -1774,14 +1731,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public ModifiedTable getDataSourceModifiedTables(String type) { + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "get_datasource_modified_tables"); para.put("type", type); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return new ModifiedTable(); } @@ -1826,14 +1785,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return false; } - public String[] getProcedureColumns(StoreProcedure storeProcedure, java.util.Map parameterMap) throws Exception { + public String[] getProcedureColumns(StoreProcedure storeProcedure, Map parameterMap) throws Exception { + refreshHttpSProperty(); String[] columns; HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "list_sp"); - HttpClient client = createHttpMethod(para); try { - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return ArrayUtils.EMPTY_STRING_ARRAY; @@ -1849,14 +1810,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } public String[] getProcedureColumns(String name) throws Exception { + refreshHttpSProperty(); String[] columns; HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "list_sp_columns_name"); para.put("name", name); - HttpClient client = createHttpMethod(para); try { - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return ArrayUtils.EMPTY_STRING_ARRAY; } @@ -1872,7 +1835,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl /** * 输出日志信息 * - * @throws Exception + * @throws Exception e */ @Override public void printLogMessage() throws Exception { @@ -1886,9 +1849,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return; } LogRecordTime[] records = LogUtils.readXMLLogRecords(input); - for (LogRecordTime logRecordTime : records) { - //TODO - } } @Override @@ -1957,7 +1917,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * * @param database 数据连接 * @return 是返回true - * @throws Exception + * @throws Exception e */ @Override public boolean isOracle(Connection database) throws Exception { @@ -1996,16 +1956,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean hasFileFolderAllow(String path) { - HttpClient client = null; + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put(RemoteDeziConstants.TEMPLATE_PATH, path); - client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -2039,16 +2000,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } @Override - public String getDesignerVersion() throws Exception { + public String getDesignerVersion() { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_designer_version"); para.put("user", user); para.put("password", getEncodedPassword()); - HttpClient client = createHttpMethod(para, true); try { - return stream2String(execute4InputStream(client)); + return stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, true, this))); } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } @@ -2063,15 +2024,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public ArrayList getAllRole4Privilege(boolean isFS) { - ArrayList allRoleList = new ArrayList(); + refreshHttpSProperty(); + ArrayList allRoleList = new ArrayList<>(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "get_all_role"); para.put("isFS", String.valueOf(isFS)); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); for (int i = 0; i < ja.length(); i++) { String roleName = (String) ((JSONObject) ja.get(i)).get("name"); @@ -2137,14 +2100,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String pluginServiceAction(String serviceID, String req) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_plugin_service_data"); para.put("serviceID", serviceID); para.put("req", req); //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); - InputStream inputStream = execute4InputStream(client); + InputStream inputStream = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(para, false, this) + ); return IOUtils.inputStream2String(inputStream); } @@ -2160,6 +2125,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String[] loadREUFile() { + refreshHttpSProperty(); ResourceIOUtils.delete(StableUtils.pathJoin( CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE)); @@ -2169,12 +2135,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 - InputStream input = client.getResponseStream(); + InputStream input = RemoteEnvUtils.simulateRPCByHttpGet(para, false, this); zipFilePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), "share.zip"); String cacheDir = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE); @@ -2204,6 +2169,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public boolean installREUFile(File reuFile) { + refreshHttpSProperty(); if (reuFile == null) { return false; } @@ -2215,18 +2181,27 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", reuFile.getName()); - HttpClient client = createHttpMethod(para); - client.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(shareXMLName)))); - InputStream input = execute4InputStream(client); - client.release(); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost( + IOUtils.inputStream2Bytes( + new FileInputStream(new File(shareXMLName)) + ) + , para, + false, + this) + ); para.put("isComplete", "true"); - HttpClient client1 = createHttpMethod(para); - client1.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(helpXMLName)))); - InputStream input1 = execute4InputStream(client1); + InputStream input1 = filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost( + IOUtils.inputStream2Bytes( + new FileInputStream(new File(helpXMLName)) + ) + , para, + false, + this)); return ComparatorUtils.equals(stream2String(input), "true") && ComparatorUtils.equals(stream2String(input1), "true"); } catch (Exception e) { return false; @@ -2235,6 +2210,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public boolean removeREUFilesByName(String fileName) { + refreshHttpSProperty(); if (StringUtils.isEmpty(fileName)) { return true; } @@ -2242,12 +2218,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", fileName); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); return ComparatorUtils.equals(stream2String(input), "true"); } catch (Exception e) { return false; @@ -2256,15 +2233,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getSharePath() { + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); return stream2String(input); } catch (Exception e) { return StringUtils.EMPTY; @@ -2290,16 +2269,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public JSONArray getPluginStatus() { - + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "plugin"); para.put("cmd", "get_status"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); return new JSONArray(stream2String(input)); } catch (Exception e) { return JSONArray.create(); diff --git a/designer-base/src/com/fr/env/RemoteEnvUtils.java b/designer-base/src/com/fr/env/RemoteEnvUtils.java index 19e559fd6..7b9163d39 100644 --- a/designer-base/src/com/fr/env/RemoteEnvUtils.java +++ b/designer-base/src/com/fr/env/RemoteEnvUtils.java @@ -1,117 +1,238 @@ package com.fr.env; +import com.fr.base.EnvException; import com.fr.base.FRContext; -import com.fr.dav.DavXMLUtils; -import com.fr.file.filetree.FileNode; -import com.fr.general.IOUtils; import com.fr.report.DesignAuthority; +import com.fr.report.util.AuthorityXMLUtils; import com.fr.stable.EncodeConstants; -import com.fr.third.org.apache.http.HttpEntity; -import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.commons.io.IOUtils; +import com.fr.third.org.apache.http.HttpResponse; +import com.fr.third.org.apache.http.HttpStatus; +import com.fr.third.org.apache.http.client.ClientProtocolException; +import com.fr.third.org.apache.http.client.ResponseHandler; import com.fr.third.org.apache.http.client.methods.HttpUriRequest; import com.fr.third.org.apache.http.client.methods.RequestBuilder; import com.fr.third.org.apache.http.entity.ContentType; import com.fr.third.org.apache.http.entity.InputStreamEntity; import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; import com.fr.third.org.apache.http.impl.client.HttpClients; -import com.fr.third.org.apache.http.util.EntityUtils; -import com.fr.web.utils.AuthorityXMLUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Map; public class RemoteEnvUtils { private RemoteEnvUtils() { } - public static boolean updateAuthorities(DesignAuthority[] authorities, RemoteEnv env) { + private static ResponseHandler responseHandler = new ResponseHandler() { + @Override + public InputStream handleResponse(HttpResponse response) throws IOException { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + throw new ClientProtocolException("Method failed: " + response.getStatusLine().toString()); + } + InputStream in = response.getEntity().getContent(); + if (in == null) { + return null; + } + // 读取并返回 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + return new ByteArrayInputStream(out.toByteArray()); + } + }; + + public static InputStream simulateRPCByHttpPost(byte[] bytes, Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { + String path = env.getPath(); + RequestBuilder builder = RequestBuilder.post(path); + + InputStream inputStream = null; + + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getValidUserID()); + } + InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(bytes)); + + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder + .setEntity(reqEntity) + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + + public static InputStream simulateRPCByHttpPost(Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { + String path = env.getPath(); + RequestBuilder builder = RequestBuilder.post(path); + + InputStream inputStream = null; + + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getValidUserID()); + } + + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + + public static InputStream simulateRPCByHttpGet(Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { + String path = env.getPath(); + RequestBuilder builder = RequestBuilder.get(path); + + InputStream inputStream = null; + + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getValidUserID()); + } + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder.build(); + inputStream = httpClient.execute(request, responseHandler); + + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + + + public static InputStream headBeatConnection(RemoteEnv env) { + String path = env.getPath(); + String username = env.getUser(); + + InputStream inputStream = null; + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = RequestBuilder.get(path) + .addParameter("op", "fr_remote_design") + .addParameter("cmd", "heart_beat") + .addParameter("user", username) + .addParameter("id", env.getValidUserID()) + .build(); + + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException | EnvException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + + + public static InputStream testConnection(boolean isSignIn, RemoteEnv env) throws EnvException { + String username = env.getUser(); + String path = env.getPath(); + String password = env.getPassword(); + + InputStream inputStream = null; + + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + RequestBuilder builder = RequestBuilder.get(path); + if (!isSignIn) { + builder.addParameter("id", env.getValidUserID()); + } + HttpUriRequest request = builder + .addParameter("op", "fr_remote_design") + .addParameter("cmd", "test_server_connection") + .addParameter("user", username) + .addParameter("password", URLEncoder.encode(password, EncodeConstants.ENCODING_UTF_8)) + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + + + public static InputStream updateAuthorities(DesignAuthority[] authorities, RemoteEnv env) throws EnvException { String path = env.getPath(); // 远程设计临时用户id - String userID = env.getUserID(); - String res = null; + String userID = env.getValidUserID(); + InputStream inputStream = null; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); AuthorityXMLUtils.writeDesignAuthoritiesXML(authorities, outputStream); InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(outputStream.toByteArray()), ContentType.TEXT_XML); - try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { HttpUriRequest request = RequestBuilder.post(path) .addParameter("id", userID) .addParameter("op", "remote_design_authority") .addParameter("cmd", "update_authorities") .setEntity(reqEntity) .build(); - try (CloseableHttpResponse response = httpClient.execute(request)) { - HttpEntity entity = response.getEntity(); - res = IOUtils.inputStream2String(entity.getContent(), EncodeConstants.ENCODING_UTF_8); - EntityUtils.consume(entity); - } + inputStream = httpClient.execute(request, responseHandler); } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } - return res != null && Boolean.valueOf(res); + return inputStream; } - public static DesignAuthority[] getAuthorities(RemoteEnv env) { + public static InputStream getAuthorities(RemoteEnv env) throws EnvException { String path = env.getPath(); // 远程设计临时用户id - String userID = env.getUserID(); - DesignAuthority[] authorities = null; + String userID = env.getValidUserID(); + InputStream inputStream = null; - try (CloseableHttpClient httpClient = HttpClients.createDefault();) { + try (CloseableHttpClient httpClient = HttpClients.createSystem();) { HttpUriRequest request = RequestBuilder.get(path) .addParameter("id", userID) .addParameter("op", "remote_design_authority") .addParameter("cmd", "get_authorities") .build(); - - try (CloseableHttpResponse response = httpClient.execute(request)) { - HttpEntity entity = response.getEntity(); - authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(entity.getContent()); - EntityUtils.consume(entity); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } + inputStream = httpClient.execute(request, responseHandler); } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } - return authorities; + return inputStream; } - public static FileNode[] listFile(String pFilePath, boolean isWebReport, RemoteEnv env) { + public static InputStream listFile(String pFilePath, boolean isWebReport, RemoteEnv env) throws EnvException { String path = env.getPath(); // 远程设计临时用户id - String userID = env.getUserID(); + String userID = env.getValidUserID(); String username = env.getUser(); - FileNode[] fileNodes = null; - - try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + InputStream inputStream = null; + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { HttpUriRequest request = RequestBuilder.get(path) .addParameter("op", "fs_remote_design") .addParameter("cmd", "design_list_file") .addParameter("file_path", pFilePath) .addParameter("currentUserName", username) .addParameter("currentUserId", userID) + .addParameter("id", userID) .addParameter("isWebReport", Boolean.toString(isWebReport)) .build(); - - try (CloseableHttpResponse response = httpClient.execute(request)) { - HttpEntity entity = response.getEntity(); - fileNodes = DavXMLUtils.readXMLFileNodes((entity.getContent())); - EntityUtils.consume(entity); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } + inputStream = httpClient.execute(request, responseHandler); } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } - return fileNodes != null ? fileNodes : new FileNode[0]; + return inputStream; } } From a1fdd0b66ec6477ef8cece6d5225b1c859ae964e Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 29 May 2018 15:36:16 +0800 Subject: [PATCH 08/29] merge --- .../loghandler/socketio/DesignerSocketIO.java | 4 +- .../RemoteDesignAuthorityManagerAction.java | 7 +- .../src/com/fr/design/utils/DesignUtils.java | 105 +- .../fr/env/DesignAuthorityConfigurable.java | 2 +- designer-base/src/com/fr/env/RemoteEnv.java | 1350 ++++++++++++++++- .../src/com/fr/env/RemoteEnvUtils.java | 2 +- designer-base/src/com/fr/env/SignIn.java | 2 +- .../AccessibleBodyWatermarkEditor.java | 8 + .../actions/report/ReportWatermarkAction.java | 8 + 9 files changed, 1369 insertions(+), 119 deletions(-) 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 2444ae3d1..14be4cfb1 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 @@ -47,7 +47,7 @@ public class DesignerSocketIO { static { EventDispatcher.listen(EnvEvents.AFTER_SIGN_OUT, new Listener() { @Override - public void on(Event event, Null param) { + public void on(Event event, Null param) { if (socketIO.isPresent()) { socketIO.get().close(); socketIO = Optional.absent(); @@ -56,7 +56,7 @@ public class DesignerSocketIO { }); EventDispatcher.listen(EnvEvents.AFTER_SIGN_IN, new Listener() { @Override - public void on(Event event, Null param) { + public void on(Event event, Null param) { updateSocket(); } }); diff --git a/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java b/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java index 39d5921d6..da2122cb4 100644 --- a/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java +++ b/designer-base/src/com/fr/design/remote/action/RemoteDesignAuthorityManagerAction.java @@ -48,11 +48,8 @@ public class RemoteDesignAuthorityManagerAction extends UpdateAction { public void doOk() { DesignAuthority[] authorities = managerPane.update(); if (!FRContext.getCurrentEnv().isLocalEnv()) { - try { - ((RemoteEnv) FRContext.getCurrentEnv()).updateAuthorities(authorities); - } catch (Exception exception) { - FRContext.getLogger().error(exception.getMessage()); - } + boolean success = ((RemoteEnv) FRContext.getCurrentEnv()).updateAuthorities(authorities); + FRContext.getLogger().info("update remote design authority: " + success); } } diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 469e7fd1a..25be2df48 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -1,11 +1,11 @@ package com.fr.design.utils; import com.fr.base.BaseUtils; -import com.fr.base.ServerConfig; import com.fr.base.Env; import com.fr.base.EnvException; import com.fr.base.FRContext; import com.fr.base.FeedBackInfo; +import com.fr.base.ServerConfig; import com.fr.base.Utils; import com.fr.base.remote.RemoteDeziConstants; import com.fr.dav.DavXMLUtils; @@ -23,6 +23,7 @@ import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.general.http.HttpClient; +import com.fr.security.JwtUtils; import com.fr.stable.ArrayUtils; import com.fr.stable.CodeUtils; import com.fr.stable.EncodeConstants; @@ -30,8 +31,11 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.StartServer; -import javax.swing.*; -import java.awt.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import java.awt.Desktop; +import java.awt.Font; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; @@ -74,7 +78,8 @@ public class DesignUtils { /** * 通过端口是否被占用判断设计器有没有启动 - * s + * s + * * @return 启动了返回true */ public static boolean isStarted() { @@ -120,11 +125,12 @@ public class DesignUtils { } /** - *建立监听端口 - * @param startPort 端口 - * @param suffixs 文件后缀 + * 建立监听端口 + * + * @param startPort 端口 + * @param suffixs 文件后缀 */ - public static void creatListeningServer(final int startPort,final String[] suffixs) { + public static void creatListeningServer(final int startPort, final String[] suffixs) { Thread serverSocketThread = new Thread() { public void run() { ServerSocket serverSocket = null; @@ -146,7 +152,7 @@ public class DesignUtils { String path = f.getAbsolutePath(); boolean isMatch = false; - for(int i= 0; i threadLocal = new ThreadLocal<>(); + private boolean isReadTimeOut = false; private String buildFilePath; - private final RemoteEnvConfig env; + + public RemoteEnv() { + this.clock = new Clock(this); + } public RemoteEnv(String path, String userName, String password) { - env = new RemoteEnvConfig(path, userName, password); + this(); + this.path = path; + this.user = userName; + this.password = password; } /** @@ -85,7 +105,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String getPath() { - return env.getPath(); + return this.path; + } + + public void setPath(String s) { + this.path = s; } /** @@ -93,16 +117,76 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String getUser() { - return env.getUsername(); + return user; } + public void setUser(String user) { + this.user = user; + clearUserID(); + } public String getPassword() { - return env.getPassword(); + return password; } + /** + * 修复密码中包含特殊字符,无法登录的问题 + * + * @return + */ + private String getEncodedPassword() { + try { + return URLEncoder.encode(password, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return password; + } + } + + public void setPassword(String password) { + this.password = password; + clearUserID(); + } - private HttpClient createHttpMethod(HashMap para) throws EnvException, UnsupportedEncodingException { + public Clock getClock() { + return this.clock; + } + + public void setClock(Clock clock) { + this.clock = clock; + } + + private void clearUserID() { + this.userID = null; + } + + public void setThreadLocal(String value) { + synchronized (this) { + threadLocal.set(value); + } + + } + + public String getThreadLocal() { + return threadLocal.get(); + } + + /** + * 所有与服务器端交互前,都要调用这个方法生成UserID + */ + private String createUserID() throws EnvException { + // 如果登录之后userID还是null + if (this.userID == null) { + if (!VT4FR.RemoteDesign.support() && licNotSupport <= 0) { + licNotSupport++; + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); + } + throw new EnvException(Inter.getLocText("Env-Invalid_User_and_Password")); + } + + return this.userID; + } + + private HttpClient createHttpMethod(HashMap para) throws EnvException { return createHttpMethod(para, false); } @@ -110,9 +194,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 根据nameValuePairs,也就是参数对,生成PostMethod */ private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { - String methodPath = getPath(); + String methodPath = this.path; if (!isSignIn) { - methodPath = methodPath + "?id=" + EnvContext.currentToken(); + methodPath = methodPath + "?id=" + createUserID(); } HttpClient client = new HttpClient(methodPath, para); /* @@ -129,14 +213,10 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters */ private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { - String methodPath = getPath() + '?' + "id=" + createUserID(); + String methodPath = path + '?' + "id=" + createUserID(); return new HttpClient(methodPath); } - private String createUserID() { - return EnvContext.currentToken(); - } - /* * Read the response body. @@ -192,6 +272,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + private void doWithTimeOutException() { + boolean isNotNeedTip = ComparatorUtils.equals(getThreadLocal(), "HEART_BEAT") || ComparatorUtils.equals(getThreadLocal(), "LOG_MESSAGE"); + if (!isReadTimeOut && !isNotNeedTip) { + isReadTimeOut = true; + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Data", "read_time_out"})); + isReadTimeOut = false; + } + FRContext.getLogger().info("Connection reset "); + } + + /** * nameValuePairs,这个参数要接着this.path,拼成一个URL,否则服务器端req.getParameter是无法得到的 * @@ -240,28 +331,127 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return sb.toString(); } + /** + * 测试连接服务器 + * + * @return 测试连接成功返回true + * @throws Exception 异常 + */ public boolean testServerConnection() throws Exception { - throw new UnsupportedOperationException("unsupport now"); -// return testConnection(true, true, DesignerContext.getDesignerFrame()); + return testConnection(true, true, DesignerContext.getDesignerFrame()); } + /** + * 测试当前配置是否正确 + * + * @return 链接是否成功 + * @throws Exception 异常 + */ @Override public boolean testServerConnectionWithOutShowMessagePane() throws Exception { - throw new UnsupportedOperationException("unsupport now"); + return testConnection(false, true, DesignerContext.getDesignerFrame()); } + /** + * 主要用于在环境配置面板中的测试连接按钮时,不要注册进远程环境 + * + * @param messageParentPane 弹框的依赖的面板 + * @return 是否测试连接成功 + * @throws Exception 异常 + */ public boolean testConnectionWithOutRegisteServer(Component messageParentPane) throws Exception { - throw new UnsupportedOperationException("unsupport now"); + return testConnection(true, false, messageParentPane); + } + + + private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { + checkArgument(parentComponent instanceof Component, "parentComponent should be a java.awt.component"); + Component component = parentComponent; + String url = String.format("%s/connection", EnvConstants.toDecisionPath(getPath())); + ImmutableMap params = ImmutableMap.of( + "version", (Object) ProductConstants.DESIGNER_VERSION + ); + ImmutableMap headers = ImmutableMap.of( + EnvConstants.USERNAME, getUser(), + EnvConstants.PWD, getPassword()); + String res = HttpToolbox.post(url, params, headers); + if (res == null) { + if (needMessage) { + JOptionPane.showMessageDialog(component, Inter.getLocText("Datasource-Connection_failed")); + } + return false; + } else if (ComparatorUtils.equals(res, "true")) { + return true; + } else { + if (ComparatorUtils.equals(res, EnvConstants.AUTH_ERROR)) { + JOptionPane.showMessageDialog(component, + Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) + , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); + return false; + } else { + if (ComparatorUtils.equals(res, EnvConstants.WAR_ERROR)) { + if (needMessage) { + JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + } else { + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + } + return false; + } else { + if (needMessage) { + JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + } else { + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + } + return false; + } + } + } + } + + private void extraChangeEnvPara() { + //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. + DesignerEnvProcessor envProcessor = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); + if (envProcessor != null) { + this.path = envProcessor.changeEnvPathBeforeConnect(user, password, path); + } } private void setHttpsParas() { - if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { + if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); System.setProperty(PWD_KEY, envManager.getCertificatePass()); } } + + /** + * 心跳访问,用来更新当前用户的访问时间 + * + * @throws Exception e + */ + public void heartBeatConnection() throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "heart_beat"); + para.put("user", user); + + HttpClient client = createHttpMethod(para); + execute4InputStream(client); + + //这做法不好, 30秒刷一次, 刷新的时候会重新构建树, 构建完会把子节点都收缩起来, 效果太差. + //为什么不保存刷新前树的伸缩状态, 因为刷新后的树和刷新前的树的结构未必是一致的. + + //服务器通知客户端更新左上角文件树面板 +// try { +// if (ComparatorUtils.equals(stream2String(execute4InputStream(method)), "true")) { +// DesignerFrameFileDealerPane.getInstance().refresh(); +// } +// } catch (Exception e) { +// FRContext.getLogger().error(e.getMessage()); +// } + } + /** * 返回描述该运行环境的名字 * @@ -272,6 +462,193 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Inter.getLocText("Env-Remote_Server"); } + /** + * 登录,返回userID + */ + @Override + public void signIn() throws Exception { + throw new UnsupportedOperationException("unsupport now"); + } + + + private void startLogTimer() { + if (logTimer != null) { + logTimer.cancel(); + } + + logTimer = new Timer(); + logTimer.schedule(new TimerTask() { + @Override + public void run() { + try { + RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); + FRContext.getCurrentEnv().printLogMessage(); + } catch (Exception e) { + FRContext.getLogger().info(e.getMessage()); + } + } + }, 10000, 10000); + } + + private void stopLogTimer() { + if (logTimer != null) { + logTimer.cancel(); + logTimer = null; + } + } + + /** + * 根据userID sign out + * + * @return 成功签出返回true + * @throws Exception e + */ + @Override + public boolean signOut() throws Exception { + if (userID == null) { + return true; + } + stopLogTimer(); + // richer:登出的时候就把定时发送的时钟停掉 + clock.stop(); + // richer:把轮训使用的定时器也去掉 + timer.cancel(); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "r_sign_out"); + para.put("id", userID); + + return simulaRPC(para, false + ); + } + + protected boolean simulaRPC(HashMap para, boolean isSignIn) throws Exception { + HttpClient client = createHttpMethod(para, isSignIn); + + // execute method取到input stream再转成String + String resJSON = null; + try { + resJSON = stream2String(execute4InputStream(client)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + + if (resJSON == null) { + return false; + } + if (resJSON.contains("RegistEditionException")) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); + return false; + } + try { + JSONObject jo = new JSONObject(resJSON); + + if (isSignIn) { + if (jo.has("id")) { + userID = jo.getString("id"); + } + if (jo.has("isRoot")) { + isRoot = jo.getBoolean("isRoot"); + } + + if (userID != null) { + return true; + } + } else { + if (jo.has("res")) { + return jo.getBoolean("res"); + } + } + String exception = jo.getString("exp"); + if (exception != null) { + throw new EnvException(exception); + } + } catch (JSONException je) { + // 返回的resJSON不是JSON格式的,那就直接返回resJSON作为userID + return true; + } + + return true; + } + + protected boolean doLockOperation(String[] filePathes, String cmd) throws Exception { + if (filePathes == null || filePathes.length == 0) { + return true; + } + + JSONArray ja = new JSONArray(filePathes); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", cmd); + para.put("pathes", ja.toString()); + + return simulaRPC(para, false); + } + + /** + * 取路径filePath下面文件的lock + *

+ * 处于同一个原子操作,要么拿到所有的锁,要么一个锁也没有拿到 + */ + public boolean getLock(String[] filePathes) throws Exception { + return doLockOperation(filePathes, "design_get_lock"); + } + + /** + * 解锁文件 + * + * @param filePathes 文件路径 + * @return 成功解锁返回true + * @throws Exception e + */ + public boolean releaseLock(String[] filePathes) throws Exception { + return doLockOperation(filePathes, "design_release_lock"); + } + + /** + * 当前Env下,tplPath目录下是否存在模板 + * + * @param reportPath 路径 + * @return 是否存在 + */ + @Override + public boolean isTemplateExist(String reportPath) throws Exception { + if (reportPath == null) { + return false; + } + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_report_exist"); + para.put("report_path", reportPath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + return ComparatorUtils.equals(stream2String(input), "true"); + } + + /** + * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 + * + * @param tplPath 路径 + * @throws Exception e + */ + @Override + public void unlockTemplate(String tplPath) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_close_report"); + para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); + HttpClient client = createHttpMethod(para); + + InputStream input = execute4InputStream(client); + String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); + + FRContext.getLogger().error(info); + } + public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -329,14 +706,287 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + /** + * 测试数据连接是否能够正确的连接上 + * + * @param database 数据连接 + * @return 如果能正确的连接到数据库则返回true + * @throws Exception 无法正确连接到数据库则抛出此异常 + * TODO alex_ENV 个人以为,这里应该是测试所有Connection的连接,所以Connection与TableData接口的关联需要思考 + */ + @Override + public boolean testConnection(com.fr.data.impl.Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把database写成xml文件到out + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_test_con"); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + @Override - public boolean updateAuthorities(DesignAuthority[] authorities) throws Exception { + public boolean updateAuthorities(DesignAuthority[] authorities) { return RemoteEnvUtils.updateAuthorities(authorities, this); } @Override public DesignAuthority[] getAuthorities() { + return RemoteEnvUtils.getAuthorities(this); + + } + + /** + * ben:取schema + */ + @Override + public String[] getTableSchema(com.fr.data.impl.Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_schema"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return null; + } + return DavXMLUtils.readXMLFileSchema(input); + } + + /** + * b:分别取Table,View,Procedure,实际应用时更有意义 + */ + @Override + public TableProcedure[] getTableProcedure(com.fr.data.impl.Connection database, String type, String schema) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_tables"); + para.put("__type__", type); + para.put("__dbschema__", schema); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return new TableProcedure[0]; + } + return DavXMLUtils.readXMLSQLTables(input); + } + + @Override + public List getProcedures(com.fr.data.impl.Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { + HashMap schemaTableProcedureMap = new HashMap(); + List sqlTableObjs = new ArrayList(); + TableProcedure[] sqlTableObj = null; + int len = schemas.length; + if (len > 0) { + for (int i = 0; i < len; i++) { + String schema = schemas[i]; + sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); + if (sqlTableObj == null) { + sqlTableObj = new TableProcedure[0]; + } + sqlTableObjs.add(sqlTableObj); + schemaTableProcedureMap.put(schema, sqlTableObj); + } + } else { + sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, null); + if (sqlTableObj == null) { + sqlTableObj = new TableProcedure[0]; + } + sqlTableObjs.add(sqlTableObj); + schemaTableProcedureMap.put(null, sqlTableObj); + } + DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); + return sqlTableObjs; + } + + /** + * 在当前路径下新建文件夹 + * + * @param folderPath 文件名 + * @return 成功创建返回true + * @throws Exception e + */ + @Override + public boolean createFolder(String folderPath) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_create_folder"); + para.put("folder_path", folderPath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 新建一个文件 + * + * @param filePath :目标文件相对路径 + * @return 成功新建返回true + * @throws Exception e + */ + @Override + public boolean createFile(String filePath) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_create_file"); + para.put("file_path", filePath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + @Override + public boolean renameFile(String newPath, String oldPath) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_rename_file"); + para.put("newPath", newPath); + para.put("oldPath", oldPath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 判断文件是否存在 + * + * @param filePath :目标文件相对路径 + * @return 文件是否存在 + * @throws Exception e + */ + @Override + public boolean fileExists(String filePath) throws Exception { + if (filePath == null) { + return false; + } + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_file_exists"); + para.put("file_path", filePath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 判断文件是否锁住 + * + * @param filePath 文件路径 + * @return 文件被锁住了,返回true + * @throws Exception e + */ + @Override + public boolean fileLocked(String filePath) throws Exception { + if (filePath == null) { + return false; + } + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_file_locked"); + para.put("file_path", filePath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + + /** + * 注册环境,用于检测是否启动定时器,主要用于本地环境来监测远程 + * + * @param env 用户环境 + */ + @Override + public void registerUserEnv(UserBaseEnv env) { + } + + /** + * 用于检测用户环境 + * ,启动定时器 + */ + @Override + public void startUserCheckTimer() { + } + + + /** + * 停止定时器 + */ + public void stopUserCheckTimer() { + } + + /** + * 删除文件 + * + * @param filePath 文件地址 + * @return 删除成功返回true + */ + @Override + public boolean deleteFile(String filePath) { + if (filePath == null) { + return false; + } + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "delete_file"); + para.put("file_path", filePath); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return false; } /** @@ -351,8 +1001,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); - para.put("current_user", getUser()); - para.put("current_password", this.getPassword()); + para.put("current_user", this.user); + para.put("current_password", this.password); para.put("key", key); para.put("value", value); @@ -404,6 +1054,168 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + /** + * 列出WEB-INF目录下指定路径的文件夹与文件 + * + * @param rootFilePath 指定目录 + * @return WEB-INF目录下指定路径的文件夹与文件 + * @throws Exception e + */ + @Override + public FileNode[] listFile(String rootFilePath) throws Exception { + return listFile(rootFilePath, false); + } + + /** + * 列出WEB-INF上层目录下指定路径的文件夹与文件 + * + * @param rootFilePath 指定目录 + * @return WEB-INF上层目录下指定路径的文件夹与文件 + * @throws Exception e + */ + @Override + public FileNode[] listReportPathFile(String rootFilePath) throws Exception { + return listFile(rootFilePath, true); + } + + private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { + FileNode[] fileNodes; + + HashMap para = new HashMap<>(); + para.put("op", "fs_remote_design"); + para.put("cmd", "design_list_file"); + para.put("file_path", rootFilePath); + para.put("currentUserName", this.getUser()); + para.put("currentUserId", this.createUserID()); + para.put("isWebReport", isWebReport ? "true" : "false"); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return new FileNode[0]; + } + + // 远程环境下左侧目录树暂不需要打开xlsx,xls文件 + fileNodes = DavXMLUtils.readXMLFileNodes(input); + ArrayList al = new ArrayList<>(); + for (int i = 0; i < fileNodes.length; i++) { + al.add(fileNodes[i]); + } + + FileNode[] fileNodes2 = new FileNode[al.size()]; + for (int i = 0; i < al.size(); i++) { + fileNodes2[i] = al.get(i); + } + + return fileNodes2; + } + + + /** + * 列出目标目录下所有cpt文件或文件夹 + * + * @param rootFilePath 指定目录 + * @return 列出目标目录下所有cpt文件或文件夹 + */ + @Override + public FileNode[] listCpt(String rootFilePath) { + return listCpt(rootFilePath, false); + } + + /** + * 列出目标目录下所有cpt文件或文件夹 + * + * @param rootFilePath 指定目录 + * @param recurse 是否递归查找其子目录 + * @return 列出目标目录下所有cpt文件或文件夹 + * @throws Exception e + */ + @Override + public FileNode[] listCpt(String rootFilePath, boolean recurse) { + List fileNodeList = new ArrayList<>(); + try { + listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + return fileNodeList.toArray(new FileNode[fileNodeList.size()]); + } + + private void listAll(String rootFilePath, List nodeList, String[] fileTypes, boolean recurse) throws Exception { + FileNode[] fns = listFile(rootFilePath); + for (FileNode fileNode : fns) { + if (isAcceptFileType(fileNode, fileTypes)) { + nodeList.add(fileNode); + } else if (fileNode.isDirectory()) { + if (recurse) { + listAll(rootFilePath + File.separator + fileNode.getName(), nodeList, fileTypes, true); + } else { + nodeList.add(fileNode); + } + } + } + } + + private boolean isAcceptFileType(FileNode fileNode, String[] fileTypes) { + for (String fileType : fileTypes) { + if (fileNode.isFileType(fileType)) { + return true; + } + } + return false; + } + + /** + * 获取指定数据集的参数 + * + * @param tableData 数据集 + * @return 数据集的参数 + * @throws Exception 获取参数失败则抛出此异常 + */ + @Override + public Parameter[] getTableDataParameters(TableData tableData) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + //把tableData写成xml文件到out + DavXMLUtils.writeXMLFileTableData(tableData, out); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_td_pars"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return new Parameter[0]; + } + return DavXMLUtils.readXMLParameters(input); + } + + + /** + * 获取存储过程中的参数 + * + * @param storeProcedure 存储过程 + * @return 返回存储过程中的所有参数组成的数组 + * @throws Exception 如果获取参数失败则抛出此异常 + */ + @Override + public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_sp_pars"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return new Parameter[0]; + } + return DavXMLUtils.readXMLParameters(input); + } + @Override public EmbeddedTableData previewTableData(Object tableData, Map parameterMap, int rowCount) throws Exception { return previewTableData(null, tableData, parameterMap, rowCount); @@ -485,6 +1297,90 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return execute4InputStream(client); } + /** + * Read XML.
+ * The method will be invoked when read data from XML file.
+ * May override the method to read the data that you saved. + */ + @Override + 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.user = tmpVal; + } + if ((tmpVal = reader.getAttrAsString("password", null)) != null) { + this.password = tmpVal; + } + } + } + } + + /** + * Write XML.
+ * The method will be invoked when save data to XML file.
+ * May override the method to save your own data. + * + * @param writer the PrintWriter. + */ + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); + } + + + public static class Clock { + + private static final long CONNECT_INTERVAL = 3000L; + private boolean connected = false; + + private RemoteEnv remoteEnv; + + public Clock(RemoteEnv remoteEnv) { + this.remoteEnv = remoteEnv; + } + + /** + * 停止连接 + */ + public void stop() { + connected = false; + } + + private void attemptConnect() throws Exception { + Thread.sleep(CONNECT_INTERVAL); + Pattern pattern = Pattern.compile("[/:]+"); + String[] strs = pattern.split(remoteEnv.path); + + //host,如:192.168.100.195 + String shost = strs[1]; + //端口,如:8080 + int sport = Integer.parseInt(strs[2]); + + Socket socket = new Socket(shost, sport); + //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 + socket.setOOBInline(false); + socket.sendUrgentData(0xFF); + socket.close(); + } + } + + /** + * 读报表运行环境所需的配置文件,如datasource.xml, config.xml,这些文件都保存在WEB-INF/resources目录下面 + * + * @param resourceName 配置文件的名字,如datasource.xml + * @return 输入流 + * @throws Exception e + */ + @Override + public InputStream readResource(String resourceName) throws Exception { + return readBean(resourceName, ProjectConstants.RESOURCES_NAME); + } + /** * 读取路径下的svg文件 @@ -659,11 +1555,176 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return new Bytes2ServerOutputStream(para); } + /** + * 返回数据库表的列名 + * + * @param selectedName 所选择数据库名 + * @param schema 数据库模式,用于存储过程 + * @param tableName 所选择数据库名 + */ + @Override + public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_columns"); + para.put("dsName", selectedName); + para.put("schema", schema); + para.put("tableName", tableName); + + HttpClient client = createHttpMethod2(para); + InputStream input = execute4InputStream(client); + + if (input == null) { + return null; + } + + String colums = stream2String(input); + if (StringUtils.isEmpty(colums)) { + return null; + } + return colums.split("\\."); + } + + /** + * 返回模板文件路径 + */ @Override public String getWebReportPath() { return getPath().substring(0, getPath().lastIndexOf("/")); } + @Override + public String getProcedureText(String connectionName, String databaseName) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_procedure_text"); + para.put("procedure_name", databaseName); + para.put("connectionName", connectionName); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return StringUtils.EMPTY; + } + return DavXMLUtils.readXMLProcedureText(input); + } + + @Override + public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_sp_parameters"); + para.put("__name__", databaseName); + para.put("__default_value__", parameterDefaultValue); + para.put("connectionName", connectionName); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return new StoreProcedureParameter[0]; + } + return DavXMLUtils.readXMLStoreProcedureParameters(input); + } + + /** + * 获取datasource.xml文件的修改表 + */ + @Override + public ModifiedTable getDataSourceModifiedTables(String type) { + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "get_datasource_modified_tables"); + para.put("type", type); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + if (input == null) { + return new ModifiedTable(); + } + return DavXMLUtils.readXMLModifiedTables(input); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new ModifiedTable(); + } + + + /** + * 写修改表 + * + * @param modifiedTable 修改表 + * @param type 操作类型,是数据连接还是服务器数据集 + * @return 写入成功返回true + */ + @Override + public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "update_modifytable_to_server"); + para.put("type", type); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return false; + } + + public String[] getProcedureColumns(StoreProcedure storeProcedure, java.util.Map parameterMap) throws Exception { + String[] columns; + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp"); + HttpClient client = createHttpMethod(para); + try { + InputStream input = execute4InputStream(client); + + if (input == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + + columns = DavXMLUtils.readXMLSPColumns(input); + return columns; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + + return new String[0]; + } + + public String[] getProcedureColumns(String name) throws Exception { + String[] columns; + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp_columns_name"); + para.put("name", name); + HttpClient client = createHttpMethod(para); + try { + InputStream input = execute4InputStream(client); + if (input == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + columns = DavXMLUtils.readXMLSPColumns(input); + return columns; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new String[0]; + + } /** * 输出日志信息 @@ -687,12 +1748,103 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + @Override + public String getUserID() { + return userID; + } + + + /** + * 预览存储过程 + * + * @param storeProcedure 存储过程 + * @param parameterMap 参数map + * @param rowCount 行数 + * @return 返回取到的存储过程 + */ + @Override + public ProcedureDataModel[] previewProcedureDataModel(StoreProcedure storeProcedure, Map parameterMap, int rowCount) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); + + // 把parameterMap转成JSON格式的字符串 + JSONObject jo = new JSONObject(parameterMap); + String jsonParameter = jo.toString(); + + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp"); + para.put("pars", jsonParameter); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return null; + } + + TableData[] tableDatas = DavXMLUtils.readXMLTableDataArray(input); + if (tableDatas == null || tableDatas.length == 0) { + return new ProcedureDataModel[0]; + } + ProcedureDataModel[] procedureDataModels = new ProcedureDataModel[tableDatas.length]; + for (int i = 0; i < tableDatas.length; i++) { + if (tableDatas[i] instanceof EmbeddedTableData) { + procedureDataModels[i] = ((EmbeddedTableData) tableDatas[i]).trans2ProcedureDataModel(); + } + } + return procedureDataModels; + + + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new ProcedureDataModel[0]; + } + + + @Override + public String getAppName() { + return "WebReport"; + } + + /** + * 是否为Oracle数据连接 + * + * @param database 数据连接 + * @return 是返回true + * @throws Exception + */ + @Override + public boolean isOracle(Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_isOracle"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return true; + } + return DavXMLUtils.readXMLBoolean(input); + } @Override public String[] getSupportedTypes() { return FILE_TYPE; } + /** + * 在模板面板中是否支持增加打开所在文件夹、重命名、删除三个工具栏选项 + * + * @return 不支持返回false + */ + @Override + public boolean isSupportLocalFileOperate() { + return false; + } + /** * 判断是否有文件夹权限 * @@ -723,6 +1875,43 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } + /** + * 是否是管理员身份 + * + * @return 是则返回true + */ + @Override + public boolean isRoot() { + return isRoot; + } + + /** + * 是否为压缩包部署 + * + * @return 是则返回true + */ + @Override + public boolean isPackDeploy() { + return false; + } + + @Override + public String getDesignerVersion() throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_designer_version"); + para.put("user", user); + para.put("password", getEncodedPassword()); + + HttpClient client = createHttpMethod(para, true); + try { + return stream2String(execute4InputStream(client)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return null; + } + @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); @@ -751,6 +1940,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return allRoleList; } + @Override + public String getLicName() { + return License.FILE_NAME; + } + + @Override + public void setLicName(String licName) { + //do nth + } + + /** * 获取当前env的build文件路径 */ @@ -928,10 +2128,38 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + @Override + public void doWhenServerShutDown() { + + } + + @Override + public boolean isLocalEnv() { + + return false; + } @Override public boolean hasPluginServiceStarted(String key) { return true; } + + @Override + public JSONArray getPluginStatus() { + + try { + HashMap para = new HashMap<>(); + para.put("op", "plugin"); + para.put("cmd", "get_status"); + para.put("current_uid", this.createUserID()); + para.put("currentUsername", this.getUser()); + + HttpClient client = createHttpMethod(para); + InputStream input = execute4InputStream(client); + return new JSONArray(stream2String(input)); + } catch (Exception e) { + return JSONArray.create(); + } + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/env/RemoteEnvUtils.java b/designer-base/src/com/fr/env/RemoteEnvUtils.java index d22150bd8..5580222be 100644 --- a/designer-base/src/com/fr/env/RemoteEnvUtils.java +++ b/designer-base/src/com/fr/env/RemoteEnvUtils.java @@ -3,6 +3,7 @@ package com.fr.env; import com.fr.base.FRContext; import com.fr.general.IOUtils; import com.fr.report.DesignAuthority; +import com.fr.report.util.AuthorityXMLUtils; import com.fr.stable.EncodeConstants; import com.fr.third.org.apache.http.HttpEntity; import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; @@ -13,7 +14,6 @@ import com.fr.third.org.apache.http.entity.InputStreamEntity; import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; import com.fr.third.org.apache.http.impl.client.HttpClients; import com.fr.third.org.apache.http.util.EntityUtils; -import com.fr.web.utils.AuthorityXMLUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/designer-base/src/com/fr/env/SignIn.java b/designer-base/src/com/fr/env/SignIn.java index f876302ba..09ba8c911 100644 --- a/designer-base/src/com/fr/env/SignIn.java +++ b/designer-base/src/com/fr/env/SignIn.java @@ -25,7 +25,7 @@ public class SignIn { static { EventDispatcher.listen(EnvEvents.CONNECTION_ERROR, new Listener() { @Override - public void on(Event event, Null param) { + public void on(Event event, Null param) { if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Connect2Server_Again"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) { try { diff --git a/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java b/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java index 863dd1b95..a3cd042fa 100644 --- a/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java +++ b/designer-form/src/com/fr/design/mainframe/widget/accessibles/AccessibleBodyWatermarkEditor.java @@ -7,6 +7,9 @@ import com.fr.design.mainframe.widget.editors.ITextComponent; import com.fr.design.mainframe.widget.renderer.WatermarkRenderer; import com.fr.design.mainframe.widget.wrappers.WatermarkWrapper; import com.fr.design.report.WatermarkPane; +import com.fr.plugin.ExtraClassManager; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; import javax.swing.SwingUtilities; import java.awt.Dimension; @@ -40,6 +43,11 @@ public class AccessibleBodyWatermarkEditor extends UneditableAccessibleEditor { public void doOk() { setValue(watermarkPane.update()); fireStateChanged(); + // 功能点 + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.WATERMARK); + } } }); watermarkPane.populate((WatermarkAttr) getValue()); diff --git a/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java b/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java index ebe0b4ed1..d74d1698a 100644 --- a/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java +++ b/designer-realize/src/com/fr/design/actions/report/ReportWatermarkAction.java @@ -9,7 +9,10 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.design.report.WatermarkPane; import com.fr.main.impl.WorkBook; +import com.fr.plugin.ExtraClassManager; import com.fr.report.core.ReportUtils; +import com.fr.stable.ReportFunctionProcessor; +import com.fr.stable.fun.FunctionProcessor; import java.awt.event.ActionEvent; @@ -42,6 +45,11 @@ public class ReportWatermarkAction extends JWorkBookAction { public void doOk() { wbTpl.addAttrMark(watermarkPane.update()); jwb.fireTargetModified(); + // 功能点 + FunctionProcessor processor = ExtraClassManager.getInstance().getFunctionProcessor(); + if (processor != null) { + processor.recordFunction(ReportFunctionProcessor.WATERMARK); + } } }).setVisible(true); } From cd26cd96bc66400882086564c39a20dfb47ceda4 Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 29 May 2018 18:46:27 +0800 Subject: [PATCH 09/29] merge --- .../src/com/fr/design/DesignerEnvManager.java | 2 +- designer-base/src/com/fr/env/EnvListPane.java | 6 +- designer-base/src/com/fr/env/RemoteEnv.java | 1245 +---------------- .../src/com/fr/env/RemoteEnvPane.java | 17 +- 4 files changed, 72 insertions(+), 1198 deletions(-) diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index fcc4c2b26..8d6cbafed 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -1455,7 +1455,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { } if (reader.isChildNode()) { - if (reader.getTagName().equals("Env")) { // description. + if (reader.getTagName().contains("Env")) { // description. // marks:获取名字 String reportServerName = reader.getAttrAsString("name", null); diff --git a/designer-base/src/com/fr/env/EnvListPane.java b/designer-base/src/com/fr/env/EnvListPane.java index 951f6cdda..9e1677ba3 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -1,6 +1,8 @@ package com.fr.env; import com.fr.base.Env; +import com.fr.base.env.resource.LocalEnvConfig; +import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.core.env.EnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; @@ -60,9 +62,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", - LocalEnv.class, LocalEnvPane.class); + LocalEnvConfig.class, LocalEnvPane.class); NameableCreator remote = new NameObjectCreator(Inter.getLocText("Env-Remote_Server"), "com/fr/design/images/data/bind/distanceconnect.png", - RemoteEnv.class, RemoteEnvPane.class); + RemoteEnvConfig.class, RemoteEnvPane.class); return new NameableCreator[]{local, remote}; } diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index d541afe4c..b09f1cb98 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -1,64 +1,74 @@ package com.fr.env; -import com.fr.base.*; +import com.fr.base.AbstractEnv; +import com.fr.base.EnvException; +import com.fr.base.FRContext; +import com.fr.base.TableData; +import com.fr.base.Utils; +import com.fr.base.env.EnvContext; +import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.base.remote.RemoteDeziConstants; import com.fr.core.env.EnvConstants; import com.fr.data.TableDataSource; -import com.fr.data.core.DataCoreUtils; -import com.fr.data.core.db.TableProcedure; -import com.fr.data.impl.Connection; import com.fr.data.impl.EmbeddedTableData; -import com.fr.data.impl.storeproc.ProcedureDataModel; -import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.dav.DavXMLUtils; -import com.fr.dav.UserBaseEnv; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.dialog.InformationWarnPane; -import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.file.CacheManager; import com.fr.file.ConnectionConfig; import com.fr.file.TableDataConfig; -import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.general.Inter; import com.fr.general.http.HttpClient; import com.fr.general.http.HttpToolbox; import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; -import com.fr.license.function.VT4FR; import com.fr.log.FineLoggerFactory; -import com.fr.regist.License; import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; -import com.fr.stable.*; +import com.fr.stable.EncodeConstants; +import com.fr.stable.Filter; +import com.fr.stable.JavaCompileInfo; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; +import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; -import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLTools; -import com.fr.stable.xml.XMLableReader; import com.fr.third.guava.collect.ImmutableMap; import com.fr.web.ResourceConstants; -import javax.swing.*; -import javax.xml.transform.*; +import javax.swing.JOptionPane; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import java.awt.*; -import java.io.*; +import java.awt.Component; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; -import java.net.NoRouteToHostException; -import java.net.Socket; -import java.net.URLEncoder; -import java.util.*; -import java.util.List; -import java.util.Timer; -import java.util.logging.Level; -import java.util.regex.Pattern; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; import static com.fr.third.guava.base.Preconditions.checkArgument; @@ -66,38 +76,20 @@ import static com.fr.third.guava.base.Preconditions.checkArgument; * @author null */ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { - private static final int TIME_OUT = 30 * 1000; - private static final int PLAIN_SOCKET_PORT = 80; - private static final int SSL_PORT = 443; - private static final int MAX_PER_ROUTE = 20; - private static final int MAX_TOTAL = 100; - private static final String REMOTE_PLUGIN = "remote_plugin.info"; + private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; private String path; - private String user; - private String password; - private Clock clock = null; private String userID; - private Timer timer; - private int licNotSupport = 0; - private boolean isRoot = false; - private Timer logTimer = null; - private static ThreadLocal threadLocal = new ThreadLocal<>(); private boolean isReadTimeOut = false; private String buildFilePath; + private RemoteEnvConfig env; - public RemoteEnv() { - this.clock = new Clock(this); - } public RemoteEnv(String path, String userName, String password) { - this(); - this.path = path; - this.user = userName; - this.password = password; + env = new RemoteEnvConfig(path, userName, password); } /** @@ -105,85 +97,24 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String getPath() { - return this.path; - } - - public void setPath(String s) { - this.path = s; + return env.getPath(); } - /** - * 当前设计环境的用户名,用于远程设计 - */ @Override public String getUser() { - return user; + return env.getUsername(); } - public void setUser(String user) { - this.user = user; - clearUserID(); - } public String getPassword() { - return password; - } - - /** - * 修复密码中包含特殊字符,无法登录的问题 - * - * @return - */ - private String getEncodedPassword() { - try { - return URLEncoder.encode(password, "UTF-8"); - } catch (UnsupportedEncodingException e) { - return password; - } - } - - public void setPassword(String password) { - this.password = password; - clearUserID(); - } - - public Clock getClock() { - return this.clock; - } - - public void setClock(Clock clock) { - this.clock = clock; - } - - private void clearUserID() { - this.userID = null; - } - - public void setThreadLocal(String value) { - synchronized (this) { - threadLocal.set(value); - } - - } - - public String getThreadLocal() { - return threadLocal.get(); + return env.getPassword(); } /** * 所有与服务器端交互前,都要调用这个方法生成UserID */ - private String createUserID() throws EnvException { - // 如果登录之后userID还是null - if (this.userID == null) { - if (!VT4FR.RemoteDesign.support() && licNotSupport <= 0) { - licNotSupport++; - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - } - throw new EnvException(Inter.getLocText("Env-Invalid_User_and_Password")); - } - - return this.userID; + private String createUserID() { + return EnvContext.currentToken(); } private HttpClient createHttpMethod(HashMap para) throws EnvException { @@ -272,15 +203,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - private void doWithTimeOutException() { - boolean isNotNeedTip = ComparatorUtils.equals(getThreadLocal(), "HEART_BEAT") || ComparatorUtils.equals(getThreadLocal(), "LOG_MESSAGE"); - if (!isReadTimeOut && !isNotNeedTip) { - isReadTimeOut = true; - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Data", "read_time_out"})); - isReadTimeOut = false; - } - FRContext.getLogger().info("Connection reset "); - } /** @@ -408,13 +330,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - private void extraChangeEnvPara() { - //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. - DesignerEnvProcessor envProcessor = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); - if (envProcessor != null) { - this.path = envProcessor.changeEnvPathBeforeConnect(user, password, path); - } - } + private void setHttpsParas() { if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { @@ -425,32 +341,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - /** - * 心跳访问,用来更新当前用户的访问时间 - * - * @throws Exception e - */ - public void heartBeatConnection() throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "heart_beat"); - para.put("user", user); - - HttpClient client = createHttpMethod(para); - execute4InputStream(client); - //这做法不好, 30秒刷一次, 刷新的时候会重新构建树, 构建完会把子节点都收缩起来, 效果太差. - //为什么不保存刷新前树的伸缩状态, 因为刷新后的树和刷新前的树的结构未必是一致的. - - //服务器通知客户端更新左上角文件树面板 -// try { -// if (ComparatorUtils.equals(stream2String(execute4InputStream(method)), "true")) { -// DesignerFrameFileDealerPane.getInstance().refresh(); -// } -// } catch (Exception e) { -// FRContext.getLogger().error(e.getMessage()); -// } - } /** * 返回描述该运行环境的名字 @@ -471,184 +362,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - private void startLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - } - - logTimer = new Timer(); - logTimer.schedule(new TimerTask() { - @Override - public void run() { - try { - RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); - FRContext.getCurrentEnv().printLogMessage(); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - } - } - }, 10000, 10000); - } - - private void stopLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - logTimer = null; - } - } - - /** - * 根据userID sign out - * - * @return 成功签出返回true - * @throws Exception e - */ - @Override - public boolean signOut() throws Exception { - if (userID == null) { - return true; - } - stopLogTimer(); - // richer:登出的时候就把定时发送的时钟停掉 - clock.stop(); - // richer:把轮训使用的定时器也去掉 - timer.cancel(); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "r_sign_out"); - para.put("id", userID); - - return simulaRPC(para, false - ); - } - - protected boolean simulaRPC(HashMap para, boolean isSignIn) throws Exception { - HttpClient client = createHttpMethod(para, isSignIn); - - // execute method取到input stream再转成String - String resJSON = null; - try { - resJSON = stream2String(execute4InputStream(client)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - - if (resJSON == null) { - return false; - } - if (resJSON.contains("RegistEditionException")) { - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - return false; - } - try { - JSONObject jo = new JSONObject(resJSON); - - if (isSignIn) { - if (jo.has("id")) { - userID = jo.getString("id"); - } - if (jo.has("isRoot")) { - isRoot = jo.getBoolean("isRoot"); - } - - if (userID != null) { - return true; - } - } else { - if (jo.has("res")) { - return jo.getBoolean("res"); - } - } - String exception = jo.getString("exp"); - if (exception != null) { - throw new EnvException(exception); - } - } catch (JSONException je) { - // 返回的resJSON不是JSON格式的,那就直接返回resJSON作为userID - return true; - } - - return true; - } - - protected boolean doLockOperation(String[] filePathes, String cmd) throws Exception { - if (filePathes == null || filePathes.length == 0) { - return true; - } - - JSONArray ja = new JSONArray(filePathes); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", cmd); - para.put("pathes", ja.toString()); - - return simulaRPC(para, false); - } - - /** - * 取路径filePath下面文件的lock - *

- * 处于同一个原子操作,要么拿到所有的锁,要么一个锁也没有拿到 - */ - public boolean getLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_get_lock"); - } - - /** - * 解锁文件 - * - * @param filePathes 文件路径 - * @return 成功解锁返回true - * @throws Exception e - */ - public boolean releaseLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_release_lock"); - } - - /** - * 当前Env下,tplPath目录下是否存在模板 - * - * @param reportPath 路径 - * @return 是否存在 - */ - @Override - public boolean isTemplateExist(String reportPath) throws Exception { - if (reportPath == null) { - return false; - } - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_report_exist"); - para.put("report_path", reportPath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - return ComparatorUtils.equals(stream2String(input), "true"); - } - - /** - * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 - * - * @param tplPath 路径 - * @throws Exception e - */ - @Override - public void unlockTemplate(String tplPath) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_close_report"); - para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); - HttpClient client = createHttpMethod(para); - - InputStream input = execute4InputStream(client); - String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); - - FRContext.getLogger().error(info); - } - public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -706,36 +419,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - /** - * 测试数据连接是否能够正确的连接上 - * - * @param database 数据连接 - * @return 如果能正确的连接到数据库则返回true - * @throws Exception 无法正确连接到数据库则抛出此异常 - * TODO alex_ENV 个人以为,这里应该是测试所有Connection的连接,所以Connection与TableData接口的关联需要思考 - */ - @Override - public boolean testConnection(com.fr.data.impl.Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把database写成xml文件到out - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_test_con"); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } @Override - public boolean updateAuthorities(DesignAuthority[] authorities) { + public boolean updateAuthorities(DesignAuthority[] authorities) { return RemoteEnvUtils.updateAuthorities(authorities, this); } @@ -746,248 +432,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - /** - * ben:取schema - */ - @Override - public String[] getTableSchema(com.fr.data.impl.Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_schema"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - return DavXMLUtils.readXMLFileSchema(input); - } - - /** - * b:分别取Table,View,Procedure,实际应用时更有意义 - */ - @Override - public TableProcedure[] getTableProcedure(com.fr.data.impl.Connection database, String type, String schema) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_tables"); - para.put("__type__", type); - para.put("__dbschema__", schema); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new TableProcedure[0]; - } - return DavXMLUtils.readXMLSQLTables(input); - } - - @Override - public List getProcedures(com.fr.data.impl.Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { - HashMap schemaTableProcedureMap = new HashMap(); - List sqlTableObjs = new ArrayList(); - TableProcedure[] sqlTableObj = null; - int len = schemas.length; - if (len > 0) { - for (int i = 0; i < len; i++) { - String schema = schemas[i]; - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableObjs.add(sqlTableObj); - schemaTableProcedureMap.put(schema, sqlTableObj); - } - } else { - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, null); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableObjs.add(sqlTableObj); - schemaTableProcedureMap.put(null, sqlTableObj); - } - DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); - return sqlTableObjs; - } - - /** - * 在当前路径下新建文件夹 - * - * @param folderPath 文件名 - * @return 成功创建返回true - * @throws Exception e - */ - @Override - public boolean createFolder(String folderPath) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_folder"); - para.put("folder_path", folderPath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 新建一个文件 - * - * @param filePath :目标文件相对路径 - * @return 成功新建返回true - * @throws Exception e - */ - @Override - public boolean createFile(String filePath) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_file"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - @Override - public boolean renameFile(String newPath, String oldPath) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_rename_file"); - para.put("newPath", newPath); - para.put("oldPath", oldPath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否存在 - * - * @param filePath :目标文件相对路径 - * @return 文件是否存在 - * @throws Exception e - */ - @Override - public boolean fileExists(String filePath) throws Exception { - if (filePath == null) { - return false; - } - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_exists"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否锁住 - * - * @param filePath 文件路径 - * @return 文件被锁住了,返回true - * @throws Exception e - */ - @Override - public boolean fileLocked(String filePath) throws Exception { - if (filePath == null) { - return false; - } - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_locked"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - - /** - * 注册环境,用于检测是否启动定时器,主要用于本地环境来监测远程 - * - * @param env 用户环境 - */ - @Override - public void registerUserEnv(UserBaseEnv env) { - } - - /** - * 用于检测用户环境 - * ,启动定时器 - */ - @Override - public void startUserCheckTimer() { - } - - - /** - * 停止定时器 - */ - public void stopUserCheckTimer() { - } - - /** - * 删除文件 - * - * @param filePath 文件地址 - * @return 删除成功返回true - */ - @Override - public boolean deleteFile(String filePath) { - if (filePath == null) { - return false; - } - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "delete_file"); - para.put("file_path", filePath); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return false; - } /** * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 @@ -1001,8 +445,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); - para.put("current_user", this.user); - para.put("current_password", this.password); + para.put("current_user", getUser()); + para.put("current_password", getPassword()); para.put("key", key); para.put("value", value); @@ -1048,174 +492,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl for (int i = 0; i < toBeRemoveTDName.size(); i++) { dm.removeTableData(toBeRemoveTDName.get(i)); - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - } - - /** - * 列出WEB-INF目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF目录下指定路径的文件夹与文件 - * @throws Exception e - */ - @Override - public FileNode[] listFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, false); - } - - /** - * 列出WEB-INF上层目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF上层目录下指定路径的文件夹与文件 - * @throws Exception e - */ - @Override - public FileNode[] listReportPathFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, true); - } - - private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { - FileNode[] fileNodes; - - HashMap para = new HashMap<>(); - para.put("op", "fs_remote_design"); - para.put("cmd", "design_list_file"); - para.put("file_path", rootFilePath); - para.put("currentUserName", this.getUser()); - para.put("currentUserId", this.createUserID()); - para.put("isWebReport", isWebReport ? "true" : "false"); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return new FileNode[0]; - } - - // 远程环境下左侧目录树暂不需要打开xlsx,xls文件 - fileNodes = DavXMLUtils.readXMLFileNodes(input); - ArrayList al = new ArrayList<>(); - for (int i = 0; i < fileNodes.length; i++) { - al.add(fileNodes[i]); - } - - FileNode[] fileNodes2 = new FileNode[al.size()]; - for (int i = 0; i < al.size(); i++) { - fileNodes2[i] = al.get(i); - } - - return fileNodes2; - } - - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @return 列出目标目录下所有cpt文件或文件夹 - */ - @Override - public FileNode[] listCpt(String rootFilePath) { - return listCpt(rootFilePath, false); - } - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @param recurse 是否递归查找其子目录 - * @return 列出目标目录下所有cpt文件或文件夹 - * @throws Exception e - */ - @Override - public FileNode[] listCpt(String rootFilePath, boolean recurse) { - List fileNodeList = new ArrayList<>(); - try { - listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - return fileNodeList.toArray(new FileNode[fileNodeList.size()]); - } - - private void listAll(String rootFilePath, List nodeList, String[] fileTypes, boolean recurse) throws Exception { - FileNode[] fns = listFile(rootFilePath); - for (FileNode fileNode : fns) { - if (isAcceptFileType(fileNode, fileTypes)) { - nodeList.add(fileNode); - } else if (fileNode.isDirectory()) { - if (recurse) { - listAll(rootFilePath + File.separator + fileNode.getName(), nodeList, fileTypes, true); - } else { - nodeList.add(fileNode); - } - } - } - } - - private boolean isAcceptFileType(FileNode fileNode, String[] fileTypes) { - for (String fileType : fileTypes) { - if (fileNode.isFileType(fileType)) { - return true; - } - } - return false; - } - - /** - * 获取指定数据集的参数 - * - * @param tableData 数据集 - * @return 数据集的参数 - * @throws Exception 获取参数失败则抛出此异常 - */ - @Override - public Parameter[] getTableDataParameters(TableData tableData) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - //把tableData写成xml文件到out - DavXMLUtils.writeXMLFileTableData(tableData, out); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_td_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return new Parameter[0]; - } - return DavXMLUtils.readXMLParameters(input); - } - - - /** - * 获取存储过程中的参数 - * - * @param storeProcedure 存储过程 - * @return 返回存储过程中的所有参数组成的数组 - * @throws Exception 如果获取参数失败则抛出此异常 - */ - @Override - public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_sp_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return new Parameter[0]; + } + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); } - return DavXMLUtils.readXMLParameters(input); } + @Override public EmbeddedTableData previewTableData(Object tableData, Map parameterMap, int rowCount) throws Exception { return previewTableData(null, tableData, parameterMap, rowCount); @@ -1297,90 +580,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return execute4InputStream(client); } - /** - * Read XML.
- * The method will be invoked when read data from XML file.
- * May override the method to read the data that you saved. - */ - @Override - 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.user = tmpVal; - } - if ((tmpVal = reader.getAttrAsString("password", null)) != null) { - this.password = tmpVal; - } - } - } - } - - /** - * Write XML.
- * The method will be invoked when save data to XML file.
- * May override the method to save your own data. - * - * @param writer the PrintWriter. - */ - @Override - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); - } - - - public static class Clock { - - private static final long CONNECT_INTERVAL = 3000L; - private boolean connected = false; - - private RemoteEnv remoteEnv; - - public Clock(RemoteEnv remoteEnv) { - this.remoteEnv = remoteEnv; - } - - /** - * 停止连接 - */ - public void stop() { - connected = false; - } - - private void attemptConnect() throws Exception { - Thread.sleep(CONNECT_INTERVAL); - Pattern pattern = Pattern.compile("[/:]+"); - String[] strs = pattern.split(remoteEnv.path); - - //host,如:192.168.100.195 - String shost = strs[1]; - //端口,如:8080 - int sport = Integer.parseInt(strs[2]); - - Socket socket = new Socket(shost, sport); - //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 - socket.setOOBInline(false); - socket.sendUrgentData(0xFF); - socket.close(); - } - } - - /** - * 读报表运行环境所需的配置文件,如datasource.xml, config.xml,这些文件都保存在WEB-INF/resources目录下面 - * - * @param resourceName 配置文件的名字,如datasource.xml - * @return 输入流 - * @throws Exception e - */ - @Override - public InputStream readResource(String resourceName) throws Exception { - return readBean(resourceName, ProjectConstants.RESOURCES_NAME); - } - /** * 读取路径下的svg文件 @@ -1555,35 +754,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return new Bytes2ServerOutputStream(para); } - /** - * 返回数据库表的列名 - * - * @param selectedName 所选择数据库名 - * @param schema 数据库模式,用于存储过程 - * @param tableName 所选择数据库名 - */ - @Override - public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_columns"); - para.put("dsName", selectedName); - para.put("schema", schema); - para.put("tableName", tableName); - - HttpClient client = createHttpMethod2(para); - InputStream input = execute4InputStream(client); - - if (input == null) { - return null; - } - - String colums = stream2String(input); - if (StringUtils.isEmpty(colums)) { - return null; - } - return colums.split("\\."); - } /** * 返回模板文件路径 @@ -1593,139 +763,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return getPath().substring(0, getPath().lastIndexOf("/")); } - @Override - public String getProcedureText(String connectionName, String databaseName) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_procedure_text"); - para.put("procedure_name", databaseName); - para.put("connectionName", connectionName); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return StringUtils.EMPTY; - } - return DavXMLUtils.readXMLProcedureText(input); - } - - @Override - public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_sp_parameters"); - para.put("__name__", databaseName); - para.put("__default_value__", parameterDefaultValue); - para.put("connectionName", connectionName); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new StoreProcedureParameter[0]; - } - return DavXMLUtils.readXMLStoreProcedureParameters(input); - } - - /** - * 获取datasource.xml文件的修改表 - */ - @Override - public ModifiedTable getDataSourceModifiedTables(String type) { - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "get_datasource_modified_tables"); - para.put("type", type); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - if (input == null) { - return new ModifiedTable(); - } - return DavXMLUtils.readXMLModifiedTables(input); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new ModifiedTable(); - } - - - /** - * 写修改表 - * - * @param modifiedTable 修改表 - * @param type 操作类型,是数据连接还是服务器数据集 - * @return 写入成功返回true - */ - @Override - public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "update_modifytable_to_server"); - para.put("type", type); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return false; - } - - public String[] getProcedureColumns(StoreProcedure storeProcedure, java.util.Map parameterMap) throws Exception { - String[] columns; - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp"); - HttpClient client = createHttpMethod(para); - try { - InputStream input = execute4InputStream(client); - - if (input == null) { - return ArrayUtils.EMPTY_STRING_ARRAY; - } - - columns = DavXMLUtils.readXMLSPColumns(input); - return columns; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - - return new String[0]; - } - - public String[] getProcedureColumns(String name) throws Exception { - String[] columns; - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp_columns_name"); - para.put("name", name); - HttpClient client = createHttpMethod(para); - try { - InputStream input = execute4InputStream(client); - if (input == null) { - return ArrayUtils.EMPTY_STRING_ARRAY; - } - columns = DavXMLUtils.readXMLSPColumns(input); - return columns; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new String[0]; - - } - /** * 输出日志信息 * @@ -1733,19 +770,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public void printLogMessage() throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "get_log_message"); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return; - } - LogRecordTime[] records = LogUtils.readXMLLogRecords(input); - for (LogRecordTime logRecordTime : records) { - //TODO - } + throw new UnsupportedOperationException("unsupport now"); } @Override @@ -1754,96 +779,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - /** - * 预览存储过程 - * - * @param storeProcedure 存储过程 - * @param parameterMap 参数map - * @param rowCount 行数 - * @return 返回取到的存储过程 - */ - @Override - public ProcedureDataModel[] previewProcedureDataModel(StoreProcedure storeProcedure, Map parameterMap, int rowCount) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - - // 把parameterMap转成JSON格式的字符串 - JSONObject jo = new JSONObject(parameterMap); - String jsonParameter = jo.toString(); - - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp"); - para.put("pars", jsonParameter); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - - TableData[] tableDatas = DavXMLUtils.readXMLTableDataArray(input); - if (tableDatas == null || tableDatas.length == 0) { - return new ProcedureDataModel[0]; - } - ProcedureDataModel[] procedureDataModels = new ProcedureDataModel[tableDatas.length]; - for (int i = 0; i < tableDatas.length; i++) { - if (tableDatas[i] instanceof EmbeddedTableData) { - procedureDataModels[i] = ((EmbeddedTableData) tableDatas[i]).trans2ProcedureDataModel(); - } - } - return procedureDataModels; - - - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new ProcedureDataModel[0]; - } - - - @Override - public String getAppName() { - return "WebReport"; - } - - /** - * 是否为Oracle数据连接 - * - * @param database 数据连接 - * @return 是返回true - * @throws Exception - */ - @Override - public boolean isOracle(Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_isOracle"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return true; - } - return DavXMLUtils.readXMLBoolean(input); - } - @Override public String[] getSupportedTypes() { return FILE_TYPE; } - /** - * 在模板面板中是否支持增加打开所在文件夹、重命名、删除三个工具栏选项 - * - * @return 不支持返回false - */ - @Override - public boolean isSupportLocalFileOperate() { - return false; - } /** * 判断是否有文件夹权限 @@ -1875,42 +815,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - /** - * 是否是管理员身份 - * - * @return 是则返回true - */ - @Override - public boolean isRoot() { - return isRoot; - } - - /** - * 是否为压缩包部署 - * - * @return 是则返回true - */ - @Override - public boolean isPackDeploy() { - return false; - } - - @Override - public String getDesignerVersion() throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_designer_version"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - HttpClient client = createHttpMethod(para, true); - try { - return stream2String(execute4InputStream(client)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return null; - } @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { @@ -1940,16 +844,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return allRoleList; } - @Override - public String getLicName() { - return License.FILE_NAME; - } - - @Override - public void setLicName(String licName) { - //do nth - } - /** * 获取当前env的build文件路径 @@ -2128,16 +1022,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - @Override - public void doWhenServerShutDown() { - - } - - @Override - public boolean isLocalEnv() { - - return false; - } @Override public boolean hasPluginServiceStarted(String key) { @@ -2145,21 +1029,4 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return true; } - @Override - public JSONArray getPluginStatus() { - - try { - HashMap para = new HashMap<>(); - para.put("op", "plugin"); - para.put("cmd", "get_status"); - para.put("current_uid", this.createUserID()); - para.put("currentUsername", this.getUser()); - - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); - return new JSONArray(stream2String(input)); - } catch (Exception e) { - return JSONArray.create(); - } - } } \ No newline at end of file diff --git a/designer-base/src/com/fr/env/RemoteEnvPane.java b/designer-base/src/com/fr/env/RemoteEnvPane.java index 77ae0b451..20ca4715a 100644 --- a/designer-base/src/com/fr/env/RemoteEnvPane.java +++ b/designer-base/src/com/fr/env/RemoteEnvPane.java @@ -1,6 +1,8 @@ package com.fr.env; import com.fr.base.FRContext; +import com.fr.base.env.resource.EnvConfigUtils; +import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.beans.BasicBeanPane; import com.fr.design.border.UITitledBorder; @@ -49,7 +51,7 @@ import static com.fr.design.layout.TableLayout.PREFERRED; /** * @author yaohwu */ -public class RemoteEnvPane extends BasicBeanPane { +public class RemoteEnvPane extends BasicBeanPane { private static final Color TIPS_FONT_COLOR = new Color(0x8f8f92); @@ -100,7 +102,7 @@ public class RemoteEnvPane extends BasicBeanPane { /** * 主机位置 */ - private RemoteEnvURL remoteEnvURL; + private RemoteEnvURL remoteEnvURL = new RemoteEnvURL(""); /** * https 配置面板 */ @@ -151,6 +153,7 @@ public class RemoteEnvPane extends BasicBeanPane { @Override public void removeUpdate(DocumentEvent e) { + actionURLInputChange(); } @@ -250,7 +253,7 @@ public class RemoteEnvPane extends BasicBeanPane { } @Override - public void populateBean(RemoteEnv ob) { + public void populateBean(RemoteEnvConfig ob) { if (StringUtils.isEmpty(ob.getPath())) { remoteEnvURL = RemoteEnvURL.createDefaultURL(); @@ -265,18 +268,20 @@ public class RemoteEnvPane extends BasicBeanPane { fileChooserButton.setEnabled(remoteEnvURL.getHttps()); updateHttpsConfigPanel(); - this.usernameInput.setText(ob.getUser() == null ? StringUtils.EMPTY : ob.getUser()); + String username = EnvConfigUtils.getUsername(ob); + String pwd = EnvConfigUtils.getPassword(ob); + this.usernameInput.setText(username == null ? StringUtils.EMPTY : pwd); this.passwordInput.setText(ob.getPassword() == null ? StringUtils.EMPTY : ob.getPassword()); } @Override - public RemoteEnv updateBean() { + public RemoteEnvConfig updateBean() { String path = remoteEnvURL.getURL(); String user = this.usernameInput.getText(); String password = new String(this.passwordInput.getPassword()); - return new RemoteEnv(path, user, password); + return new RemoteEnvConfig(path, user, password); } @Override From f2b67d482dc38b3a134b2d60a6580cf237168bac Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 14:40:21 +0800 Subject: [PATCH 10/29] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8Cslide?= =?UTF-8?q?r=E5=92=8Cquickeditor=E7=9A=84=E5=86=85=E5=AD=98=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/actions/core/ActionFactory.java | 14 + .../fr/design/file/MutilTempalteTabPane.java | 15 +- .../fr/design/mainframe/DesignerFrame.java | 45 ++- .../fr/design/mainframe/JFormSliderPane.java | 80 +++-- .../com/fr/design/mainframe/JSliderPane.java | 73 +++-- .../com/fr/design/selection/QuickEditor.java | 9 +- .../design/mainframe/WidgetToolBarPane.java | 18 +- .../fr/design/dscolumn/DSColumnBasicPane.java | 55 ++-- .../SelectedConfirmedDataColumnPane.java | 7 +- .../dscolumn/SelectedDataColumnPane.java | 175 ++++++++--- .../fr/design/mainframe/ElementCasePane.java | 2 + .../mainframe/ReportComponentComposite.java | 5 +- .../cell/AbstractDSCellEditorPane.java | 5 + .../com/fr/design/module/DesignerModule.java | 32 +- .../com/fr/grid/selection/CellSelection.java | 60 ++-- .../com/fr/grid/selection/FloatSelection.java | 17 +- .../com/fr/quickeditor/FloatQuickEditor.java | 28 +- .../cellquick/CellDSColumnEditor.java | 283 ++++++++++++------ .../cellquick/CellRichTextEditor.java | 7 +- .../cellquick/CellStringQuickEditor.java | 2 - .../cellquick/CellSubReportEditor.java | 6 + .../floatquick/FloatImageQuickEditor.java | 8 +- .../floatquick/FloatStringQuickEditor.java | 66 ++-- 23 files changed, 661 insertions(+), 351 deletions(-) diff --git a/designer-base/src/com/fr/design/actions/core/ActionFactory.java b/designer-base/src/com/fr/design/actions/core/ActionFactory.java index 7bc73acbb..e48caa0ac 100644 --- a/designer-base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer-base/src/com/fr/design/actions/core/ActionFactory.java @@ -55,6 +55,20 @@ public class ActionFactory { private ActionFactory() { } + + /** + * 元素编辑器释放模板对象 + */ + public static void editorRelease() { + for (Map.Entry entry : cellEditor.entrySet()) { + entry.getValue().release(); + } + for (Map.Entry entry : floatEditor.entrySet()) { + entry.getValue().release(); + } + } + + /** * 注册无需每次实例化的单元格元素编辑器 * diff --git a/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java b/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java index 5a05f20d2..24aa39693 100644 --- a/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java @@ -711,21 +711,10 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M if (returnVal == JOptionPane.YES_OPTION && specifiedTemplate.saveTemplate()) { specifiedTemplate.saveTemplate(); FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); - HistoryTemplateListPane.getInstance().closeSelectedReport(specifiedTemplate); - activeTemplate(filename); - } else if (returnVal == JOptionPane.NO_OPTION) { - //不保存 - HistoryTemplateListPane.getInstance().closeSelectedReport(specifiedTemplate); - activeTemplate(filename); } - //若是点击取消关闭,则什么都不做 - } else { - //若是已经保存过了,则关闭即可 - HistoryTemplateListPane.getInstance().closeSelectedReport(specifiedTemplate); - activeTemplate(filename); } - - + HistoryTemplateListPane.getInstance().closeSelectedReport(specifiedTemplate); + activeTemplate(filename); } /** diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index 41d755905..c85565c15 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -10,12 +10,17 @@ import com.fr.design.DesignModelAdapter; import com.fr.design.DesignState; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.actions.core.ActionFactory; import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedListener; -import com.fr.design.file.*; +import com.fr.design.file.HistoryTemplateListPane; +import com.fr.design.file.MutilTempalteTabPane; +import com.fr.design.file.NewTemplatePane; +import com.fr.design.file.SaveSomeTemplatePane; +import com.fr.design.file.TemplateTreePane; import com.fr.design.fun.TitlePlaceProcessor; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.imenu.UIMenuHighLight; @@ -49,13 +54,39 @@ 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.*; -import java.awt.event.*; +import java.awt.dnd.DnDConstants; +import java.awt.dnd.DropTarget; +import java.awt.dnd.DropTargetDragEvent; +import java.awt.dnd.DropTargetDropEvent; +import java.awt.dnd.DropTargetEvent; +import java.awt.dnd.DropTargetListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -734,6 +765,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 添加的模板. */ public void addAndActivateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } @@ -750,6 +783,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta * @param jt 模板 */ public void activateJTemplate(JTemplate jt) { + //释放模板对象 + ActionFactory.editorRelease(); if (jt == null || jt.getEditingFILE() == null) { return; } diff --git a/designer-base/src/com/fr/design/mainframe/JFormSliderPane.java b/designer-base/src/com/fr/design/mainframe/JFormSliderPane.java index 81a916637..8a0ad05a4 100644 --- a/designer-base/src/com/fr/design/mainframe/JFormSliderPane.java +++ b/designer-base/src/com/fr/design/mainframe/JFormSliderPane.java @@ -14,13 +14,33 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JFormattedTextField; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButton; +import javax.swing.JSeparator; +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.NumberFormatter; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseEvent; import java.math.BigDecimal; /** @@ -51,7 +71,6 @@ public class JFormSliderPane extends JPanel { private static final Color BACK_COLOR = new Color(245, 245, 247); public int showValue = 100; public double resolutionTimes = 1.0; - private static JFormSliderPane THIS; private UITextField showVal; private JSpinner showValSpinner; private UISlider slider; @@ -62,7 +81,7 @@ public class JFormSliderPane extends JPanel { private UISliderButton showValButton; private UIRadioButton twoHundredButton; private UIRadioButton oneHundredButton; - private UIRadioButton SevenFiveButton; + private UIRadioButton sevenFiveButton; private UIRadioButton fiveTenButton; private UIRadioButton twoFiveButton; private UIRadioButton selfAdaptButton; @@ -83,7 +102,7 @@ public class JFormSliderPane extends JPanel { showValSpinner.setEditor(editor); JFormattedTextField textField = ((JSpinner.NumberEditor) showValSpinner.getEditor()).getTextField(); textField.setEditable(true); - DefaultFormatterFactory factory = (DefaultFormatterFactory) textField .getFormatterFactory(); + DefaultFormatterFactory factory = (DefaultFormatterFactory) textField.getFormatterFactory(); NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter(); formatter.setAllowsInvalid(false); @@ -91,7 +110,7 @@ public class JFormSliderPane extends JPanel { initShowValButton(); initUIRadioButton(); initPane(); - JPanel panel = new JPanel(new FlowLayout(1, 0, 0)); + JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); panel.add(downButton); panel.add(slider); panel.add(upButton); @@ -100,17 +119,13 @@ public class JFormSliderPane extends JPanel { this.add(panel, BorderLayout.NORTH); } - public static final JFormSliderPane getInstance() { -// if (THIS == null) { -// THIS = new JSliderPane(); -// } - THIS = new JFormSliderPane(); - return THIS; + public static JFormSliderPane getInstance() { + return new JFormSliderPane(); } private void initSlider() { - slider = new UISlider(0, HUNDRED, HALF_HUNDRED){ - public Point getToolTipLocation(MouseEvent event){ + slider = new UISlider(0, HUNDRED, HALF_HUNDRED) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -123,8 +138,8 @@ public class JFormSliderPane extends JPanel { } private void initShowValSpinner() { - showValSpinner = new UIBasicSpinner(new SpinnerNumberModel(HUNDRED, 0, FOUR_HUNDRED, 1)){ - public Point getToolTipLocation(MouseEvent event){ + showValSpinner = new UIBasicSpinner(new SpinnerNumberModel(HUNDRED, 0, FOUR_HUNDRED, 1)) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -134,16 +149,16 @@ public class JFormSliderPane extends JPanel { } private void initDownUpButton() { - downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png")){ - public Point getToolTipLocation(MouseEvent event){ + downButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverDown20.png")) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; downButton.setOpaque(false); downButton.setBorderPainted(false); downButton.setToolTipText(Inter.getLocText("FR-Designer_Scale_Down")); - upButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png")){ - public Point getToolTipLocation(MouseEvent event){ + upButton = new UIButton(BaseUtils.readIcon("com/fr/design/images/data/source/normalUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png"), BaseUtils.readIcon("com/fr/design/images/data/source/hoverUp20.png")) { + public Point getToolTipLocation(MouseEvent event) { return new Point(event.getX(), event.getY() - TOOLTIP_Y); } }; @@ -164,10 +179,11 @@ public class JFormSliderPane extends JPanel { showValButton.addActionListener(showValButtonActionListener); showValButton.setToolTipText(Inter.getLocText("FR-Designer_Scale_Grade")); } + private void initUIRadioButton() { twoHundredButton = new UIRadioButton("200%"); oneHundredButton = new UIRadioButton("100%"); - SevenFiveButton = new UIRadioButton("75%"); + sevenFiveButton = new UIRadioButton("75%"); fiveTenButton = new UIRadioButton("50%"); twoFiveButton = new UIRadioButton("25%"); selfAdaptButton = new UIRadioButton(Inter.getLocText("FR-Designer_Scale_selfAdaptButton")); @@ -176,7 +192,7 @@ public class JFormSliderPane extends JPanel { customButton.setFont(new Font("SimSun", Font.PLAIN, FONT_SIZE)); twoHundredButton.addItemListener(radioButtonItemListener); oneHundredButton.addItemListener(radioButtonItemListener); - SevenFiveButton.addItemListener(radioButtonItemListener); + sevenFiveButton.addItemListener(radioButtonItemListener); fiveTenButton.addItemListener(radioButtonItemListener); twoFiveButton.addItemListener(radioButtonItemListener); customButton.addItemListener(new ItemListener() { @@ -194,7 +210,7 @@ public class JFormSliderPane extends JPanel { ButtonGroup bg = new ButtonGroup();// 初始化按钮组 bg.add(twoHundredButton);// 加入按钮组 bg.add(oneHundredButton); - bg.add(SevenFiveButton); + bg.add(sevenFiveButton); bg.add(fiveTenButton); bg.add(twoFiveButton); bg.add(selfAdaptButton); @@ -217,7 +233,7 @@ public class JFormSliderPane extends JPanel { septPane.setBackground(BACK_COLOR); twoHundredButton.setBackground(BACK_COLOR); oneHundredButton.setBackground(BACK_COLOR); - SevenFiveButton.setBackground(BACK_COLOR); + sevenFiveButton.setBackground(BACK_COLOR); fiveTenButton.setBackground(BACK_COLOR); twoFiveButton.setBackground(BACK_COLOR); // selfAdaptButton.setBackground(BACK_COLOR); @@ -227,7 +243,7 @@ public class JFormSliderPane extends JPanel { new Component[]{septPane, null}, new Component[]{twoHundredButton, null}, new Component[]{oneHundredButton, null}, - new Component[]{SevenFiveButton, null}, + new Component[]{sevenFiveButton, null}, new Component[]{fiveTenButton, null}, new Component[]{twoFiveButton, null}, new Component[]{customButton, createSpinnerPanel()} @@ -247,14 +263,14 @@ public class JFormSliderPane extends JPanel { return spinnerPanel; } - ActionListener showValButtonActionListener = new ActionListener() { + private ActionListener showValButtonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { popupDialog(); } }; - ChangeListener showValSpinnerChangeListener = new ChangeListener() { + private ChangeListener showValSpinnerChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { int val = (int) ((UIBasicSpinner) e.getSource()).getValue(); @@ -277,7 +293,7 @@ public class JFormSliderPane extends JPanel { //定义一个监听器,用于监听所有滑动条 - ChangeListener listener = new ChangeListener() { + private ChangeListener listener = new ChangeListener() { public void stateChanged(ChangeEvent event) { //取出滑动条的值,并在文本中显示出来 if (!isButtonOrIsTxt) { @@ -296,7 +312,7 @@ public class JFormSliderPane extends JPanel { } }; - ItemListener radioButtonItemListener = new ItemListener() { + private ItemListener radioButtonItemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { JRadioButton temp = (JRadioButton) e.getSource(); @@ -312,7 +328,7 @@ public class JFormSliderPane extends JPanel { slider.setValue((int) (showValue + TWO_HUNDRED) / SIX); } else if (showValue < HUNDRED) { slider.setValue((int) ((showValue - TEN) / ONEPOINTEIGHT)); - } else if (showValue == HUNDRED) { + } else { slider.setValue(HALF_HUNDRED); } } @@ -336,7 +352,7 @@ public class JFormSliderPane extends JPanel { return b1.divide(b2, scale).doubleValue(); } - ActionListener buttonActionListener = new ActionListener() { + private ActionListener buttonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showValue = (int) showValSpinner.getValue(); diff --git a/designer-base/src/com/fr/design/mainframe/JSliderPane.java b/designer-base/src/com/fr/design/mainframe/JSliderPane.java index c2f4da0e7..83edb560a 100644 --- a/designer-base/src/com/fr/design/mainframe/JSliderPane.java +++ b/designer-base/src/com/fr/design/mainframe/JSliderPane.java @@ -15,13 +15,34 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JFormattedTextField; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButton; +import javax.swing.JSeparator; +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.basic.BasicSliderUI; import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.NumberFormatter; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Image; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -59,7 +80,6 @@ public class JSliderPane extends JPanel { private static final Color BACK_COLOR = new Color(245, 245, 247); public int showValue = 100; public double resolutionTimes = 1.0; - private static JSliderPane THIS; private UITextField showVal; private JSpinner showValSpinner; private UISlider slider; @@ -70,12 +90,14 @@ public class JSliderPane extends JPanel { private UISliderButton showValButton; private UIRadioButton twoHundredButton; private UIRadioButton oneHundredButton; - private UIRadioButton SevenFiveButton; + private UIRadioButton sevenFiveButton; private UIRadioButton fiveTenButton; private UIRadioButton twoFiveButton; private UIRadioButton selfAdaptButton; private UIRadioButton customButton; - //拖动条处理和button、直接输入不一样 + /** + * 拖动条处理和button、直接输入不一样 + */ private boolean isButtonOrIsTxt = true; private PopupPane dialog; private int upButtonX; @@ -91,7 +113,7 @@ public class JSliderPane extends JPanel { showValSpinner.setEditor(editor); JFormattedTextField textField = ((JSpinner.NumberEditor) showValSpinner.getEditor()).getTextField(); textField.setEditable(true); - DefaultFormatterFactory factory = (DefaultFormatterFactory) textField .getFormatterFactory(); + DefaultFormatterFactory factory = (DefaultFormatterFactory) textField.getFormatterFactory(); NumberFormatter formatter = (NumberFormatter) factory.getDefaultFormatter(); formatter.setAllowsInvalid(false); @@ -99,7 +121,7 @@ public class JSliderPane extends JPanel { initShowValButton(); initUIRadioButton(); initPane(); - JPanel panel = new JPanel(new FlowLayout(1, 0, 0)); + JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); panel.add(downButton); panel.add(slider); panel.add(upButton); @@ -109,12 +131,8 @@ public class JSliderPane extends JPanel { } - public static final JSliderPane getInstance() { -// if (THIS == null) { -// THIS = new JSliderPane(); -// } - THIS = new JSliderPane(); - return THIS; + public static JSliderPane getInstance() { + return new JSliderPane(); } private void initSlider() { @@ -178,7 +196,7 @@ public class JSliderPane extends JPanel { private void initUIRadioButton() { twoHundredButton = new UIRadioButton("200%"); oneHundredButton = new UIRadioButton("100%"); - SevenFiveButton = new UIRadioButton("75%"); + sevenFiveButton = new UIRadioButton("75%"); fiveTenButton = new UIRadioButton("50%"); twoFiveButton = new UIRadioButton("25%"); selfAdaptButton = new UIRadioButton(Inter.getLocText("FR-Designer_Scale_selfAdaptButton")); @@ -187,7 +205,7 @@ public class JSliderPane extends JPanel { customButton.setFont(new Font("SimSun", Font.PLAIN, FONT_SIZE)); twoHundredButton.addItemListener(radioButtonItemListener); oneHundredButton.addItemListener(radioButtonItemListener); - SevenFiveButton.addItemListener(radioButtonItemListener); + sevenFiveButton.addItemListener(radioButtonItemListener); fiveTenButton.addItemListener(radioButtonItemListener); twoFiveButton.addItemListener(radioButtonItemListener); customButton.addItemListener(new ItemListener() { @@ -205,7 +223,7 @@ public class JSliderPane extends JPanel { ButtonGroup bg = new ButtonGroup();// 初始化按钮组 bg.add(twoHundredButton);// 加入按钮组 bg.add(oneHundredButton); - bg.add(SevenFiveButton); + bg.add(sevenFiveButton); bg.add(fiveTenButton); bg.add(twoFiveButton); bg.add(selfAdaptButton); @@ -228,7 +246,7 @@ public class JSliderPane extends JPanel { septPane.setBackground(BACK_COLOR); twoHundredButton.setBackground(BACK_COLOR); oneHundredButton.setBackground(BACK_COLOR); - SevenFiveButton.setBackground(BACK_COLOR); + sevenFiveButton.setBackground(BACK_COLOR); fiveTenButton.setBackground(BACK_COLOR); twoFiveButton.setBackground(BACK_COLOR); selfAdaptButton.setBackground(BACK_COLOR); @@ -238,7 +256,7 @@ public class JSliderPane extends JPanel { new Component[]{septPane, null}, new Component[]{twoHundredButton, null}, new Component[]{oneHundredButton, null}, - new Component[]{SevenFiveButton, null}, + new Component[]{sevenFiveButton, null}, new Component[]{fiveTenButton, null}, new Component[]{twoFiveButton, null}, new Component[]{selfAdaptButton, null}, @@ -259,14 +277,14 @@ public class JSliderPane extends JPanel { return spinnerPanel; } - ActionListener showValButtonActionListener = new ActionListener() { + private ActionListener showValButtonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { popupDialog(); } }; - ChangeListener showValSpinnerChangeListener = new ChangeListener() { + private ChangeListener showValSpinnerChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { int val = (int) ((UIBasicSpinner) e.getSource()).getValue(); @@ -289,7 +307,7 @@ public class JSliderPane extends JPanel { //定义一个监听器,用于监听所有滑动条 - ChangeListener listener = new ChangeListener() { + private ChangeListener listener = new ChangeListener() { public void stateChanged(ChangeEvent event) { //取出滑动条的值,并在文本中显示出来 if (!isButtonOrIsTxt) { @@ -309,7 +327,7 @@ public class JSliderPane extends JPanel { } }; - ItemListener radioButtonItemListener = new ItemListener() { + private ItemListener radioButtonItemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { JRadioButton temp = (JRadioButton) e.getSource(); @@ -325,7 +343,7 @@ public class JSliderPane extends JPanel { slider.setValue((int) (showValue + TWO_HUNDRED) / SIX); } else if (showValue < HUNDRED) { slider.setValue((int) ((showValue - TEN) / ONEPOINTEIGHT)); - } else if (showValue == HUNDRED) { + } else { slider.setValue(HALF_HUNDRED); } } @@ -343,7 +361,7 @@ public class JSliderPane extends JPanel { return this.showValue; } - public void reset(){ + public void reset() { this.showValSpinner.setValue(HUNDRED); } @@ -353,7 +371,7 @@ public class JSliderPane extends JPanel { return b1.divide(b2, scale).doubleValue(); } - ActionListener buttonActionListener = new ActionListener() { + private ActionListener buttonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { showValue = (int) showValSpinner.getValue(); @@ -390,7 +408,7 @@ public class JSliderPane extends JPanel { } else if (value < HALF_HUNDRED) { times = (int) Math.round(ONEPOINTEIGHT * value + TEN); } else { - times = (int) (SIX * value - TWO_HUNDRED); + times = SIX * value - TWO_HUNDRED; } } @@ -448,11 +466,9 @@ class JSliderPaneUI extends BasicSliderUI { super(b); } - /** */ /** * 绘制指示物 */ - public void paintThumb(Graphics g) { Rectangle knobBounds = thumbRect; Graphics2D g2d = (Graphics2D) g; @@ -460,7 +476,6 @@ class JSliderPaneUI extends BasicSliderUI { g2d.dispose(); } - /** */ /** * 绘制刻度轨迹 */ diff --git a/designer-base/src/com/fr/design/selection/QuickEditor.java b/designer-base/src/com/fr/design/selection/QuickEditor.java index 5220bc719..de19d64f8 100644 --- a/designer-base/src/com/fr/design/selection/QuickEditor.java +++ b/designer-base/src/com/fr/design/selection/QuickEditor.java @@ -2,7 +2,7 @@ package com.fr.design.selection; import com.fr.design.designer.TargetComponent; -import javax.swing.*; +import javax.swing.JComponent; /** * 快速编辑区域 @@ -39,11 +39,15 @@ public abstract class QuickEditor extends JComponent tc.fireTargetModified(); } + /** + * 刷新面板 + */ protected abstract void refresh(); /** - * for 关闭时候释放 + * 关闭模板时释放模板对象 + * 所有持有tc的对象也必须置空或者丢弃对于tc的引用 */ public void release() { tc = null; @@ -53,7 +57,6 @@ public abstract class QuickEditor extends JComponent @Override protected void refresh() { - } }; diff --git a/designer-form/src/com/fr/design/mainframe/WidgetToolBarPane.java b/designer-form/src/com/fr/design/mainframe/WidgetToolBarPane.java index 80b7abfe4..5599bfe16 100644 --- a/designer-form/src/com/fr/design/mainframe/WidgetToolBarPane.java +++ b/designer-form/src/com/fr/design/mainframe/WidgetToolBarPane.java @@ -10,8 +10,20 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.module.DesignModuleFactory; import com.fr.general.Inter; -import javax.swing.*; -import java.awt.*; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import java.awt.BasicStroke; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.LayoutManager; +import java.awt.Stroke; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.ImageObserver; @@ -47,7 +59,7 @@ public class WidgetToolBarPane extends BasicPane implements DesignToolbarProvide } public void refreshToolbar() { - reset(); + singleton.reset(); } public static void refresh() { diff --git a/designer-realize/src/com/fr/design/dscolumn/DSColumnBasicPane.java b/designer-realize/src/com/fr/design/dscolumn/DSColumnBasicPane.java index e5b3b7f87..43cae70dc 100644 --- a/designer-realize/src/com/fr/design/dscolumn/DSColumnBasicPane.java +++ b/designer-realize/src/com/fr/design/dscolumn/DSColumnBasicPane.java @@ -14,8 +14,9 @@ import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.CellExpandAttr; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,6 +28,29 @@ public class DSColumnBasicPane extends BasicPane { private ExpandDirectionPane expandDirectionPane; private CellElement cellElement; + private ActionListener summaryDirectionActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + if (expandDirectionPane != null) { + expandDirectionPane.setNoneRadioButtonSelected(true); + } + } + }; + private ActionListener othergroupDirectionActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + if (expandDirectionPane != null) { + expandDirectionPane.setNoneRadioButtonSelected(false); + } + } + }; + private ActionListener sdcupdateActionlistener = new ActionListener() { + + public void actionPerformed(ActionEvent evt) { + selectDataColumnPane.update(cellElement); + } + }; + public DSColumnBasicPane() { this(DSColumnPane.SETTING_ALL); } @@ -78,7 +102,7 @@ public class DSColumnBasicPane extends BasicPane { this.add(TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize), BorderLayout.CENTER); - this.resultSetGroupPane.addListeners(summary_direction_ActionListener, otherGroup_direction_ActionListener, sdcUpdate_ActionListener); + this.resultSetGroupPane.addListeners(summaryDirectionActionlistener, othergroupDirectionActionlistener, sdcupdateActionlistener); } @Override @@ -93,7 +117,7 @@ public class DSColumnBasicPane extends BasicPane { this.cellElement = cellElement; - selectDataColumnPane.populate(source, cellElement); + selectDataColumnPane.populate(source, cellElement, null); CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); if (conditionParentPane != null) { @@ -134,29 +158,6 @@ public class DSColumnBasicPane extends BasicPane { resultSetGroupPane.update(); } - ActionListener summary_direction_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - if (expandDirectionPane != null) { - expandDirectionPane.setNoneRadioButtonSelected(true); - } - } - }; - ActionListener otherGroup_direction_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - if (expandDirectionPane != null) { - expandDirectionPane.setNoneRadioButtonSelected(false); - } - } - }; - ActionListener sdcUpdate_ActionListener = new ActionListener() { - - public void actionPerformed(ActionEvent evt) { - selectDataColumnPane.update(cellElement); - } - }; - public void putElementcase(ElementCasePane t) { if (conditionParentPane != null) { conditionParentPane.putElementcase(t); diff --git a/designer-realize/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java b/designer-realize/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java index e2e21b8e4..2da652444 100644 --- a/designer-realize/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java +++ b/designer-realize/src/com/fr/design/dscolumn/SelectedConfirmedDataColumnPane.java @@ -6,7 +6,7 @@ import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper; import com.fr.main.impl.WorkBook; import com.fr.report.cell.TemplateCellElement; -import java.awt.*; +import java.awt.Dimension; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Iterator; @@ -17,6 +17,7 @@ public class SelectedConfirmedDataColumnPane extends SelectedDataColumnPane { super(false); } + @Override protected void initTableNameComboBox() { tableNameComboBox = new TableDataComboBox(new WorkBook()); tableNameComboBox.addItemListener(new ItemListener() { @@ -32,14 +33,14 @@ public class SelectedConfirmedDataColumnPane extends SelectedDataColumnPane { tableNameComboBox.refresh(source); tableNameComboBox.setEditable(false); tableNameComboBox.setEnabled(false); - super.populate(source, cell); + super.populate(source, cell, null); try { Iterator it = source.getTableDataNameIterator(); String name = (String) it.next(); TemplateTableDataWrapper wrapper = new TemplateTableDataWrapper(source.getTableData(name), name); tableNameComboBox.setSelectedItem(wrapper); tableNameComboBox.getModel().setSelectedItem(wrapper); - } catch (Exception e) { + } catch (Exception ignored) { } } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/dscolumn/SelectedDataColumnPane.java b/designer-realize/src/com/fr/design/dscolumn/SelectedDataColumnPane.java index 362c28166..aec849e41 100644 --- a/designer-realize/src/com/fr/design/dscolumn/SelectedDataColumnPane.java +++ b/designer-realize/src/com/fr/design/dscolumn/SelectedDataColumnPane.java @@ -26,14 +26,18 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; /** @@ -41,31 +45,87 @@ import java.util.regex.Pattern; * * @author yaoh.wu * @version 2017年8月3日 - * 复用对话框代码,保留对话框原始布局 + * 复用对话框代码,保留对话框原始布局 * @since 8.0 */ public class SelectedDataColumnPane extends BasicPane { + + /** + * 参数编辑器面板 + */ private UITableEditorPane editorPane; + /** + * 参数 + */ private Parameter[] ps; - + /** + * 数据集下拉框 + */ TableDataComboBox tableNameComboBox; + /** + * 动态参数注入按钮 + */ + private UIButton paramButton; + /** + * 数据列下拉框 + */ LazyComboBox columnNameComboBox; + + /** + * 数据集下拉框和数据列下拉框监听器 + */ private ItemListener itemListener; - private UIButton paramButton; - public SelectedDataColumnPane() { - this(true, false, null, null); + /** + * 当前编辑的模板面板,用于触发保存操作 + */ + private ElementCasePane casePane; + /** + * 保存当前选中的 CE + */ + private CellElement cellElement; + + private static final Pattern COLUMN_NAME_PATTERN = Pattern.compile("[^\\d]"); + + /** + * 数据集下拉框变动后修改数据列下拉框加载状态的监听器 + */ + private ItemListener isNeedReloadListener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + columnNameComboBox.setLoaded(false); + } + } + }; + + /** + * 创建横向布局附带显示动态参数注入按钮的数据集数据列选择面板 + */ + SelectedDataColumnPane() { + this(true, false); } - public SelectedDataColumnPane(boolean showParameterButton) { - this(showParameterButton, false, null, null); + /** + * 创建横向布局的数据集数据列选择面板 + * + * @param showParameterButton 是否显示动态参数注入按钮 + */ + SelectedDataColumnPane(boolean showParameterButton) { + this(showParameterButton, false); } - public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout, ElementCasePane casePane, TemplateCellElement cellElement) { + /** + * 创建数据集数据列选择面板 + * + * @param showParameterButton 是否显示动态参数注入按钮 + * @param verticalLayout 是否是垂直布局 + */ + public SelectedDataColumnPane(boolean showParameterButton, boolean verticalLayout) { if (verticalLayout) { - initComponentVerticalLayout(casePane, cellElement); + initComponentVerticalLayout(); } else { initComponent(showParameterButton); } @@ -79,7 +139,7 @@ public class SelectedDataColumnPane extends BasicPane { public void initComponent(boolean showParameterButton) { initTableNameComboBox(); if (showParameterButton) { - initWithParameterButton(); + initParameterButton(); } columnNameComboBox = new LazyComboBox() { @@ -119,9 +179,9 @@ public class SelectedDataColumnPane extends BasicPane { /** * 初始化竖直布局的组件 */ - public void initComponentVerticalLayout(ElementCasePane casePane, TemplateCellElement cellElement) { + private void initComponentVerticalLayout() { initTableNameComboBox(); - initWithParameterButton(casePane, cellElement); + initVerticalParameterButton(); columnNameComboBox = new LazyComboBox() { @Override public Object[] load() { @@ -149,13 +209,22 @@ public class SelectedDataColumnPane extends BasicPane { } - public void populate(TableDataSource source, TemplateCellElement cellElement) { + /** + * 更新面板数据 + * + * @param source 数据源 + * @param cellElement 单元格 + * @param casePane 当前编辑的模板面板 + */ + public void populate(TableDataSource source, TemplateCellElement cellElement, ElementCasePane casePane) { + tableNameComboBox.refresh(source); + this.casePane = casePane; if (cellElement == null) { return; } - if (itemListener != null) { - removeListener(itemListener); - } + this.cellElement = cellElement; + removeListener(); + Object value = cellElement.getValue(); if (!(value instanceof DSColumn)) { return; @@ -166,9 +235,14 @@ public class SelectedDataColumnPane extends BasicPane { columnNameComboBox.setSelectedItem(TableDataColumn.getColumnName(dsColumn.getColumn())); ps = dsColumn.getParameters(); - addListener(itemListener); + addListener(); } + /** + * 保存数据到单元格对象中 + * + * @param cellElement 单元格 + */ public void update(CellElement cellElement) { if (cellElement == null) { return; @@ -177,7 +251,7 @@ public class SelectedDataColumnPane extends BasicPane { if (this.tableNameComboBox.getSelectedItem() == null && this.columnNameComboBox.getSelectedItem() == null) { return; } - DSColumn dsColumn = null; + DSColumn dsColumn; if (value == null || !(value instanceof DSColumn)) { dsColumn = new DSColumn(); cellElement.setValue(dsColumn); @@ -185,18 +259,27 @@ public class SelectedDataColumnPane extends BasicPane { dsColumn = (DSColumn) cellElement.getValue(); SimpleDSColumn simpleDSColumn = updateColumnPane(); - dsColumn.setDSName(simpleDSColumn.getDsName()); + dsColumn.setDSName(Objects.requireNonNull(simpleDSColumn).getDsName()); dsColumn.setColumn(simpleDSColumn.getColumn()); dsColumn.setParameters((ps != null && ps.length > 0) ? ps : null); } + /** + * 释放模板对象 + */ + public void release() { + this.cellElement = null; + this.casePane = null; + this.tableNameComboBox.setModel(new DefaultComboBoxModel()); + } + /** * 更新面板 * * @return 更新后的值 */ - public SimpleDSColumn updateColumnPane() { + private SimpleDSColumn updateColumnPane() { SimpleDSColumn dsColumn = new SimpleDSColumn(); TableDataWrapper tableDataWrappe = this.tableNameComboBox.getSelectedItem(); if (tableDataWrappe == null) { @@ -206,9 +289,8 @@ public class SelectedDataColumnPane extends BasicPane { TableDataColumn column; String columnExp = (String) this.columnNameComboBox.getSelectedItem(); if (isColumnName(columnExp)) { - String number = columnExp.substring(1); - Pattern pattern = Pattern.compile("[^\\d]"); - if (pattern.matcher(number).find()) { + String number = Objects.requireNonNull(columnExp).substring(1); + if (COLUMN_NAME_PATTERN.matcher(number).find()) { column = TableDataColumn.createColumn(columnExp); } else { int serialNumber = Integer.parseInt(columnExp.substring(1)); @@ -221,36 +303,31 @@ public class SelectedDataColumnPane extends BasicPane { return dsColumn; } + public void setListener(ItemListener i) { + this.itemListener = i; + } + /** * 添加监听事件 - * - * @param i 监听事件 */ - public void addListener(ItemListener i) { - itemListener = i; - tableNameComboBox.addItemListener(i); - columnNameComboBox.addItemListener(i); + private void addListener() { + tableNameComboBox.addItemListener(this.itemListener); + columnNameComboBox.addItemListener(this.itemListener); + tableNameComboBox.addItemListener(this.isNeedReloadListener); } /** * 移除监听事件 - * - * @param i 监听事件 */ - public void removeListener(ItemListener i) { - tableNameComboBox.removeItemListener(i); - columnNameComboBox.removeItemListener(i); + private void removeListener() { + tableNameComboBox.removeItemListener(this.itemListener); + columnNameComboBox.removeItemListener(this.itemListener); + tableNameComboBox.removeItemListener(this.isNeedReloadListener); } protected void initTableNameComboBox() { tableNameComboBox = new TableDataComboBox(DesignTableDataManager.getEditingTableDataSource()); - tableNameComboBox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - columnNameComboBox.setLoaded(false); - } - }); tableNameComboBox.setPreferredSize(new Dimension(100, 20)); } @@ -260,8 +337,8 @@ public class SelectedDataColumnPane extends BasicPane { } - private void initWithParameterButton() { - editorPane = new UITableEditorPane(new ParameterTableModel()); + private void initParameterButton() { + editorPane = new UITableEditorPane<>(new ParameterTableModel()); paramButton = new UIButton(Inter.getLocText("TableData_Dynamic_Parameter_Setting")); paramButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -279,18 +356,18 @@ public class SelectedDataColumnPane extends BasicPane { }); } - private void initWithParameterButton(final ElementCasePane casePane, final TemplateCellElement cellElement) { - final SelectedDataColumnPane that = this; - editorPane = new UITableEditorPane(new ParameterTableModel()); + private void initVerticalParameterButton() { + editorPane = new UITableEditorPane<>(new ParameterTableModel()); paramButton = new UIButton(Inter.getLocText("FR-Designer-Basic_Dynamic_Parameter_Injection")); paramButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { BasicDialog paramDialog = editorPane.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { List parameterList = editorPane.update(); ps = parameterList.toArray(new Parameter[parameterList.size()]); - that.update(cellElement); + update(SelectedDataColumnPane.this.cellElement); casePane.fireTargetModified(); } }); @@ -310,6 +387,6 @@ public class SelectedDataColumnPane extends BasicPane { if (this.tableNameComboBox.getSelectedItem() != null) { return this.tableNameComboBox.getSelectedItem().calculateColumnNameList(); } - return new ArrayList(); + return new ArrayList<>(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java index ad2c91eb0..da50e13d9 100644 --- a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java @@ -524,6 +524,8 @@ public abstract class ElementCasePane extends Tar * 因为这边判断selection是一个selection,所以不会触发fireSelectionChanged */ public void setSelection(Selection selection) { + //旧选中内容编辑器释放模板对象 + this.getCurrentEditor().release(); if (!ComparatorUtils.equals(this.selection, selection) || !ComparatorUtils.equals(EastRegionContainerPane.getInstance().getCellAttrPane(), CellElementPropertyPane.getInstance())) { this.selection = selection; diff --git a/designer-realize/src/com/fr/design/mainframe/ReportComponentComposite.java b/designer-realize/src/com/fr/design/mainframe/ReportComponentComposite.java index 1893301f2..661fb0d69 100644 --- a/designer-realize/src/com/fr/design/mainframe/ReportComponentComposite.java +++ b/designer-realize/src/com/fr/design/mainframe/ReportComponentComposite.java @@ -127,9 +127,8 @@ public class ReportComponentComposite extends JComponent { templateStateList.add(null); } centerCardPane.editingComponet.setSelection(centerCardPane.editingComponet.getDefaultSelectElement()); - if (jSliderContainer != null){ - jSliderContainer.reset(); - } + jSliderContainer=JSliderPane.getInstance(); + jSliderContainer.reset(); } if (centerCardPane.editingComponet.elementCasePane == null) { diff --git a/designer-realize/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java b/designer-realize/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java index a56d251a7..8a3b2ded4 100644 --- a/designer-realize/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java +++ b/designer-realize/src/com/fr/design/mainframe/cell/AbstractDSCellEditorPane.java @@ -120,4 +120,9 @@ public abstract class AbstractDSCellEditorPane extends JPanel { scrollBar.setBlockIncrement(SCROLLBAR_WIDTH + CONTENT_PANE_WIDTH_GAP); scrollBar.setBorder(BorderFactory.createMatteBorder(0, CONTENT_PANE_WIDTH_GAP, 0, 0, this.getBackground())); } + + /** + * 释放tc + */ + protected abstract void release(); } diff --git a/designer-realize/src/com/fr/design/module/DesignerModule.java b/designer-realize/src/com/fr/design/module/DesignerModule.java index d2697fa69..0427eee31 100644 --- a/designer-realize/src/com/fr/design/module/DesignerModule.java +++ b/designer-realize/src/com/fr/design/module/DesignerModule.java @@ -150,23 +150,23 @@ public class DesignerModule extends DesignModule { */ private void registerCellEditor() { - ActionFactory.registerCellEditorClass(String.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditorClass(Number.class, CellStringQuickEditor.class); - ActionFactory.registerCellEditorClass(BaseFormula.class, CellFormulaQuickEditor.class); - ActionFactory.registerCellEditorClass(SubReport.class, CellSubReportEditor.class); - ActionFactory.registerCellEditorClass(RichText.class, CellRichTextEditor.class); - ActionFactory.registerCellEditorClass(DSColumn.class, CellDSColumnEditor.class); - ActionFactory.registerCellEditorClass(Image.class, CellImageQuickEditor.class); - ActionFactory.registerCellEditorClass(BiasTextPainter.class, CellBiasTextPainterEditor.class); - ActionFactory.registerCellEditorClass(BufferedImage.class, CellImageQuickEditor.class); + ActionFactory.registerCellEditor(String.class, new CellStringQuickEditor()); + ActionFactory.registerCellEditor(Number.class, new CellStringQuickEditor()); + ActionFactory.registerCellEditor(BaseFormula.class, new CellFormulaQuickEditor()); + ActionFactory.registerCellEditor(SubReport.class, new CellSubReportEditor()); + ActionFactory.registerCellEditor(RichText.class, new CellRichTextEditor()); + ActionFactory.registerCellEditor(DSColumn.class, new CellDSColumnEditor()); + ActionFactory.registerCellEditor(Image.class, new CellImageQuickEditor()); + ActionFactory.registerCellEditor(BiasTextPainter.class, new CellBiasTextPainterEditor()); + ActionFactory.registerCellEditor(BufferedImage.class, new CellImageQuickEditor()); ActionFactory.registerCellEditor(CellImagePainter.class, new CellImageQuickEditor()); - + //todo 图表编辑器populate没能实现刷新面板显示 ActionFactory.registerChartCellEditorInEditor(BasicChartQuickEditor.class); Set providers = ExtraDesignClassManager.getInstance().getArray(ElementUIProvider.MARK_STRING); for (ElementUIProvider provider : providers) { try { - ActionFactory.registerCellEditorClass(provider.targetObjectClass(), provider.quickEditor()); + ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor().newInstance()); } catch (Exception e) { FRLogger.getLogger().error(e.getMessage(), e); } @@ -185,12 +185,12 @@ public class DesignerModule extends DesignModule { */ private void registerFloatEditor() { - ActionFactory.registerFloatEditorClass(String.class, FloatStringQuickEditor.class); - ActionFactory.registerFloatEditorClass(Formula.class, FloatStringQuickEditor.class); - ActionFactory.registerFloatEditorClass(Image.class, FloatImageQuickEditor.class); - ActionFactory.registerFloatEditorClass(BufferedImage.class, FloatImageQuickEditor.class); + ActionFactory.registerFloatEditor(String.class, new FloatStringQuickEditor()); + ActionFactory.registerFloatEditor(Formula.class, new FloatStringQuickEditor()); + ActionFactory.registerFloatEditor(Image.class, new FloatImageQuickEditor()); + ActionFactory.registerFloatEditor(BufferedImage.class, new FloatImageQuickEditor()); ActionFactory.registerFloatEditor(CellImagePainter.class, new FloatImageQuickEditor()); - + //todo 图表编辑器populate没能实现刷新面板显示 ActionFactory.registerChartFloatEditorInEditor(FloatChartQuickEditor.class); } diff --git a/designer-realize/src/com/fr/grid/selection/CellSelection.java b/designer-realize/src/com/fr/grid/selection/CellSelection.java index 4cf1da661..b0e905672 100644 --- a/designer-realize/src/com/fr/grid/selection/CellSelection.java +++ b/designer-realize/src/com/fr/grid/selection/CellSelection.java @@ -49,8 +49,9 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.unit.FU; -import javax.swing.*; -import java.awt.*; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import java.awt.Rectangle; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -114,6 +115,7 @@ public class CellSelection extends Selection { /** * 增加选中的区域 + * * @param cellRectangle 区域 */ public void addCellRectangle(Rectangle cellRectangle) { @@ -164,6 +166,7 @@ public class CellSelection extends Selection { /** * 清除区域块 + * * @param i 区域块 */ public void clearCellRectangles(int i) { @@ -172,8 +175,9 @@ public class CellSelection extends Selection { /** * 包含单元格 - * @param column 列 - * @param row 行 + * + * @param column 列 + * @param row 行 * @return 若不包含返回-1 */ public int containsCell(int column, int row) { @@ -205,6 +209,7 @@ public class CellSelection extends Selection { /** * 转换成矩形 + * * @return 矩形 */ public Rectangle toRectangle() { @@ -213,6 +218,7 @@ public class CellSelection extends Selection { /** * 是否选择一个单元格 + * * @param ePane 区域 * @return 是则返回rue */ @@ -239,8 +245,9 @@ public class CellSelection extends Selection { /** * 作为可传输的 + * * @param transferable 传输介质 - * @param ePane 区域 + * @param ePane 区域 */ public void asTransferable(ElementsTransferable transferable, ElementCasePane ePane) { java.util.List list = new java.util.ArrayList(); @@ -251,12 +258,12 @@ public class CellSelection extends Selection { TemplateCellElement cellElement = (TemplateCellElement) cells.next(); list.add((TemplateCellElement) cellElement.deriveCellElement(cellElement.getColumn() - column, cellElement.getRow() - row)); } - FU [] columnWidth = new FU[columnSpan]; - FU [] rowHeight = new FU[rowSpan]; - for (int i = 0; i < columnSpan; i++){ + FU[] columnWidth = new FU[columnSpan]; + FU[] rowHeight = new FU[rowSpan]; + for (int i = 0; i < columnSpan; i++) { columnWidth[i] = ec.getColumnWidth(this.column + i); } - for (int j = 0; j < rowSpan; j++){ + for (int j = 0; j < rowSpan; j++) { rowHeight[j] = ec.getRowHeight(this.row + j); } transferable.addObject(new CellElementsClip(this.columnSpan, this.rowSpan, columnWidth, rowHeight, list.toArray(new TemplateCellElement[list.size()]))); @@ -264,9 +271,10 @@ public class CellSelection extends Selection { /** * 黏贴单元格 + * * @param ceClip 单元格 - * @param ePane 区域 - * @return 成功返回true + * @param ePane 区域 + * @return 成功返回true */ @Override public boolean pasteCellElementsClip(CellElementsClip ceClip, ElementCasePane ePane) { @@ -281,8 +289,9 @@ public class CellSelection extends Selection { /** * 黏贴字符串 - * @param str 字符串 - * @param ePane 区域 + * + * @param str 字符串 + * @param ePane 区域 * @return 成功返回true */ @Override @@ -329,7 +338,8 @@ public class CellSelection extends Selection { /** * 黏贴其他 - * @param ob 要黏贴的东西 + * + * @param ob 要黏贴的东西 * @param ePane 区域 * @return 成功返回true */ @@ -352,6 +362,7 @@ public class CellSelection extends Selection { /** * 是否能合并单元格 + * * @param ePane 区域 * @return 是则返回true */ @@ -363,6 +374,7 @@ public class CellSelection extends Selection { /** * 合并单元格 + * * @param ePane 区域 * @return 成功返回true */ @@ -371,7 +383,7 @@ public class CellSelection extends Selection { TemplateElementCase ec = ePane.getEditingElementCase(); Iterator cells = ec.intersect(column, row, columnSpan, rowSpan); - if (cells.hasNext() && cells.hasNext()) { // alex:有两个以上的格子在这个区域内 + if (cells.hasNext()) { // alex:有两个以上的格子在这个区域内 int returnValue = JOptionPane.showConfirmDialog(SwingUtilities.getWindowAncestor(ePane), Inter.getLocText("Des-Merger_Cell"), Inter.getLocText("Utils-Merge_Cell"), JOptionPane.OK_CANCEL_OPTION); if (returnValue != JOptionPane.OK_OPTION) { @@ -386,6 +398,7 @@ public class CellSelection extends Selection { /** * 是否撤销合并单元格 + * * @param ePane 区域 * @return 是则返回true */ @@ -407,6 +420,7 @@ public class CellSelection extends Selection { /** * 撤销合并单元格 + * * @param ePane 区域 * @return 成功返回true */ @@ -443,6 +457,7 @@ public class CellSelection extends Selection { /** * 创建弹出菜单 + * * @param ePane 区域 * @return 菜单 */ @@ -477,7 +492,7 @@ public class CellSelection extends Selection { popup.add(DeprecatedActionManager.getPresentMenu(ePane).createJMenu()); popup.add(new CellAttributeAction().createMenuItem()); JTemplate jTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (jTemplate.isJWorkBook()){ //表单中报表块编辑屏蔽掉 控件设置 + if (jTemplate.isJWorkBook()) { //表单中报表块编辑屏蔽掉 控件设置 popup.add(new CellWidgetAttrAction().createMenuItem()); } popup.add(new ConditionAttributesAction().createMenuItem()); @@ -497,8 +512,9 @@ public class CellSelection extends Selection { /** * 清除 - * @param type 要清除的类型 - * @param ePane 区域 + * + * @param type 要清除的类型 + * @param ePane 区域 * @return 成功返回true */ @Override @@ -581,6 +597,7 @@ public class CellSelection extends Selection { /** * 向左移动 + * * @param ePane 区域 */ public void moveLeft(ElementCasePane ePane) { @@ -592,6 +609,7 @@ public class CellSelection extends Selection { /** * 向右移动 + * * @param ePane 区域 */ public void moveRight(ElementCasePane ePane) { @@ -600,6 +618,7 @@ public class CellSelection extends Selection { /** * 向上移动 + * * @param ePane 区域 */ public void moveUp(ElementCasePane ePane) { @@ -611,6 +630,7 @@ public class CellSelection extends Selection { /** * 向下移动 + * * @param ePane 区域 */ public void moveDown(ElementCasePane ePane) { @@ -626,6 +646,7 @@ public class CellSelection extends Selection { /** * 触发删除动作 + * * @param ePane 区域 * @return 成功返回true */ @@ -657,6 +678,7 @@ public class CellSelection extends Selection { /** * 包含行列 + * * @param cr 行列 * @return 包含返回true */ @@ -716,7 +738,7 @@ public class CellSelection extends Selection { CellElementPropertyPane.getInstance().reInit(ePane); } - public void populateWidgetPropertyPane(ElementCasePane ePane){ + public void populateWidgetPropertyPane(ElementCasePane ePane) { CellWidgetPropertyPane.getInstance().reInit(ePane); } diff --git a/designer-realize/src/com/fr/grid/selection/FloatSelection.java b/designer-realize/src/com/fr/grid/selection/FloatSelection.java index 0d441a1f7..bd3b71a3b 100644 --- a/designer-realize/src/com/fr/grid/selection/FloatSelection.java +++ b/designer-realize/src/com/fr/grid/selection/FloatSelection.java @@ -5,7 +5,12 @@ import com.fr.base.FRContext; import com.fr.design.actions.cell.CleanAuthorityAction; import com.fr.design.actions.cell.FloatStyleAction; import com.fr.design.actions.core.ActionFactory; -import com.fr.design.actions.edit.*; +import com.fr.design.actions.edit.CopyAction; +import com.fr.design.actions.edit.CutAction; +import com.fr.design.actions.edit.DeleteAction; +import com.fr.design.actions.edit.EditFloatElementNameAction; +import com.fr.design.actions.edit.HyperlinkAction; +import com.fr.design.actions.edit.PasteAction; import com.fr.design.actions.edit.order.BringFloatElementForwardAction; import com.fr.design.actions.edit.order.BringFloatElementToFrontAction; import com.fr.design.actions.edit.order.SendFloatElementBackwardAction; @@ -28,10 +33,12 @@ import com.fr.stable.ColumnRow; import com.fr.stable.unit.FU; import com.fr.stable.unit.OLDPIX; -import javax.swing.*; -import java.awt.*; +import javax.swing.JPopupMenu; +import java.awt.Toolkit; + /** * the float selection + * * @editor zhou * 2012-3-22下午2:09:20 */ @@ -216,6 +223,7 @@ public class FloatSelection extends Selection { public boolean isSelectedOneCell(ElementCasePane ePane) { return false; } + //TODO:august 这儿不比较FloatElement会不会有问题啊 @Override public boolean equals(Object obj) { @@ -239,8 +247,7 @@ public class FloatSelection extends Selection { CellElementPropertyPane.getInstance().removeAll(); } - public void populateWidgetPropertyPane(ElementCasePane ePane){ - return; + public void populateWidgetPropertyPane(ElementCasePane ePane) { } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/quickeditor/FloatQuickEditor.java b/designer-realize/src/com/fr/quickeditor/FloatQuickEditor.java index 1f3d76a0e..72fd6870e 100644 --- a/designer-realize/src/com/fr/quickeditor/FloatQuickEditor.java +++ b/designer-realize/src/com/fr/quickeditor/FloatQuickEditor.java @@ -1,24 +1,32 @@ package com.fr.quickeditor; import com.fr.design.mainframe.ElementCasePane; +import com.fr.design.selection.QuickEditor; import com.fr.grid.selection.FloatSelection; import com.fr.report.cell.FloatElement; -import com.fr.design.selection.QuickEditor; /** - * * @author zhou * @since 2012-7-23下午5:17:23 */ public abstract class FloatQuickEditor extends QuickEditor { - protected FloatElement floatElement; + protected FloatElement floatElement; + + @Override + protected void refresh() { + FloatSelection fs = (FloatSelection) tc.getSelection(); + floatElement = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); + refreshDetails(); + } - @Override - protected void refresh() { - FloatSelection fs = (FloatSelection)tc.getSelection(); - floatElement = tc.getEditingElementCase().getFloatElement(fs.getSelectedFloatName()); - refreshDetails(); - } + /** + * 刷新详细信息 + */ + protected abstract void refreshDetails(); - protected abstract void refreshDetails(); + @Override + public void release() { + super.release(); + floatElement = null; + } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java b/designer-realize/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java index 1ae401bc5..72e6c9ae1 100644 --- a/designer-realize/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java +++ b/designer-realize/src/com/fr/quickeditor/cellquick/CellDSColumnEditor.java @@ -35,6 +35,7 @@ import com.fr.report.cell.cellattr.CellExpandAttr; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.cellattr.core.group.FilterTypeEnum; import com.fr.report.cell.cellattr.core.group.SelectCount; +import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.Icon; @@ -74,9 +75,6 @@ public class CellDSColumnEditor extends CellQuickEditor { private static final Color TIP_FONT_COLOR = new Color(0x7F333334, true); - private JPanel dsColumnRegion; - private JPanel centerPane; - /** * 基本和高级设置 */ @@ -117,10 +115,10 @@ public class CellDSColumnEditor extends CellQuickEditor { public JComponent createCenterBody() { this.createPanes(); this.createSwitchTab(); - dsColumnRegion = new JPanel(new BorderLayout()); + JPanel dsColumnRegion = new JPanel(new BorderLayout()); dsColumnRegion.add(tabsHeaderIconPane, BorderLayout.NORTH); dsColumnRegion.add(cardContainer, BorderLayout.CENTER); - centerPane = new JPanel(new BorderLayout()); + JPanel centerPane = new JPanel(new BorderLayout()); centerPane.add(dsColumnRegion, BorderLayout.CENTER); return centerPane; } @@ -141,17 +139,6 @@ public class CellDSColumnEditor extends CellQuickEditor { } - /** - * 关闭时候释放 - */ - @Override - public void release() { - super.release(); - dsColumnRegion = null; - centerPane = null; - } - - /** * 初始化基本和高级设置切换tab */ @@ -187,6 +174,12 @@ public class CellDSColumnEditor extends CellQuickEditor { paneList.add(cellDSColumnAdvancedPane); } + @Override + public void release() { + super.release(); + cellDSColumnBasicPane.release(); + cellDSColumnAdvancedPane.release(); + } /** * 单元格元素 数据列 高级设置内容面板 @@ -252,9 +245,9 @@ public class CellDSColumnEditor extends CellQuickEditor { }; DSColumnBasicEditorPane() { - dataPane = new SelectedDataColumnPane(true, true, tc, cellElement); + dataPane = new SelectedDataColumnPane(true, true); groupPane = new ResultSetGroupDockingPane(); - dataPane.addListener(dataListener); + dataPane.setListener(dataListener); groupPane.setListener(groupListener); double[] rowSize = {P}, columnSize = {P, F}; @@ -297,13 +290,19 @@ public class CellDSColumnEditor extends CellQuickEditor { @Override public void populate() { - dataPane.populate(null, cellElement); + dataPane.populate(DesignTableDataManager.getEditingTableDataSource(), cellElement, tc); groupPane.populate(cellElement); if (tc != null) { condition.setEditingComponent(tc); } } + @Override + protected void release() { + condition.setEditingComponent(null); + dataPane.release(); + } + /** * 创建有内容的面板显示信息 @@ -330,6 +329,7 @@ public class CellDSColumnEditor extends CellQuickEditor { class DSColumnAdvancedEditorPane extends AbstractDSCellEditorPane { + /*pane begin*/ /** * 排列顺序 */ @@ -353,7 +353,7 @@ public class CellDSColumnEditor extends CellQuickEditor { /** * 补充空白数据 */ - private UICheckBox useMultiplyNumCheckBox; + private UICheckBox useMultiNumCheckBox; /** * 补充空白数据数目输入框 */ @@ -362,6 +362,75 @@ public class CellDSColumnEditor extends CellQuickEditor { * 补充空白数据数目面板 可隐藏 */ private JPanel multiPane; + /*pane end*/ + + + /*listeners begin*/ + private UIObserverListener sortPaneFormulaChangeListener = new UIObserverListener() { + @Override + public void doChange() { + sortPane.update(cellElement); + fireTargetModified(); + } + }; + + private ChangeListener sortTypeBtnGroupChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + sortPane.update(cellElement); + fireTargetModified(); + } + }; + + private UIObserverListener filterPaneChangeListener = new UIObserverListener() { + @Override + public void doChange() { + filterPane.update(cellElement); + fireTargetModified(); + } + }; + + private UIObserverListener customValuePaneChangeListener = new UIObserverListener() { + @Override + public void doChange() { + valuePane.update(cellElement); + fireTargetModified(); + } + }; + + private ChangeListener heCheckBoxChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateExtendConfig(); + fireTargetModified(); + } + }; + + private ChangeListener veCheckBoxChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateExtendConfig(); + fireTargetModified(); + } + }; + + private ActionListener useMultiNumCheckBoxChangeListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + checkButtonEnabled(); + cellDSColumnAdvancedPane.updateMultipleConfig(); + fireTargetModified(); + } + }; + + private ChangeListener multiNumSpinnerChangeListener = new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + cellDSColumnAdvancedPane.updateMultipleConfig(); + fireTargetModified(); + } + }; + /*listeners end*/ public DSColumnAdvancedEditorPane() { @@ -397,6 +466,7 @@ public class CellDSColumnEditor extends CellQuickEditor { @Override public void populate() { if (cellElement != null) { + disableListener(); sortPane.populate(cellElement); valuePane.populate(cellElement); filterPane.populate(cellElement); @@ -406,6 +476,7 @@ public class CellDSColumnEditor extends CellQuickEditor { cellElement.setCellExpandAttr(cellExpandAttr); } // extendable + //noinspection Duplicates switch (cellExpandAttr.getExtendable()) { case CellExpandAttr.Both_EXTENDABLE: heCheckBox.setSelected(true); @@ -425,15 +496,23 @@ public class CellDSColumnEditor extends CellQuickEditor { } } if (cellExpandAttr.getMultipleNumber() == -1) { - useMultiplyNumCheckBox.setSelected(false); + useMultiNumCheckBox.setSelected(false); + // 默认值 + multiNumSpinner.setValue(1); } else { - useMultiplyNumCheckBox.setSelected(true); + useMultiNumCheckBox.setSelected(true); multiNumSpinner.setValue(cellExpandAttr.getMultipleNumber()); } this.checkButtonEnabled(); + enableListener(); } } + @Override + protected void release() { + + } + /** * 更新单元格扩展属性 */ @@ -443,6 +522,7 @@ public class CellDSColumnEditor extends CellQuickEditor { cellExpandAttr = new CellExpandAttr(); cellElement.setCellExpandAttr(cellExpandAttr); } + //noinspection Duplicates if (heCheckBox.isSelected()) { if (veCheckBox.isSelected()) { cellExpandAttr.setExtendable(CellExpandAttr.Both_EXTENDABLE); @@ -463,12 +543,11 @@ public class CellDSColumnEditor extends CellQuickEditor { */ private void updateMultipleConfig() { CellExpandAttr cellExpandAttr = cellElement.getCellExpandAttr(); - if (this.useMultiplyNumCheckBox.isSelected()) { + if (this.useMultiNumCheckBox.isSelected()) { cellExpandAttr.setMultipleNumber((int) multiNumSpinner.getValue()); } else { cellExpandAttr.setMultipleNumber(-1); } - } /** @@ -479,68 +558,29 @@ public class CellDSColumnEditor extends CellQuickEditor { @Override protected JPanel createContentPane() { this.setLayout(FRGUIPaneFactory.createBorderLayout()); + //结果集排序 sortPane = new ResultSetSortConfigPane(); - sortPane.addListener(new UIObserverListener() { - @Override - public void doChange() { - sortPane.update(cellElement); - fireTargetModified(); - } - }, new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - sortPane.update(cellElement); - fireTargetModified(); - } - } - ); + //结果筛选 filterPane = new ResultSetFilterConfigPane(); - filterPane.addListener(new UIObserverListener() { - @Override - public void doChange() { - filterPane.update(cellElement); - fireTargetModified(); - } - } - ); + //自定义值显示 valuePane = new CustomValuePane(); - valuePane.addListener(new UIObserverListener() { - @Override - public void doChange() { - valuePane.update(cellElement); - fireTargetModified(); - } - }); //可扩展性 JPanel extendableDirectionPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); extendableDirectionPane.add(heCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Horizontal_Extendable"))); extendableDirectionPane.add(veCheckBox = new UICheckBox(Inter.getLocText("ExpandD-Vertical_Extendable"))); - heCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - cellDSColumnAdvancedPane.updateExtendConfig(); - fireTargetModified(); - } - }); - veCheckBox.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - cellDSColumnAdvancedPane.updateExtendConfig(); - fireTargetModified(); - } - }); - JPanel multiNumPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); //补充空白数据 - useMultiplyNumCheckBox = new UICheckBox(Inter.getLocText("Fill_blank_Data")); + JPanel multiNumPane = FRGUIPaneFactory.createYBoxEmptyBorderPane(); + useMultiNumCheckBox = new UICheckBox(Inter.getLocText("Fill_blank_Data")); JPanel checkBoxPane = new JPanel(new BorderLayout()); - checkBoxPane.add(useMultiplyNumCheckBox, BorderLayout.WEST); + checkBoxPane.add(useMultiNumCheckBox, BorderLayout.WEST); multiNumPane.add(checkBoxPane); multiNumSpinner = new UISpinner(1, 10000, 1, 1); + //数据倍数 UILabel multipleLabel = new UILabel(Inter.getLocText("Column_Multiple")); multiPane = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{ @@ -551,25 +591,11 @@ public class CellDSColumnEditor extends CellQuickEditor { ); multiPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 0)); multiNumPane.add(multiPane); - useMultiplyNumCheckBox.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkButtonEnabled(); - cellDSColumnAdvancedPane.updateMultipleConfig(); - fireTargetModified(); - } - }); - multiNumSpinner.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - cellDSColumnAdvancedPane.updateMultipleConfig(); - fireTargetModified(); - } - }); + + enableListener(); double[] rowSize = {P, P, P, P, P, P}; double[] columnSize = {F}; - Component[][] components = new Component[][]{ {sortPane}, {filterPane}, @@ -580,9 +606,29 @@ public class CellDSColumnEditor extends CellQuickEditor { return TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, HGAP, VGAP); } + public void enableListener() { + sortPane.addListener(sortPaneFormulaChangeListener, sortTypeBtnGroupChangeListener); + filterPane.addListener(filterPaneChangeListener); + valuePane.addListener(customValuePaneChangeListener); + heCheckBox.addChangeListener(heCheckBoxChangeListener); + veCheckBox.addChangeListener(veCheckBoxChangeListener); + useMultiNumCheckBox.addActionListener(useMultiNumCheckBoxChangeListener); + multiNumSpinner.addChangeListener(multiNumSpinnerChangeListener); + } + + public void disableListener() { + sortPane.removeListener(sortTypeBtnGroupChangeListener); + filterPane.removeListener(); + valuePane.removeListener(); + heCheckBox.removeChangeListener(heCheckBoxChangeListener); + veCheckBox.removeChangeListener(veCheckBoxChangeListener); + useMultiNumCheckBox.removeActionListener(useMultiNumCheckBoxChangeListener); + multiNumSpinner.removeChangeListener(multiNumSpinnerChangeListener); + } + private void checkButtonEnabled() { - if (useMultiplyNumCheckBox.isSelected()) { + if (useMultiNumCheckBox.isSelected()) { multiNumSpinner.setEnabled(true); multiPane.setVisible(true); } else { @@ -659,7 +705,7 @@ public class CellDSColumnEditor extends CellQuickEditor { public void populate(TemplateCellElement cellElement) { if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { + if (value instanceof DSColumn) { this.formulaField.populateElement(cellElement); DSColumn dSColumn = (DSColumn) value; int sort = dSColumn.getOrder(); @@ -676,6 +722,8 @@ public class CellDSColumnEditor extends CellQuickEditor { String sortFormula = dSColumn.getSortFormula(); if (sortFormula != null && sortFormula.length() >= 1) { this.formulaField.populate(sortFormula); + } else { + this.formulaField.populate(DEFAULT_VALUE); } } } @@ -689,8 +737,8 @@ public class CellDSColumnEditor extends CellQuickEditor { public void update(CellElement cellElement) { if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + if (value instanceof DSColumn) { + DSColumn dSColumn = (DSColumn) value; dSColumn.setOrder(this.sortTypePane.getSelectedIndex()); dSColumn.setSortFormula(this.formulaField.getFormulaText()); } @@ -707,6 +755,16 @@ public class CellDSColumnEditor extends CellQuickEditor { formulaField.addListener(formulaChangeListener); sortTypePane.addChangeListener(changeListener); } + + /** + * 去除事件监听器 + * + * @param changeListener 排序类型下拉框改动事件监听器 + */ + public void removeListener(ChangeListener changeListener) { + formulaField.removeListener(); + sortTypePane.removeChangeListener(changeListener); + } } /** @@ -852,13 +910,18 @@ public class CellDSColumnEditor extends CellQuickEditor { rsComboBox.removeActionListener(actionListener); if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { + if (value instanceof DSColumn) { DSColumn dSColumn = (DSColumn) (cellElement.getValue()); SelectCount selectCount = dSColumn.getSelectCount(); this.topFormulaPane.populateElement(cellElement); this.bottomFormulaPane.populateElement(cellElement); CardLayout setCardPaneLayout = (CardLayout) setCardPane.getLayout(); CardLayout tipCardPaneLayout = (CardLayout) tipCardPane.getLayout(); + // 重置默认值 + this.topFormulaPane.populate(DEFAULT_VALUE); + this.bottomFormulaPane.populate(DEFAULT_VALUE); + this.serialTextField.setText(StringUtils.EMPTY); + if (selectCount != null) { int selectCountType = selectCount.getType(); this.rsComboBox.setSelectedIndex(selectCountType); @@ -927,6 +990,7 @@ public class CellDSColumnEditor extends CellQuickEditor { TableLayoutHelper.modifyTableLayoutIndexVGap(contentPane, 4, 0); } } else { + this.rsComboBox.setSelectedIndex(0); //未定义 setCardPaneLayout.show(setCardPane, UNDEFINE.name()); tipCardPaneLayout.show(tipCardPane, UNDEFINE.name()); @@ -944,8 +1008,8 @@ public class CellDSColumnEditor extends CellQuickEditor { public void update(CellElement cellElement) { if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { - DSColumn dSColumn = (DSColumn) (cellElement.getValue()); + if (value instanceof DSColumn) { + DSColumn dSColumn = (DSColumn) value; int selectedFilterIndex = this.rsComboBox.getSelectedIndex(); if (selectedFilterIndex == 0) { dSColumn.setSelectCount(null); @@ -953,6 +1017,7 @@ public class CellDSColumnEditor extends CellQuickEditor { SelectCount selectCount = new SelectCount(); selectCount.setType(selectedFilterIndex); dSColumn.setSelectCount(selectCount); + //noinspection Duplicates if (selectedFilterIndex == TOP.getValue()) { selectCount.setFormulaCount(this.topFormulaPane.getFormulaText()); } else if (selectedFilterIndex == BOTTOM.getValue()) { @@ -976,6 +1041,16 @@ public class CellDSColumnEditor extends CellQuickEditor { rsComboBox.registerChangeListener(formulaListener); serialTextField.registerChangeListener(formulaListener); } + + /** + * 去除事件监听器 + */ + public void removeListener() { + topFormulaPane.removeListener(); + bottomFormulaPane.removeListener(); + rsComboBox.removeChangeListener(); + serialTextField.registerChangeListener(null); + } } /** @@ -1029,6 +1104,13 @@ public class CellDSColumnEditor extends CellQuickEditor { this.formulaTextField.registerChangeListener(listener); } + /** + * 取消事件监听器 + */ + public void removeListener() { + this.formulaTextField.registerChangeListener(null); + } + private ActionListener formulaButtonActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { @@ -1042,7 +1124,7 @@ public class CellDSColumnEditor extends CellQuickEditor { final UIFormula formulaPane = FormulaFactory.createFormulaPaneWhenReserveFormula(); if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { + if (value instanceof DSColumn) { DSColumn dsColumn = (DSColumn) value; String[] displayNames = DesignTableDataManager.getSelectedColumnNames(DesignTableDataManager.getEditingTableDataSource(), dsColumn.getDSName()); formulaPane.populate(valueFormula, new CustomVariableResolver(displayNames, true)); @@ -1086,12 +1168,14 @@ public class CellDSColumnEditor extends CellQuickEditor { public void populate(CellElement cellElement) { if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { + if (value instanceof DSColumn) { DSColumn dSColumn = (DSColumn) value; //formula String valueFormula = dSColumn.getResult(); if (valueFormula != null) { formulaField.populate(valueFormula); + } else { + formulaField.populate(DEFAULT_VALUE); } formulaField.populateElement(cellElement); @@ -1102,7 +1186,7 @@ public class CellDSColumnEditor extends CellQuickEditor { public void update(CellElement cellElement) { if (cellElement != null) { Object value = cellElement.getValue(); - if (value != null && value instanceof DSColumn) { + if (value instanceof DSColumn) { DSColumn dSColumn = (DSColumn) (cellElement.getValue()); dSColumn.setResult(this.formulaField.getFormulaText()); } @@ -1117,6 +1201,13 @@ public class CellDSColumnEditor extends CellQuickEditor { public void addListener(UIObserverListener formulaListener) { this.formulaField.addListener(formulaListener); } + + /** + * 移除事件监听器 + */ + public void removeListener() { + this.formulaField.removeListener(); + } } } diff --git a/designer-realize/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java b/designer-realize/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java index 461dee3ee..456bfdeb1 100644 --- a/designer-realize/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java +++ b/designer-realize/src/com/fr/quickeditor/cellquick/CellRichTextEditor.java @@ -3,7 +3,6 @@ package com.fr.quickeditor.cellquick; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.insert.cell.RichTextCellAction; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.general.Inter; @@ -13,7 +12,6 @@ import javax.swing.JComponent; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Component; -import java.awt.Dimension; /** * 单元格元素富文本编辑器 @@ -58,4 +56,9 @@ public class CellRichTextEditor extends CellQuickEditor { return true; } + @Override + public void release() { + super.release(); + richTextButton.setAction(null); + } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java b/designer-realize/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java index e8f79166a..e90e27715 100644 --- a/designer-realize/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java +++ b/designer-realize/src/com/fr/quickeditor/cellquick/CellStringQuickEditor.java @@ -3,7 +3,6 @@ package com.fr.quickeditor.cellquick; import com.fr.base.BaseFormula; import com.fr.base.Style; import com.fr.base.TextFormat; -import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextarea.UITextArea; import com.fr.grid.GridKeyListener; import com.fr.grid.selection.CellSelection; @@ -18,7 +17,6 @@ import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; diff --git a/designer-realize/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java b/designer-realize/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java index cfa362cb3..b33deff88 100644 --- a/designer-realize/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java +++ b/designer-realize/src/com/fr/quickeditor/cellquick/CellSubReportEditor.java @@ -56,4 +56,10 @@ public class CellSubReportEditor extends CellQuickEditor { public boolean isScrollAll() { return true; } + + @Override + public void release() { + super.release(); + subReportButton.setAction(null); + } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java b/designer-realize/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java index a243195c1..57a487603 100644 --- a/designer-realize/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java +++ b/designer-realize/src/com/fr/quickeditor/floatquick/FloatImageQuickEditor.java @@ -14,8 +14,10 @@ import com.fr.general.Inter; import com.fr.quickeditor.FloatQuickEditor; import com.fr.report.cell.cellattr.CellImage; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -73,8 +75,6 @@ public class FloatImageQuickEditor extends FloatQuickEditor { @Override protected void refreshDetails() { - // TODO Auto-generated method stub - } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java b/designer-realize/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java index 1f5718a9e..eae3e81dc 100644 --- a/designer-realize/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java +++ b/designer-realize/src/com/fr/quickeditor/floatquick/FloatStringQuickEditor.java @@ -12,10 +12,16 @@ import com.fr.quickeditor.FloatQuickEditor; import com.fr.report.ReportHelper; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JTextArea; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,6 +33,25 @@ public class FloatStringQuickEditor extends FloatQuickEditor { private boolean reserveInResult = false; private boolean reserveOnWriteOrAnaly = true; + private DocumentListener documentListener = new DocumentListener() { + + @Override + public void insertUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + @Override + public void changedUpdate(DocumentEvent e) { + changeReportPaneCell(stringTextField.getText().trim()); + } + + }; + public FloatStringQuickEditor() { super(); stringTextField = new JTextArea(); @@ -34,11 +59,17 @@ public class FloatStringQuickEditor extends FloatQuickEditor { formulaButton = new UIButton(); formulaButton.setPreferredSize(new Dimension(25, 23)); formulaButton.setIcon(BaseUtils.readIcon("/com/fr/design/images/m_insert/formula.png")); + ActionListener getFormulaActionListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ((ElementCasePane) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane()).getGrid().startEditing(); + } + }; formulaButton.addActionListener(getFormulaActionListener); JPanel pane = new JPanel(new BorderLayout(5, 0)); pane.add(stringTextField, BorderLayout.CENTER); pane.add(formulaButton, BorderLayout.EAST); - pane.setBorder(BorderFactory.createEmptyBorder(0,0,0,5)); + pane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); formulaButton.setVisible(false); this.setLayout(new BorderLayout()); this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); @@ -55,16 +86,10 @@ public class FloatStringQuickEditor extends FloatQuickEditor { stringTextField.setBackground(Color.WHITE); } - ActionListener getFormulaActionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - ((ElementCasePane) HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getCurrentElementCasePane()).getGrid().startEditing(); - } - }; @Override protected void refreshDetails() { - String str = null; + String str; Object value = floatElement.getValue(); if (value == null) { str = StringUtils.EMPTY; @@ -89,26 +114,8 @@ public class FloatStringQuickEditor extends FloatQuickEditor { stringTextField.getDocument().addDocumentListener(documentListener); } - DocumentListener documentListener = new DocumentListener() { - - @Override - public void insertUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - @Override - public void removeUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - @Override - public void changedUpdate(DocumentEvent e) { - changeReportPaneCell(stringTextField.getText().trim()); - } - - }; - protected void changeReportPaneCell(String tmpText) { + private void changeReportPaneCell(String tmpText) { if (tmpText != null && (tmpText.length() > 0 && tmpText.charAt(0) == '=')) { BaseFormula textFormula = BaseFormula.createFormulaBuilder().build(tmpText); textFormula.setReserveInResult(reserveInResult); @@ -125,5 +132,4 @@ public class FloatStringQuickEditor extends FloatQuickEditor { fireTargetModified(); stringTextField.requestFocus(); } - } \ No newline at end of file From 304449fd195ac4cd3ef40caea36fa885c75e7b27 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 14:45:51 +0800 Subject: [PATCH 11/29] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E5=86=B3=E7=AD=96=E6=8A=A5=E8=A1=A8=E7=BC=96=E8=BE=91=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8=E5=9D=97=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/ElementCasePane.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java index da50e13d9..25622d179 100644 --- a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java @@ -524,8 +524,13 @@ public abstract class ElementCasePane extends Tar * 因为这边判断selection是一个selection,所以不会触发fireSelectionChanged */ public void setSelection(Selection selection) { - //旧选中内容编辑器释放模板对象 - this.getCurrentEditor().release(); + try { + //旧选中内容编辑器释放模板对象 + this.getCurrentEditor().release(); + } catch (UnsupportedOperationException e) { + FRContext.getLogger().info("Nothing to release"); + } + if (!ComparatorUtils.equals(this.selection, selection) || !ComparatorUtils.equals(EastRegionContainerPane.getInstance().getCellAttrPane(), CellElementPropertyPane.getInstance())) { this.selection = selection; From 7b12c56f9963e02fb52f55e3edc58e0d1c27451c Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 15:18:59 +0800 Subject: [PATCH 12/29] =?UTF-8?q?REPORT-6096=20TAB=E9=A1=B5=E4=B8=AD?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=9C=A8=E5=A4=8D=E5=88=B6=E7=B2=98=E8=B4=B4?= =?UTF-8?q?=E5=90=8E=E4=BC=9A=E4=BD=8D=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/FormSelectionUtils.java | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java index ebf7328a2..86a7536e2 100644 --- a/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -12,6 +12,7 @@ import com.fr.design.designer.creator.XWAbsoluteLayout; import com.fr.design.designer.creator.XWFitLayout; import com.fr.design.designer.creator.XWScaleLayout; import com.fr.design.designer.creator.XWTitleLayout; +import com.fr.design.designer.creator.cardlayout.XWTabFitLayout; import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; @@ -107,6 +108,7 @@ public class FormSelectionUtils { designer.showMessageDialog(Inter.getLocText("FR-Designer_Too_Large_To_Paste")); return; } + resetTabSub2RealSize(copiedCreator); boolean addSuccess = adapter.addBean(copiedCreator, point.x, point.y); if (addSuccess) { designer.getSelectionModel().getSelection().addSelectedCreator(copiedCreator); @@ -121,6 +123,34 @@ public class FormSelectionUtils { } + /** + * REPORT-6096 复制得到的是显示的大小,如果因屏幕分辨率问题存在缩放的话,显示大小和实际大小会有区别,粘贴后tab内部调整大小时会再次缩放导致问题。 + * 因此在粘贴之前将tab内部的组件调整成实际的大小。 + * + * @param copiedCreator 复制的组件 + */ + private static void resetTabSub2RealSize(XCreator copiedCreator) { + ArrayList childrenList = copiedCreator.getTargetChildrenList(); + if (!childrenList.isEmpty()) { + for (Object aChildrenList : childrenList) { + XWTabFitLayout tabLayout = (XWTabFitLayout) aChildrenList; + double percent = tabLayout.getContainerPercent(); + Component[] components = tabLayout.getComponents(); + for (Component component : components) { + Rectangle show = component.getBounds(); + component.setBounds(new Rectangle((int) (show.x * percent), (int) (show.y * percent), (int) (show.width * percent), (int) (show.height * percent))); + } + } + } + Component[] components = copiedCreator.getComponents(); + for (Component component : components) { + try { + resetTabSub2RealSize((XCreator) component); + } catch (ClassCastException ignored) { + } + } + } + /** * 相对布局粘贴 */ @@ -178,9 +208,9 @@ public class FormSelectionUtils { */ private static Point getPasteLocation(AbstractLayoutAdapter layoutAdapter, XCreator copiedCreator, int x, int y) { //当宽度为奇数时 设置偏移 - int xoffset = (copiedCreator.getWidth() & 1) == 1 ? 1 : 0; + int xoffset = copiedCreator.getWidth() & 1; //当高度为奇数时 设置偏移 - int yoffset = (copiedCreator.getHeight() & 1) == 1 ? 1 : 0; + int yoffset = copiedCreator.getHeight() & 1; if (!layoutAdapter.accept(copiedCreator, x, y)) { XLayoutContainer container = layoutAdapter.getContainer(); From 41a03ac1e4657b114286f7a8825e1ea88d37eeb9 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 17:24:45 +0800 Subject: [PATCH 13/29] =?UTF-8?q?REPORT-5856=20=E6=8F=92=E4=BB=B6=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=96=B0=E5=88=86=E7=B1=BB=20=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=88=86=E7=B1=BB=E8=BF=87=E6=BB=A4=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java b/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java index 4b4bddab4..db10437fd 100644 --- a/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java +++ b/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java @@ -23,7 +23,7 @@ public class GetPluginFromStoreExecutor implements Executor { private String scope; public GetPluginFromStoreExecutor(JSONObject info) { - this.category = info.optString("category"); + this.category = info.optString("categories"); this.fee = info.optString("fee"); this.seller = info.optString("seller"); this.scope = info.optString("scope"); From 5c7c5acef3a2d60d3c567e900c484c9cc075bf4f Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 18:55:24 +0800 Subject: [PATCH 14/29] =?UTF-8?q?REPORT-6868=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=97=E5=8D=95=E5=85=83=E6=A0=BC=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E9=A2=91=E7=B9=81=E5=BC=B9=E5=87=BAsql=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=AF=B9=E8=AF=9D=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/gui/demo/ComboBoxDemo.java | 48 +-- .../design/gui/demo/SwingComponentsDemo.java | 17 +- .../fr/design/gui/icombobox/LazyComboBox.java | 338 ++++++++---------- .../fr/design/gui/icombobox/UIComboBox.java | 70 ++-- .../com/fr/design/dscolumn/DSColumnPane.java | 156 ++++---- 5 files changed, 307 insertions(+), 322 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/demo/ComboBoxDemo.java b/designer-base/src/com/fr/design/gui/demo/ComboBoxDemo.java index a47ea5b0c..a29d78dd0 100644 --- a/designer-base/src/com/fr/design/gui/demo/ComboBoxDemo.java +++ b/designer-base/src/com/fr/design/gui/demo/ComboBoxDemo.java @@ -1,34 +1,37 @@ package com.fr.design.gui.demo; -import java.awt.BorderLayout; -import java.awt.Component; -import java.util.ArrayList; - -import javax.swing.DefaultListCellRenderer; -import com.fr.design.gui.ilable.UILabel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JTree; -import javax.swing.ListCellRenderer; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeCellRenderer; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreePath; - import com.fr.base.FRContext; -import com.fr.design.gui.icombobox.filter.Filter; +import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.icombobox.ComboCheckBox; import com.fr.design.gui.icombobox.DictionaryComboBox; import com.fr.design.gui.icombobox.ExtendedComboBox; import com.fr.design.gui.icombobox.FRTreeComboBox; import com.fr.design.gui.icombobox.FilterComboBox; import com.fr.design.gui.icombobox.LazyComboBox; +import com.fr.design.gui.icombobox.filter.Filter; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.parameter.ParameterInputPane; import com.fr.general.Inter; +import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.ListCellRenderer; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; +import java.awt.BorderLayout; +import java.awt.Component; +import java.util.ArrayList; + /** * Created by IntelliJ IDEA. * User: Richer @@ -42,12 +45,12 @@ public class ComboBoxDemo extends JPanel { double f = TableLayout.FILL; Component[][] coms = new Component[][]{ - {new UILabel(Inter.getLocText("Form-ComboCheckBox")+":"), createComboCheckBox()}, - {new UILabel(Inter.getLocText(new String[]{"DS-Dictionary", "Form-ComboBox"})+":"), createDictComboBox()}, - {new UILabel(Inter.getLocText("long_data_can_not_show_fully")+":"), createExtendedComboBox()}, - {new UILabel(Inter.getLocText(new String[]{"Filter", "Form-ComboBox"})+":"), createFilterComboBox()}, - {new UILabel(Inter.getLocText("Form-ComboBox")+":"), createTreeComboBox()}, - {new UILabel(Inter.getLocText(new String[]{"Delay", "Load", "Form-ComboBox"})+":"), createLazyComboBox()} + {new UILabel(Inter.getLocText("Form-ComboCheckBox") + ":"), createComboCheckBox()}, + {new UILabel(Inter.getLocText(new String[]{"DS-Dictionary", "Form-ComboBox"}) + ":"), createDictComboBox()}, + {new UILabel(Inter.getLocText("long_data_can_not_show_fully") + ":"), createExtendedComboBox()}, + {new UILabel(Inter.getLocText(new String[]{"Filter", "Form-ComboBox"}) + ":"), createFilterComboBox()}, + {new UILabel(Inter.getLocText("Form-ComboBox") + ":"), createTreeComboBox()}, + {new UILabel(Inter.getLocText(new String[]{"Delay", "Load", "Form-ComboBox"}) + ":"), createLazyComboBox()} }; double[] rowSize = new double[coms.length]; double[] columnSize = {p, f}; @@ -165,6 +168,7 @@ public class ComboBoxDemo extends JPanel { // 睡5秒 try { Thread.sleep(5000); + } catch (InterruptedException e) { FRContext.getLogger().error(e.getMessage(), e); } diff --git a/designer-base/src/com/fr/design/gui/demo/SwingComponentsDemo.java b/designer-base/src/com/fr/design/gui/demo/SwingComponentsDemo.java index 6a08e38b0..a3771ce23 100644 --- a/designer-base/src/com/fr/design/gui/demo/SwingComponentsDemo.java +++ b/designer-base/src/com/fr/design/gui/demo/SwingComponentsDemo.java @@ -1,16 +1,15 @@ package com.fr.design.gui.demo; -import java.awt.BorderLayout; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.utils.DesignUtils; +import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; - -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.utils.DesignUtils; -import com.fr.design.utils.gui.GUICoreUtils; +import java.awt.BorderLayout; /** * Created by IntelliJ IDEA. @@ -19,10 +18,10 @@ import com.fr.design.utils.gui.GUICoreUtils; * Time: 下午4:54 */ public class SwingComponentsDemo extends JFrame { - public SwingComponentsDemo() { - this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + private SwingComponentsDemo() { + this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); init(); - JPanel contentPane = (JPanel)getContentPane(); + JPanel contentPane = (JPanel) getContentPane(); contentPane.setLayout(FRGUIPaneFactory.createBorderLayout()); JTabbedPane tab = new JTabbedPane(); contentPane.add(tab, BorderLayout.CENTER); @@ -40,12 +39,12 @@ public class SwingComponentsDemo extends JFrame { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { JFrame f = new SwingComponentsDemo(); f.setSize(500, 500); f.setVisible(true); GUICoreUtils.centerWindow(f); - f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } }); } diff --git a/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java b/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java index fa4464cfc..2ec5590f6 100644 --- a/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java +++ b/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java @@ -3,212 +3,190 @@ */ package com.fr.design.gui.icombobox; -import java.awt.Dimension; -import java.util.ArrayList; -import java.util.List; +import com.fr.general.FRLogger; +import com.fr.general.Inter; -import javax.swing.*; +import javax.swing.DefaultComboBoxModel; +import javax.swing.SwingWorker; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; -import javax.swing.plaf.basic.BasicComboPopup; - -import com.fr.general.Inter; +import java.awt.Dimension; +import java.util.concurrent.ExecutionException; /** * @author richer + * @version 2018年2月6日14点43分 by @yaoh.wu * @since 6.5.5 创建于2011-6-15 延迟加载的下拉框 */ public abstract class LazyComboBox extends UIComboBox implements PopupMenuListener { - protected boolean loaded = false; - private List ls = new ArrayList(); - private Object initialSelected = null; - private static final int NUM=80; - - public static final Object PENDING = new Object() { - - @Override - public String toString() { - return Inter.getLocText("Loading") + "..."; - } - }; - - public LazyComboBox() { - super(); - this.setEditor(new FilterComboBoxEditor()); - addPopupMenuListener(this); -// updateUI(); - } - - public void setLoaded(boolean loaded) { - this.loaded = loaded; - } - - public abstract Object[] load(); - - public void setSelectedItem(Object anObject) { - initialSelected = anObject; - if (loaded) { - super.setSelectedItem(anObject); - } else { - - setModel(new DefaultComboBoxModel(new Object[] { anObject })); - super.setSelectedItem(anObject); - } - } - - /** - * 通过调用该方法,在点击下拉框按钮之前就加载好数据 - */ - public void loadInstant() { - if (loaded) { - return; - } - setModel(new DefaultComboBoxModel(load())); - loaded = true; - } - - @Override - public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + + private static final int NUM = 80; + private static final String[] PENDING_CONTENT = new String[]{"", Inter.getLocText("Loading") + "..."}; + + /** + * 是否加载完成 + */ + protected boolean loaded = false; + + /** + * 初始化选项 + */ + private Object initialSelected = null; + + + protected LazyComboBox() { + super(); + this.setEditor(new FilterComboBoxEditor()); + addPopupMenuListener(this); + } + + public void setLoaded(boolean loaded) { + this.loaded = loaded; + } + + /** + * 加载下拉框中的选项 + * + * @return 下拉框中的选项 + */ + public abstract Object[] load(); + + @Override + public void setSelectedItem(Object anObject) { + initialSelected = anObject; + if (loaded) { + super.setSelectedItem(anObject); + } else { + this.setModel(new DefaultComboBoxModel<>(new Object[]{anObject})); + super.setSelectedItem(anObject); + } + } + + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { if (loaded) { return; } - DefaultComboBoxModel loadingModel = new DefaultComboBoxModel(new String[]{"", Inter.getLocText("Loading") + "..."}); - LazyComboBox.this.setModel(loadingModel); - new SwingWorker() { + DefaultComboBoxModel loadingModel = new DefaultComboBoxModel<>(PENDING_CONTENT); + this.setModel(loadingModel); + new SwingWorker() { @Override - protected Void doInBackground() throws Exception { - final Object selectedObj = getSelectedItem(); - loadList(); - return null; + protected Object[] doInBackground() { + return load(); } @Override public void done() { - LazyComboBox.this.updateUI(); - LazyComboBox.this.fireEvent(); + try { + LazyComboBox.this.loadList(get()); + } catch (InterruptedException | ExecutionException exception) { + FRLogger.getLogger().debug(exception.getMessage()); + } LazyComboBox.this.showPopup(); } - }.execute(); + } + /** + * 加载下拉列表 + */ + public void loadList() { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(load()); + model.setSelectedItem(initialSelected); + this.setModel(model); + this.selectedItemReminder = initialSelected; + loaded = true; } - /** - * 计算加载下拉列表 - */ - public void loadList() { - DefaultComboBoxModel model = new DefaultComboBoxModel(load()); + /** + * 加载下拉列表 + * + * @param contents 下拉列表内容 + */ + private void loadList(Object[] contents) { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(contents); model.setSelectedItem(initialSelected); - LazyComboBox.this.setModel(model); - LazyComboBox.this.selectedItemReminder = initialSelected ; - loaded = true; - } - - @Override - public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { - - } - - @Override - public void popupMenuCanceled(PopupMenuEvent e) { - - } - - public void addClickListener(EventListener l) { - if (ls == null) { - ls = new ArrayList(); - } - ls.add(l); - } - - public void fireEvent() { - for (int i = 0, n = ls.size(); i < n; i++) { - ls.get(i).fireEvent(); - } - } - - @Override - public Dimension getPreferredSize() { - Dimension dim = super.getPreferredSize(); - dim.width = NUM; - return dim; - } - - private static class LazyPopMenu extends BasicComboPopup { - - public LazyPopMenu(final JComboBox combo) { - super(combo); - LazyComboBox comboc = (LazyComboBox) combo; - comboc.addClickListener(new EventListener() { - - @Override - public void fireEvent() { - LazyPopMenu.this.show(); - combo.showPopup(); - } - }); - } - } - - private interface EventListener { - void fireEvent(); - } - - class FilterComboBoxEditor extends UIComboBoxEditor implements DocumentListener { - private Object item; - private volatile boolean filtering = false; - private volatile boolean setting = false; - - public FilterComboBoxEditor() { - super(); - textField.getDocument().addDocumentListener(this); - } - - public void setItem(Object item) { - if (filtering) { - return; - } - this.item = item; - - this.setting = true; - textField.setSetting(true); - String newText = (item == null) ? "" : item.toString(); - textField.setText(newText); - textField.setSetting(false); - this.setting = false; - } - - public Object getItem() { - return this.item; - } - - public void insertUpdate(DocumentEvent e) { - handleChange(); - } - - public void removeUpdate(DocumentEvent e) { - handleChange(); - } - - public void changedUpdate(DocumentEvent e) { - handleChange(); - } - - protected void handleChange() { - if (setting) { - return; - } - filtering = true; - String xx = textField.getText(); - LazyComboBox.this.setSelectedItem(xx); - this.item = textField.getText(); - - setPopupVisible(true); - filtering = false; - } - } + this.setModel(model); + this.selectedItemReminder = initialSelected; + loaded = true; + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + + } + + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + + } + + @Override + public Dimension getPreferredSize() { + Dimension dim = super.getPreferredSize(); + dim.width = NUM; + return dim; + } + + class FilterComboBoxEditor extends UIComboBoxEditor implements DocumentListener { + private Object item; + private volatile boolean filtering = false; + private volatile boolean setting = false; + + public FilterComboBoxEditor() { + super(); + textField.getDocument().addDocumentListener(this); + } + + @Override + public void setItem(Object item) { + if (filtering) { + return; + } + this.item = item; + this.setting = true; + textField.setSetting(true); + String newText = (item == null) ? "" : item.toString(); + textField.setText(newText); + textField.setSetting(false); + this.setting = false; + } + + @Override + public Object getItem() { + return this.item; + } + + @Override + public void insertUpdate(DocumentEvent e) { + handleChange(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + handleChange(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + handleChange(); + } + + void handleChange() { + if (setting) { + return; + } + filtering = true; + String xx = textField.getText(); + LazyComboBox.this.setSelectedItem(xx); + this.item = textField.getText(); + + setPopupVisible(true); + filtering = false; + } + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/design/gui/icombobox/UIComboBox.java b/designer-base/src/com/fr/design/gui/icombobox/UIComboBox.java index f9ce6b78f..14a90da7b 100644 --- a/designer-base/src/com/fr/design/gui/icombobox/UIComboBox.java +++ b/designer-base/src/com/fr/design/gui/icombobox/UIComboBox.java @@ -4,12 +4,13 @@ import com.fr.design.event.GlobalNameListener; import com.fr.design.event.GlobalNameObserver; import com.fr.design.event.UIObserver; import com.fr.design.event.UIObserverListener; -import com.fr.design.utils.gui.GUICoreUtils; -import javax.swing.*; +import javax.swing.ComboBoxModel; +import javax.swing.JComboBox; +import javax.swing.ListCellRenderer; import javax.swing.plaf.ComboBoxUI; import javax.swing.plaf.basic.ComboPopup; -import java.awt.*; +import java.awt.Dimension; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -112,8 +113,6 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser public void setRenderer(ListCellRenderer aRenderer) { if (aRenderer instanceof UIComboBoxRenderer) { super.setRenderer(aRenderer); - } else { - //throw new IllegalArgumentException("Must be UIComboBoxRenderer"); } } @@ -121,13 +120,15 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser return null; } + @Override public void setGlobalName(String name) { comboBoxName = name; } @Override public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width + SIZE5, SIZE);//加5的原因在于:render里,每一个项前面了空了一格,要多几像素 + //加5的原因在于:render里,每一个项前面了空了一格,要多几像素 + return new Dimension(super.getPreferredSize().width + SIZE5, SIZE); } /** @@ -144,70 +145,53 @@ public class UIComboBox extends JComboBox implements UIObserver, GlobalNameObser } - /** - * - */ + /** + * + */ + @Override public void updateUI() { setUI(getUIComboBoxUI()); } - /** - * - * @param listener 观察者监听事件 - */ + /** + * @param listener 观察者监听事件 + */ + @Override public void registerChangeListener(UIObserverListener listener) { uiObserverListener = listener; } - public void removeChangeListener(){ + public void removeChangeListener() { uiObserverListener = null; } - public UIObserverListener getUiObserverListener(){ + public UIObserverListener getUiObserverListener() { return uiObserverListener; } /** - * @return + * @return 是否响应变更事件 */ + @Override public boolean shouldResponseChangeListener() { return true; } - /** - * - * @param listener 观察者监听事件 - */ + /** + * @param listener 观察者监听事件 + */ + @Override public void registerNameListener(GlobalNameListener listener) { globalNameListener = listener; } - /** - * - * @return - */ - public boolean shouldResponseNameListener() { - return true; - } - - /** - * @param args + * @return 是否响应名称事件 */ - public static void main(String... args) { - LayoutManager layoutManager = null; - JFrame jf = new JFrame("test"); - jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - JPanel content = (JPanel) jf.getContentPane(); - content.setLayout(layoutManager); - UIComboBox bb = new UIComboBox(new String[]{"", "jerry", "kunsnat", "richer"}); - bb.setEditable(true); - bb.setBounds(20, 20, bb.getPreferredSize().width, bb.getPreferredSize().height); - content.add(bb); - GUICoreUtils.centerWindow(jf); - jf.setSize(400, 400); - jf.setVisible(true); + @Override + public boolean shouldResponseNameListener() { + return true; } diff --git a/designer-realize/src/com/fr/design/dscolumn/DSColumnPane.java b/designer-realize/src/com/fr/design/dscolumn/DSColumnPane.java index 2e5d25189..af48fb853 100644 --- a/designer-realize/src/com/fr/design/dscolumn/DSColumnPane.java +++ b/designer-realize/src/com/fr/design/dscolumn/DSColumnPane.java @@ -1,26 +1,30 @@ package com.fr.design.dscolumn; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import javax.swing.JPanel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - import com.fr.base.FRContext; import com.fr.data.TableDataSource; +import com.fr.design.dialog.BasicPane; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.dialog.BasicPane; -import com.fr.general.Inter; import com.fr.design.mainframe.ElementCasePane; +import com.fr.general.Inter; import com.fr.report.cell.CellElement; import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.TemplateCellElement; +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +/** + * @author null + * @version 2018年2月9日13点47分 + * @since 8.0 + */ public class DSColumnPane extends BasicPane { private TableDataSource tplEC; @@ -29,17 +33,56 @@ public class DSColumnPane extends BasicPane { private DSColumnConditionsPane conditionPane = null; private DSColumnAdvancedPane advancedPane = null; private TemplateCellElement cellElement; - protected Component lastSelectedComponent; - + private Component lastSelectedComponent; + public static final int SETTING_ALL = 2; public static final int SETTING_DSRELATED = 1; - + + + private ChangeListener appliedWizardTabChangeListener = new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent evt) { + try { + if (lastSelectedComponent == null) { + lastSelectedComponent = basicPane; + } + // selectTabComponent是正要切换到的那个Pane + Component selectTabComponent = tabbedPane.getSelectedComponent(); + // denny: 如果切换Tab时上一个Pane是basicPane, 则刷新一下其他Pane, + // 因为选择的数据列可能改变, 导致后面过滤和使用公式用到的数据项改变 + if (lastSelectedComponent == basicPane) { + basicPane.update(cellElement); + + // denny_GUI: 刷新其他面板 + refreshOtherTabs(); + } + // 切换标签的时候就,确认是否有没有添加到列表中的条件 + lastSelectedComponent = selectTabComponent; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + + } + }; + /** + * cellElement 改变时,刷新一下 + * 比如:上边切换Tab时,basicPane Update了一下,可能会改变Field cellElement的值 + */ + private PropertyChangeListener myPropertyChangeListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + refreshOtherTabs(); + } + }; + public DSColumnPane() { - this.initComponents(SETTING_ALL); + this(SETTING_ALL); } - + public DSColumnPane(int setting) { - this.initComponents(setting); + this.initComponents(setting); } protected void initComponents(int setting) { @@ -65,18 +108,22 @@ public class DSColumnPane extends BasicPane { this.setPreferredSize(new Dimension(610, 400)); } - + @Override protected String title4PopupWindow() { - return Inter.getLocText("ExpandD-Data_Column"); + return Inter.getLocText("ExpandD-Data_Column"); } - /* - * populate + /** + * 更新面板信息 + * + * @param tds 数据源 + * @param cellElement 单元格 + * @throws Exception e */ public void populate(TableDataSource tds, TemplateCellElement cellElement) throws Exception { - this.tplEC = tds; - + this.tplEC = tds; + if (tds == null || cellElement == null) { // _denny: 我不认为这种情况应该出现,以防万一 this.cellElement = new DefaultTemplateCellElement(); @@ -85,15 +132,18 @@ public class DSColumnPane extends BasicPane { // _denny: 这边需要克隆一下,因为在设置时,可能改变字段cellElement,但改变真实值是不被期望的 try { this.cellElement = (TemplateCellElement) cellElement.clone(); - } catch (CloneNotSupportedException ce) { + } catch (CloneNotSupportedException ignored) { } + //REPORT-7744 9.0里面过滤条件和高级设置可以通过其他地方设置,populate的时候需要更新所有面板的信息,防止设置丢失 this.basicPane.populate(tds, this.cellElement); this.conditionPane.populate(tds, this.cellElement); this.advancedPane.populate(this.cellElement); } - /* - * update + /** + * update 保存 + * + * @return 单元格信息 */ public CellElement update() { this.basicPane.update(cellElement); @@ -101,54 +151,24 @@ public class DSColumnPane extends BasicPane { this.advancedPane.update(cellElement); return cellElement; } - public ChangeListener appliedWizardTabChangeListener = new ChangeListener() { - - public void stateChanged(ChangeEvent evt) { - try { - if (lastSelectedComponent == null) { - lastSelectedComponent = basicPane; - } - //selectTabComponent是正要切换到的那个Pane - Component selectTabComponent = tabbedPane.getSelectedComponent(); - // _denny: 如果切换Tab时上一个Pane是basicPane, 则刷新一下其他Pane, - // 因为选择的数据列可能改变, 导致后面过滤和使用公式用到的数据项改变 - if (lastSelectedComponent == basicPane) { - basicPane.update(cellElement); - - // denny_GUI: 刷新其他面板 - refrushOtherTabs(); - } - // 切换标签的时候就,确认是否有没有添加到列表中的条件 - lastSelectedComponent = selectTabComponent; - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } - }; - // cellElement 改变时,刷新一下 - // 比如:上边切换Tab时,basicPane Update了一下,可能会改变Field cellElement的值 - PropertyChangeListener myPropertyChangeListener = new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - refrushOtherTabs(); - } - }; - - //_denny:当数据tab中的数据发生变化的时候刷新后面的tab - public void refrushOtherTabs() { - // ——deny:当JTabPane中加入一个Pane时,后面的Pane可能还没有初始化 + /** + * denny:当数据tab中的数据发生变化的时候刷新后面的tab + */ + private void refreshOtherTabs() { + // deny:当JTabPane中加入一个Pane时,后面的Pane可能还没有初始化 if (conditionPane == null || advancedPane == null) { return; } this.conditionPane.populate(tplEC, cellElement); this.advancedPane.populate(cellElement); } - public void putElementcase(ElementCasePane t){ - basicPane.putElementcase(t); + + public void putElementcase(ElementCasePane t) { + basicPane.putElementcase(t); } - public void putCellElement(TemplateCellElement tplCE) { - basicPane.putCellElement(tplCE); - } + public void putCellElement(TemplateCellElement tplCE) { + basicPane.putCellElement(tplCE); + } } \ No newline at end of file From 2eaeba9f964ea531d19d43be00cedc7340fc932f Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:04:24 +0800 Subject: [PATCH 15/29] =?UTF-8?q?REPORT-6949=20=E6=9D=A1=E4=BB=B6=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E7=9A=84=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E5=90=8E=E4=BC=9A=E8=87=AA=E5=8A=A8=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=B6=85=E7=BA=A7=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/gui/frpane/HyperlinkGroupPane.java | 34 +++++++++----- .../HyperlinkGroupPaneActionProvider.java | 14 ++++++ .../gui/xpane/FormHyperlinkGroupPane.java | 47 ++++++++++--------- .../mainframe/ElementCasePaneDelegate.java | 36 +++++++------- .../ReportHyperlinkGroupPaneNoPop.java | 5 ++ 5 files changed, 84 insertions(+), 52 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java b/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java index 5e7ce6627..17a33419e 100644 --- a/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java +++ b/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPane.java @@ -44,15 +44,12 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { @Override public void on(PluginEvent event) { - - refreshNameableCreator(createNameableCreators()); - + refreshNameableCreator(createNameableCreators()); } }, new PluginFilter() { @Override public boolean accept(PluginContext context) { - return context.contain(HyperlinkProvider.XML_TAG); } }); @@ -63,6 +60,7 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { * * @return 返回Nameable按钮数组. */ + @Override public NameableCreator[] createNameableCreators() { Map nameCreators = new ListMap<>(); NameableCreator[] creators = DesignModuleFactory.getHyperlinkGroupType().getHyperlinkCreators(); @@ -82,6 +80,7 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { * * @return 返回标题字符串. */ + @Override public String title4PopupWindow() { return Inter.getLocText("FR-Designer_Hyperlink"); } @@ -91,11 +90,11 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { return Inter.getLocText("FR-Designer_Add_Hyperlink"); } - public void populate(NameJavaScriptGroup nameHyperlink_array) { - java.util.List list = new ArrayList(); - if (nameHyperlink_array != null) { - for (int i = 0; i < nameHyperlink_array.size(); i++) { - list.add(new NameObject(nameHyperlink_array.getNameHyperlink(i).getName(), nameHyperlink_array.getNameHyperlink(i).getJavaScript())); + public void populate(NameJavaScriptGroup hyperlinkArray) { + java.util.List list = new ArrayList<>(); + if (hyperlinkArray != null) { + for (int i = 0; i < hyperlinkArray.size(); i++) { + list.add(new NameObject(hyperlinkArray.getNameHyperlink(i).getName(), hyperlinkArray.getNameHyperlink(i).getJavaScript())); } } @@ -113,20 +112,29 @@ public abstract class HyperlinkGroupPane extends UIListControlPane { */ public NameJavaScriptGroup updateJSGroup() { Nameable[] res = this.update(); - NameJavaScript[] res_array = new NameJavaScript[res.length]; + NameJavaScript[] resArray = new NameJavaScript[res.length]; for (int i = 0; i < res.length; i++) { NameObject no = (NameObject) res[i]; - res_array[i] = new NameJavaScript(no.getName(), (JavaScript) no.getObject()); + resArray[i] = new NameJavaScript(no.getName(), (JavaScript) no.getObject()); } - return new NameJavaScriptGroup(res_array); + return new NameJavaScriptGroup(resArray); } @Override public void saveSettings() { - if (isPopulating) { + if (isPopulating || !needAutoSave()) { return; } hyperlinkGroupPaneActionProvider.saveSettings(this); } + + /** + * 是否需要自动保存到超级链接属性中 + * + * @return 是否需要自动保存 + */ + public boolean needAutoSave() { + return true; + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java b/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java index a5f7ae9a6..525bb5b79 100644 --- a/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java +++ b/designer-base/src/com/fr/design/gui/frpane/HyperlinkGroupPaneActionProvider.java @@ -3,9 +3,23 @@ package com.fr.design.gui.frpane; import com.fr.design.designer.TargetComponent; /** + * @author plough * Created by plough on 2017/7/26. */ public interface HyperlinkGroupPaneActionProvider { + + /** + * 刷新面板展示 + * + * @param hyperlinkGroupPane 超链面板 + * @param elementCasePane 模板 + */ void populate(HyperlinkGroupPane hyperlinkGroupPane, TargetComponent elementCasePane); + + /** + * 保存到文件 + * + * @param hyperlinkGroupPane 超联面板 + */ void saveSettings(HyperlinkGroupPane hyperlinkGroupPane); } diff --git a/designer-form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java b/designer-form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java index 2f879792e..e96eef26e 100644 --- a/designer-form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java +++ b/designer-form/src/com/fr/design/gui/xpane/FormHyperlinkGroupPane.java @@ -1,42 +1,43 @@ package com.fr.design.gui.xpane; +import com.fr.design.form.javascript.FormEmailPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameableCreator; import com.fr.design.gui.frpane.HyperlinkGroupPane; -import com.fr.design.form.javascript.FormEmailPane; import com.fr.design.gui.frpane.HyperlinkGroupPaneActionProvider; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.js.EmailJavaScript; -public class FormHyperlinkGroupPane extends HyperlinkGroupPane{ - private static FormHyperlinkGroupPane singleton; +public class FormHyperlinkGroupPane extends HyperlinkGroupPane { + private static FormHyperlinkGroupPane singleton; - protected FormHyperlinkGroupPane(HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider) { - super(hyperlinkGroupPaneActionProvider); - } + protected FormHyperlinkGroupPane(HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider) { + super(hyperlinkGroupPaneActionProvider); + } - public synchronized static FormHyperlinkGroupPane getInstance(HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider) { - if (singleton == null) { - singleton = new FormHyperlinkGroupPane(hyperlinkGroupPaneActionProvider); - } - return singleton; - } + public synchronized static FormHyperlinkGroupPane getInstance(HyperlinkGroupPaneActionProvider hyperlinkGroupPaneActionProvider) { + if (singleton == null) { + singleton = new FormHyperlinkGroupPane(hyperlinkGroupPaneActionProvider); + } + return singleton; + } - /** + /** * 生成添加按钮的NameableCreator * 由于表单报表块的单元格超链和单元格条件属性超链中的emailPane都要用表单的emailPane,这里调整下 * * @return 返回Nameable按钮数组. */ - public NameableCreator[] createNameableCreators() { - NameableCreator[] creators = super.createNameableCreators(); - for (int i=0; i { CellElementPropertyPane.getInstance().populate(ElementCasePaneDelegate.this); QuickEditorRegion.getInstance().populate(getCurrentEditor()); JTemplate editingTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); + // 模板初始化完成后,才能初始化超级链接面板 if (editingTemplate != null && !editingTemplate.isUpMode()) { Selection editingSelection = getSelection(); - // 模板初始化完成后,才能初始化超级链接面板 + // 获取超级链接面板并刷新显示 HyperlinkGroupPane hyperlinkGroupPane = editingTemplate.getHyperLinkPane(HyperlinkGroupPaneActionImpl.getInstance()); - hyperlinkGroupPane.populate(ElementCasePaneDelegate.this); if (editingSelection instanceof FloatSelection) { EastRegionContainerPane.getInstance().switchMode(EastRegionContainerPane.PropertyMode.REPORT_FLOAT); JPanel floatPane = new JPanel(new BorderLayout()); diff --git a/designer-realize/src/com/fr/design/mainframe/ReportHyperlinkGroupPaneNoPop.java b/designer-realize/src/com/fr/design/mainframe/ReportHyperlinkGroupPaneNoPop.java index 451c89975..91c8b65d8 100644 --- a/designer-realize/src/com/fr/design/mainframe/ReportHyperlinkGroupPaneNoPop.java +++ b/designer-realize/src/com/fr/design/mainframe/ReportHyperlinkGroupPaneNoPop.java @@ -24,4 +24,9 @@ public class ReportHyperlinkGroupPaneNoPop extends ReportHyperlinkGroupPane{ protected boolean isNewStyle() { return false; } + + @Override + public boolean needAutoSave() { + return false; + } } From e06c49e5c539ad5b381d8049b1eeee1565a91240 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:17:35 +0800 Subject: [PATCH 16/29] =?UTF-8?q?REPORT-6973=20=E6=A8=A1=E6=9D=BF=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E4=BA=8B=E4=BB=B6=20=E6=8F=92=E4=BB=B6=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/extra/LoginDialog.java | 17 +++- .../com/fr/design/extra/WebViewDlgHelper.java | 53 ++++++++--- .../fr/design/mainframe/bbs/UserInfoPane.java | 90 +++++++++++-------- .../src/com/fr/start/Designer.java | 2 +- 4 files changed, 110 insertions(+), 52 deletions(-) diff --git a/designer-base/src/com/fr/design/extra/LoginDialog.java b/designer-base/src/com/fr/design/extra/LoginDialog.java index 6ae8a63f9..33983baf2 100644 --- a/designer-base/src/com/fr/design/extra/LoginDialog.java +++ b/designer-base/src/com/fr/design/extra/LoginDialog.java @@ -4,8 +4,12 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.stable.StableUtils; -import javax.swing.*; -import java.awt.*; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; /** * Created by vito on 2017/5/5. @@ -15,6 +19,15 @@ public class LoginDialog extends UIDialog { public LoginDialog(Frame frame, Component pane) { super(frame); + init(pane); + } + + public LoginDialog(Dialog dialog, Component pane) { + super(dialog); + init(pane); + } + + private void init(Component pane) { if (StableUtils.getMajorJavaVersion() == 8) { setUndecorated(true); } diff --git a/designer-base/src/com/fr/design/extra/WebViewDlgHelper.java b/designer-base/src/com/fr/design/extra/WebViewDlgHelper.java index 59fb61276..461f950bd 100644 --- a/designer-base/src/com/fr/design/extra/WebViewDlgHelper.java +++ b/designer-base/src/com/fr/design/extra/WebViewDlgHelper.java @@ -22,6 +22,9 @@ import javax.swing.JOptionPane; import javax.swing.SwingWorker; import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.Window; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; @@ -133,18 +136,22 @@ public class WebViewDlgHelper { if (StableUtils.getMajorJavaVersion() == VERSION_8) { File file = new File(StableUtils.pathJoin(installHome, "scripts")); if (!file.exists()) { - int rv = JOptionPane.showConfirmDialog( - null, - Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), - Inter.getLocText("FR-Designer-Plugin_Warning"), - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.INFORMATION_MESSAGE - ); - if (rv == JOptionPane.OK_OPTION) { - downloadShopScripts(SHOP_SCRIPTS); - } + confirmDownLoadShopJS(); } else { - showLoginDlg(); + showLoginDlg(DesignerContext.getDesignerFrame()); + updateShopScripts(SHOP_SCRIPTS); + } + } + } + + + public static void createLoginDialog(Window parent) { + if (StableUtils.getMajorJavaVersion() == VERSION_8) { + File file = new File(StableUtils.pathJoin(installHome, "scripts")); + if (!file.exists()) { + confirmDownLoadShopJS(); + } else { + showLoginDlg(parent); updateShopScripts(SHOP_SCRIPTS); } } @@ -164,6 +171,20 @@ public class WebViewDlgHelper { } } + + private static void confirmDownLoadShopJS() { + int rv = JOptionPane.showConfirmDialog( + null, + Inter.getLocText("FR-Designer-Plugin_Shop_Need_Install"), + Inter.getLocText("FR-Designer-Plugin_Warning"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.INFORMATION_MESSAGE + ); + if (rv == JOptionPane.OK_OPTION) { + downloadShopScripts(SHOP_SCRIPTS); + } + } + private static void showPluginDlg(String mainJsPath) { try { Class clazz = Class.forName("com.fr.design.extra.PluginWebPane"); @@ -179,13 +200,17 @@ public class WebViewDlgHelper { } } - private static void showLoginDlg() { + private static void showLoginDlg(Window window) { try { Class clazz = Class.forName("com.fr.design.extra.LoginWebPane"); Constructor constructor = clazz.getConstructor(String.class); Component webPane = (Component) constructor.newInstance(installHome); - - UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); + UIDialog qqdlg; + if (window instanceof Dialog) { + qqdlg = new LoginDialog((Dialog) window, webPane); + } else { + qqdlg = new LoginDialog((Frame) window, webPane); + } LoginWebBridge.getHelper().setDialogHandle(qqdlg); qqdlg.setVisible(true); } catch (Throwable ignored) { diff --git a/designer-realize/src/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer-realize/src/com/fr/design/mainframe/bbs/UserInfoPane.java index 3fae72f92..69392dd39 100644 --- a/designer-realize/src/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer-realize/src/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -11,7 +11,6 @@ import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; import com.fr.design.mainframe.DesignerContext; import com.fr.general.DateUtils; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.stable.EnvChangedListener; @@ -32,27 +31,42 @@ import java.util.Date; */ public class UserInfoPane extends BasicPane { - //默认未登录颜色 + /** + * 默认未登录颜色 + */ private static final Color UN_LOGIN_BACKGROUND = UIConstants.TEMPLATE_TAB_PANE_BACKGROUND; private static final Color LOGIN_BACKGROUND = new Color(184, 220, 242); private static final int WIDTH = 104; private static final int HEIGHT = 24; - //登录成功 + /** + * 登录成功 + */ private static final String LOGININ = "0"; - // 登录框弹出间隔时间 + /** + * 登录框弹出间隔时间 + */ private static final int LOGIN_DIFF_DAY = 7; - // 等待国际化等相关初始化工作完成之后再弹出登录框 + /** + * 等待国际化等相关初始化工作完成之后再弹出登录框 + */ private static final int WAIT_TIME = 10000; private UserInfoLabel userInfoLabel; + private static UserInfoPane instance = new UserInfoPane(); + + + public static UserInfoPane getInstance() { + return instance; + } + /** * 构造函数 */ - public UserInfoPane() { + private UserInfoPane() { this.setPreferredSize(new Dimension(WIDTH, HEIGHT)); this.setLayout(new BorderLayout()); @@ -73,6 +87,34 @@ public class UserInfoPane extends BasicPane { this.userInfoLabel = userInfoLabel; } + + /** + * 标志未登录状态, 面板设置为灰色 + */ + public void markUnSignIn() { + this.userInfoLabel.setText(Inter.getLocText("FR-Base_UnSignIn")); + this.userInfoLabel.setOpaque(true); + this.userInfoLabel.setBackground(UN_LOGIN_BACKGROUND); + this.userInfoLabel.resetUserName(); + } + + /** + * 标志登陆状态, 面包设置为蓝色 + * + * @param userName 用户名 + */ + public void markSignIn(String userName) { + this.userInfoLabel.setText(userName); + this.userInfoLabel.setUserName(userName); + this.userInfoLabel.setOpaque(true); + this.userInfoLabel.setBackground(LOGIN_BACKGROUND); + } + + @Override + protected String title4PopupWindow() { + return StringUtils.EMPTY; + } + private void addEnvChangedListener() { GeneralContext.addEnvChangedListener(new EnvChangedListener() { @Override @@ -90,11 +132,15 @@ public class UserInfoPane extends BasicPane { } - // 计算xml保存的上次弹框时间和当前时间的时间差 + /** + * 计算xml保存的上次弹框时间和当前时间的时间差 + * + * @return 时间差 + */ private int getDiffFromLastLogin() { String lastBBSTime = DesignerEnvManager.getEnvManager().getLastShowBBSTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Date lastBBSDate = null; + Date lastBBSDate; try { if (lastBBSTime != null) { synchronized (this) { @@ -108,7 +154,7 @@ public class UserInfoPane extends BasicPane { return dayNew - dayOld; } } catch (ParseException e) { - FRLogger.getLogger().error(e.getMessage()); + FRContext.getLogger().error(e.getMessage()); } return 1; } @@ -153,31 +199,5 @@ public class UserInfoPane extends BasicPane { showBBSThread.start(); } - /** - * 标志未登录状态, 面板设置为灰色 - */ - public void markUnSignIn() { - this.userInfoLabel.setText(Inter.getLocText("FR-Base_UnSignIn")); - this.userInfoLabel.setOpaque(true); - this.userInfoLabel.setBackground(UN_LOGIN_BACKGROUND); - this.userInfoLabel.resetUserName(); - } - - /** - * 标志登陆状态, 面包设置为蓝色 - * - * @param userName 用户名 - */ - public void markSignIn(String userName) { - this.userInfoLabel.setText(userName); - this.userInfoLabel.setUserName(userName); - this.userInfoLabel.setOpaque(true); - this.userInfoLabel.setBackground(LOGIN_BACKGROUND); - } - - @Override - protected String title4PopupWindow() { - return StringUtils.EMPTY; - } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/start/Designer.java b/designer-realize/src/com/fr/start/Designer.java index af2ababb1..7ee3e6f35 100644 --- a/designer-realize/src/com/fr/start/Designer.java +++ b/designer-realize/src/com/fr/start/Designer.java @@ -369,7 +369,7 @@ public class Designer extends BaseDesigner { @Override public Component createBBSLoginPane() { if (userInfoPane == null) { - userInfoPane = new UserInfoPane(); + userInfoPane = UserInfoPane.getInstance(); } return userInfoPane; } From fe9584ccfe4861372923c937644e6311e344dc5a Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:30:13 +0800 Subject: [PATCH 17/29] =?UTF-8?q?=E6=97=A0=E4=BB=BB=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E5=81=9A=E7=9F=AD=E4=BF=A1=E4=BA=8B=E4=BB=B6=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E7=9A=84=E8=AE=BE=E8=AE=A1=E5=99=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/editor/editor/ColumnRowEditor.java | 125 +++++++++--------- .../fr/design/editor/editor/TextEditor.java | 34 +++-- 2 files changed, 91 insertions(+), 68 deletions(-) diff --git a/designer-base/src/com/fr/design/editor/editor/ColumnRowEditor.java b/designer-base/src/com/fr/design/editor/editor/ColumnRowEditor.java index d596b8c6e..2da3bc310 100644 --- a/designer-base/src/com/fr/design/editor/editor/ColumnRowEditor.java +++ b/designer-base/src/com/fr/design/editor/editor/ColumnRowEditor.java @@ -4,71 +4,78 @@ import com.fr.design.gui.columnrow.ColumnRowPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.stable.ColumnRow; -import java.awt.*; +import java.awt.BorderLayout; /** * the editor to edit ColumnRow * - * @editor zhou + * @author zhou * @since 2012-3-29下午6:01:37 */ public class ColumnRowEditor extends Editor { - private ColumnRowPane crPane; - - public ColumnRowEditor() { - this(""); - } - - public ColumnRowEditor(String name) { - this(null, name); - } - - - public ColumnRowEditor(ColumnRow value) { - this(value, ""); - } - - public ColumnRowEditor(ColumnRow value, String name) { - this.setLayout(FRGUIPaneFactory.createBorderLayout()); - crPane = new ColumnRowPane(); - this.add(crPane, BorderLayout.CENTER); - this.setValue(value); - this.setName(name); - } - - @Override - public ColumnRow getValue() { - return this.crPane.update(); - } - - @Override - public void setValue(ColumnRow value) { - if (value == null) { - value = ColumnRow.valueOf(0, 0); - } - - this.crPane.populate(value); - } - - @Override - public void setEnabled(boolean enabled) { - super.setEnabled(enabled); - - this.crPane.setEnabled(enabled); - } - - @Override - public void requestFocus() { - this.crPane.requestFocus(); - } - - public String getIconName() { - return "cell"; - } - - @Override - public boolean accept(Object object) { - return object instanceof ColumnRow; - } + private ColumnRowPane crPane; + + public ColumnRowEditor() { + this(""); + } + + public ColumnRowEditor(String name) { + this(null, name); + } + + + public ColumnRowEditor(ColumnRow value) { + this(value, ""); + } + + public ColumnRowEditor(ColumnRow value, String name) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + crPane = new ColumnRowPane(); + this.add(crPane, BorderLayout.CENTER); + this.setValue(value); + this.setName(name); + } + + @Override + public ColumnRow getValue() { + return this.crPane.update(); + } + + @Override + public void setValue(ColumnRow value) { + if (value == null) { + value = ColumnRow.valueOf(0, 0); + } + + this.crPane.populate(value); + } + + @Override + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + + this.crPane.setEnabled(enabled); + } + + @Override + public void requestFocus() { + this.crPane.requestFocus(); + } + + @Override + public String getIconName() { + return "cell"; + } + + @Override + public boolean accept(Object object) { + return object instanceof ColumnRow; + } + + @Override + public void clearData() { + super.clearData(); + this.setValue(null); + } } \ No newline at end of file diff --git a/designer-base/src/com/fr/design/editor/editor/TextEditor.java b/designer-base/src/com/fr/design/editor/editor/TextEditor.java index 8700db078..630f6956a 100644 --- a/designer-base/src/com/fr/design/editor/editor/TextEditor.java +++ b/designer-base/src/com/fr/design/editor/editor/TextEditor.java @@ -3,26 +3,31 @@ */ package com.fr.design.editor.editor; -import java.awt.BorderLayout; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; - import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.Inter; import com.fr.stable.StringUtils; +import java.awt.BorderLayout; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; + /** * CellEditor used to edit String object. * - * @editor zhou + * @author zhou * @since 2012-3-29下午6:00:43 */ public class TextEditor extends Editor { - private UITextField textField; // text field. - // the old value of text field. + /** + * text field. + */ + private UITextField textField; + /** + * the old value of text field. + */ private String oldValue = StringUtils.EMPTY; /** @@ -93,7 +98,7 @@ public class TextEditor extends Editor { value = StringUtils.EMPTY; } - oldValue = value.toString(); + oldValue = value; this.textField.setText(oldValue); } @@ -110,6 +115,7 @@ public class TextEditor extends Editor { /** * 请求焦点 */ + @Override public void requestFocus() { this.textField.requestFocus(); } @@ -133,10 +139,12 @@ public class TextEditor extends Editor { /** * 被选中时文本输入框请求焦点 */ + @Override public void selected() { this.textField.requestFocus(); } + @Override public String getIconName() { return "type_string"; } @@ -147,7 +155,15 @@ public class TextEditor extends Editor { * @param object 需要判断的object * @return 是字符类型则返回true */ + @Override public boolean accept(Object object) { return object instanceof String; } + + @Override + public void clearData() { + super.clearData(); + this.textField.setText(StringUtils.EMPTY); + this.oldValue = StringUtils.EMPTY; + } } \ No newline at end of file From b215a6abed009074e0c66d37bdaa801a845c155b Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:32:01 +0800 Subject: [PATCH 18/29] =?UTF-8?q?REPORT-7261=20=E5=8F=B3=E4=BE=A7=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E7=BC=96=E8=BE=91=E9=9D=A2=E6=9D=BF=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/gui/controlpane/UIControlPane.java | 64 +++++++++++++++---- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/designer-base/src/com/fr/design/gui/controlpane/UIControlPane.java b/designer-base/src/com/fr/design/gui/controlpane/UIControlPane.java index bc37a2549..d0a4c12c5 100644 --- a/designer-base/src/com/fr/design/gui/controlpane/UIControlPane.java +++ b/designer-base/src/com/fr/design/gui/controlpane/UIControlPane.java @@ -17,10 +17,34 @@ import com.fr.stable.ArrayUtils; import com.fr.stable.Nameable; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JSplitPane; import javax.swing.border.EmptyBorder; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsEnvironment; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; /** * Created by plough on 2017/7/21. @@ -47,7 +71,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH } public UIControlPane(BasePlot plot) { - this.plot =plot; + this.plot = plot; this.initComponentPane(); } @@ -145,8 +169,8 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH this.checkButtonEnabled(); } - protected void getPopupEditDialog (JPanel cardPane) { - popupEditDialog = new PopupEditDialog(cardPane); + protected void getPopupEditDialog(JPanel cardPane) { + popupEditDialog = new PopupEditDialog(cardPane); } protected abstract JPanel createControlUpdatePane(); @@ -169,7 +193,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH toolbarDef.addShortCut(sj.getShortCut()); } toolBar = ToolBarDef.createJToolBar(); - toolBar.setUI(new UIToolBarUI(){ + toolBar.setUI(new UIToolBarUI() { @Override public void paint(Graphics g, JComponent c) { Graphics2D g2 = (Graphics2D) g; @@ -186,7 +210,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH leftContentPane.add(toolBarPane, BorderLayout.NORTH); // 顶部标签及add按钮 - topToolBar = new UIToolbar(FlowLayout.LEFT, new UIToolBarUI(){ + topToolBar = new UIToolbar(FlowLayout.LEFT, new UIToolBarUI() { @Override public void paint(Graphics g, JComponent c) { Graphics2D g2 = (Graphics2D) g; @@ -207,15 +231,15 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH return leftPane; } - protected JPanel getLeftTopPane (UIToolbar topToolBar) { + protected JPanel getLeftTopPane(UIToolbar topToolBar) { double p = TableLayout.PREFERRED; double f = TableLayout.FILL; - double[] columnSize = { p, f, isNewStyle() ? TOP_TOOLBAR_WIDTH : TOP_TOOLBAR_WIDTH_SHORT}; + double[] columnSize = {p, f, isNewStyle() ? TOP_TOOLBAR_WIDTH : TOP_TOOLBAR_WIDTH_SHORT}; double[] rowSize = {TOP_TOOLBAR_HEIGHT}; Component[][] components = new Component[][]{ new Component[]{new UILabel(getAddItemText()), new JPanel(), topToolBar}, }; - return TableLayoutHelper.createTableLayoutPane(components,rowSize,columnSize); + return TableLayoutHelper.createTableLayoutPane(components, rowSize, columnSize); } /** @@ -336,6 +360,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH initListener(); } + @Override public void setTitle(String title) { popupToolPane.setTitle(title); } @@ -349,10 +374,21 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH } // 如果有可见模态对话框,则不隐藏 for (Window window : DesignerContext.getDesignerFrame().getOwnedWindows()) { - if (window instanceof JDialog && window.isVisible() && ((JDialog)window).isModal()) { + if (window instanceof JDialog && window.isVisible() && ((JDialog) window).isModal()) { return; } } + + // 要隐藏 先检查有没有非法输入 + // 非法输入检查放在最后,因为可能出现面板弹出新弹框而失去焦点的情况,比如 输入公式时,弹出公式编辑对话框 + try { + checkValid(); + } catch (Exception exp) { + // 存在非法输入 拒绝隐藏 + JOptionPane.showMessageDialog(UIControlPane.this.controlUpdatePane, exp.getMessage()); + this.requestFocus(); + return; + } saveSettings(); setVisible(false); } @@ -361,7 +397,6 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH addWindowFocusListener(new WindowAdapter() { @Override public void windowLostFocus(WindowEvent e) { - super.windowLostFocus(e); hideDialog(); } }); @@ -389,6 +424,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH } repaint(); } + @Override public void mouseReleased(MouseEvent e) { mouseDownCompCoords = null; @@ -396,6 +432,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH contentPane.setBackground(originColor); } } + @Override public void mousePressed(MouseEvent e) { mouseDownCompCoords = e.getPoint(); @@ -409,6 +446,7 @@ public abstract class UIControlPane extends BasicPane implements UnrepeatedNameH contentPane.setBackground(UIConstants.POPUP_TITLE_BACKGROUND); repaint(); } + @Override public void mouseDragged(MouseEvent e) { if (mouseDownCompCoords != null) { From 108372f534fa23b1028a458f08b457def20c2746 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:39:55 +0800 Subject: [PATCH 19/29] =?UTF-8?q?REPORT-8105=20=E4=BF=AE=E6=94=B9=E7=BB=9D?= =?UTF-8?q?=E5=AF=B9=E7=94=BB=E5=B8=83=E5=9D=97=E7=BC=A9=E6=94=BE=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/designer/creator/XWAbsoluteLayout.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/designer-form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java b/designer-form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java index 58c5f74dd..6a03f48c5 100644 --- a/designer-form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java +++ b/designer-form/src/com/fr/design/designer/creator/XWAbsoluteLayout.java @@ -292,6 +292,11 @@ public class XWAbsoluteLayout extends XLayoutContainer { this.setLayout(new FRAbsoluteLayout()); } + @Override + protected void initStyle() { + // do nothing + } + /** * 是否支持标题样式 * From 501ea1fb40ac0d645cc1074cefeda0ba5940f044 Mon Sep 17 00:00:00 2001 From: "yaoh.wu" Date: Tue, 29 May 2018 19:48:25 +0800 Subject: [PATCH 20/29] =?UTF-8?q?REPORT-8114=20=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E5=AD=97=E5=85=B8=20=E8=AE=BE=E8=AE=A1=E5=99=A8=E6=97=A0?= =?UTF-8?q?=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/data/datapane/ChoosePane.java | 110 +++++++++++------- 1 file changed, 71 insertions(+), 39 deletions(-) diff --git a/designer-base/src/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/com/fr/design/data/datapane/ChoosePane.java index 5e9c16bde..281a61de5 100644 --- a/designer-base/src/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/com/fr/design/data/datapane/ChoosePane.java @@ -37,7 +37,11 @@ import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.SwingWorker; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.PopupMenuEvent; @@ -48,7 +52,9 @@ import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -85,6 +91,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha private PopupMenuListener popupMenuListener = new PopupMenuListener() { + @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { new Thread() { @Override @@ -94,26 +101,41 @@ public class ChoosePane extends BasicBeanPane implements Refresha }.start(); } + @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { } + @Override public void popupMenuCanceled(PopupMenuEvent e) { } }; private PopupMenuListener listener = new PopupMenuListener() { + @Override public void popupMenuCanceled(PopupMenuEvent e) { } + @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { } + @Override public void popupMenuWillBecomeVisible(PopupMenuEvent e) { executePopulateWorker(); } }; + private FocusAdapter focusAdapter = new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (schemaBox.getSelectedIndex() == -1) { + schemaBox.updateUI(); + schemaBox.showPopup(); + } + } + }; + public ChoosePane() { this(null); } @@ -146,6 +168,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha private void initBoxListener() { addDSBoxListener(); schemaBox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent evt) { tableNameComboBox.setSelectedItem(""); } @@ -176,16 +199,9 @@ public class ChoosePane extends BasicBeanPane implements Refresha } protected void addFocusListener() { - schemaBox.addFocusListener(new FocusAdapter() { - public void focusGained(FocusEvent e) { - if (schemaBox.getSelectedIndex() == -1) { - schemaBox.updateUI(); - schemaBox.showPopup(); - } - } - }); } + @SuppressWarnings("unchecked") protected void initDsNameComboBox() { dsNameComboBox.setRefreshingModel(true); ConnectionConfig connectionConfig = ConnectionConfig.getInstance(); @@ -233,12 +249,18 @@ public class ChoosePane extends BasicBeanPane implements Refresha } populateWorker = new SwingWorker() { - protected com.fr.data.impl.Connection doInBackground() throws Exception { + @SuppressWarnings("unchecked") + @Override + protected com.fr.data.impl.Connection doInBackground() { + schemaBox.setRefreshingModel(true); schemaBox.addItem(Inter.getLocText("FR-Designer_Loading") + "..."); schemaBox.setSelectedItem(null); + schemaBox.setRefreshingModel(false); return getConnection(); } + @SuppressWarnings("unchecked") + @Override public void done() { try { com.fr.data.impl.Connection selectedDatabase = get(); @@ -267,6 +289,8 @@ public class ChoosePane extends BasicBeanPane implements Refresha schemaBox.removePopupMenuListener(listener); schemaBox.setPopupVisible(true); schemaBox.addPopupMenuListener(listener); + schemaBox.removeFocusListener(focusAdapter); + schemaBox.addFocusListener(focusAdapter); } }; populateWorker.execute(); @@ -292,7 +316,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha return null; // peter:选中了当前的零长度的节点,直接返回. } ConnectionConfig connectionConfig = ConnectionConfig.getInstance(); - for (Map.Entry entry: connectionConfig.getConnections().entrySet()) { + for (Map.Entry entry : connectionConfig.getConnections().entrySet()) { if (ComparatorUtils.equals(selectedDSName, entry.getKey())) { return entry.getValue(); } @@ -303,6 +327,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** * 刷新没多大用。而且要刷新也不是这儿刷新。 */ + @Override public void refresh() { DBUtils.refreshDatabase(); String schema = StringUtils.isEmpty(schemaBox.getSelectedItem()) ? null : schemaBox.getSelectedItem(); @@ -312,6 +337,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha } TreeCellRenderer tableNameTreeRenderer = new DefaultTreeCellRenderer() { + @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); if (value instanceof DefaultMutableTreeNode) { @@ -328,6 +354,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha }; public static UIComboBoxRenderer listCellRenderer = new UIComboBoxRenderer() { + @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (value instanceof TreePath) { @@ -344,16 +371,18 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** - * 添加项目监听事件 - * @param aListener 事件监听器 + * 添加项目监听事件 + * + * @param aListener 事件监听器 */ public void addItemListener(ItemListener aListener) { this.tableNameComboBox.addItemListener(aListener); } /** - * 删除项目监听事件 - * @param aListener 事件监听器 + * 删除项目监听事件 + * + * @param aListener 事件监听器 */ public void removeItemListener(ItemListener aListener) { this.tableNameComboBox.removeItemListener(aListener); @@ -398,9 +427,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha } } ((DefaultTreeModel) tree.getModel()).reload(); - /** - * daniel 展开所有tree - */ + // daniel 展开所有tree TreeNode root = (TreeNode) tree.getModel().getRoot(); TreePath parent = new TreePath(root); TreeNode node = (TreeNode) parent.getLastPathComponent(); @@ -416,42 +443,41 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** * 创建选中的数据集数据 - * @return 数据集数据 + * + * @return 数据集数据 */ public TableData createSelectTableData() { DataBaseItems paras = this.updateBean(); boolean connect = false; com.fr.data.impl.Connection database = DBUtils.checkDBConnection(paras.getDatabaseName()); if (database == null) { - failedToFindTable(); + failedToFindTable(); return TableData.EMPTY_TABLEDATA; } try { connect = FRContext.getCurrentEnv().testConnection(database); - } catch (Exception e1) { - connect = false; + } catch (Exception ignored) { } if (!connect) { DesignerFrame designerFrame = DesignerContext.getDesignerFrame(); JOptionPane.showMessageDialog(designerFrame, Inter.getLocText("Datasource-Connection_failed"), - Inter.getLocText("FR-Designer_Failed"), JOptionPane.INFORMATION_MESSAGE); - failedToFindTable(); + Inter.getLocText("FR-Designer_Failed"), JOptionPane.INFORMATION_MESSAGE); + failedToFindTable(); return null; } // 显示Table数据. TableData tableData = null; if (FRContext.getCurrentEnv() instanceof LocalEnv) { - TableData tableDataLocal = new DBTableData(database, DataCoreUtils.createSelectSQL(paras.getSchemaName(), paras.getTableName(), + tableData = new DBTableData(database, DataCoreUtils.createSelectSQL(paras.getSchemaName(), paras.getTableName(), DialectFactory.getDialectByName(paras.getDatabaseName()))); - tableData = tableDataLocal; } else { try { TableData tableDataLocal = new DBTableData(database, DataCoreUtils.createSelectSQL(paras.getSchemaName(), paras.getTableName(), DialectFactory.getDialectByName(paras.getDatabaseName()))); tableData = FRContext.getCurrentEnv().previewTableData(tableDataLocal, java.util.Collections.EMPTY_MAP, DesignerEnvManager.getEnvManager().getMaxNumberOrPreviewRow()); } catch (Exception e) { - failedToFindTable(); + failedToFindTable(); FRContext.getLogger().error(e.getMessage(), e); } } @@ -463,8 +489,8 @@ public class ChoosePane extends BasicBeanPane implements Refresha return this.dsNameComboBox.getSelectedItem(); } - protected void failedToFindTable() { - } + protected void failedToFindTable() { + } protected String getTableName() { String tableName = ""; @@ -485,7 +511,8 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** * 得到当前的ColumnName[] - * @return 返回当前的ColumnName[] + * + * @return 返回当前的ColumnName[] */ public String[] currentColumnNames() { String[] colNames = null; @@ -493,21 +520,19 @@ public class ChoosePane extends BasicBeanPane implements Refresha DataBaseItems paras = this.updateBean(); String selectedDSName = paras.getDatabaseName(); if (StringUtils.isBlank(selectedDSName)) { - return colNames = new String[0]; // peter:选中了当前的零长度的节点,直接返回. + // peter:选中了当前的零长度的节点,直接返回. + return new String[0]; } String selectedTableObject = paras.getTableName(); if (StringUtils.isEmpty(selectedTableObject)) { - return colNames = new String[0]; + return new String[0]; } - java.sql.Connection conn = null; try { // daniel:增加参数 colNames = FRContext.getCurrentEnv().getColumns(selectedDSName, paras.getSchemaName(), selectedTableObject); } catch (Exception e2) { FRContext.getLogger().error(e2.getMessage(), e2); - } finally { - DBUtils.closeConnection(conn); } if (colNames == null) { @@ -517,9 +542,10 @@ public class ChoosePane extends BasicBeanPane implements Refresha } /** - * 预览key value对应的数据 + * 预览key value对应的数据 + * * @param key 键 - * @param value 值 + * @param value 值 */ public void preview(int key, int value) { PreviewTablePane.previewTableData(createSelectTableData(), key, value); @@ -528,6 +554,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha /** * 默认预览 */ + @Override public void preview() { preview(-1, -1); } @@ -540,10 +567,12 @@ public class ChoosePane extends BasicBeanPane implements Refresha } /** - *注册listener,相应数据集改变 + * 注册listener,相应数据集改变 */ + @Override public void registerDSChangeListener() { DesignTableDataManager.addDsChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent e) { initDsNameComboBox(); } @@ -578,6 +607,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha this.refreshingModel = refreshingModel; } + @Override public void setSelectedItem(Object ob) { this.getModel().setSelectedItem(ob); if (ob != null && StringUtils.isEmpty(ob.toString())) { @@ -591,11 +621,13 @@ public class ChoosePane extends BasicBeanPane implements Refresha private class ComboBoxEditor extends UIComboBoxEditor { private Object item; + @Override public void setItem(Object item) { this.item = item; textField.setText((item == null) ? "" : item.toString()); } + @Override public Object getItem() { return this.item; } From 55b20fe0a68bfe838884883901d82f23cf68e53b Mon Sep 17 00:00:00 2001 From: hzzz Date: Tue, 29 May 2018 20:29:42 +0800 Subject: [PATCH 21/29] merge --- designer-base/src/com/fr/env/RemoteEnv.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index b09f1cb98..74995cf1d 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -81,9 +81,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; - private String path; - private String userID; - private boolean isReadTimeOut = false; private String buildFilePath; private RemoteEnvConfig env; @@ -125,7 +122,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 根据nameValuePairs,也就是参数对,生成PostMethod */ private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { - String methodPath = this.path; + String methodPath = getPath(); if (!isSignIn) { methodPath = methodPath + "?id=" + createUserID(); } @@ -144,7 +141,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters */ private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { - String methodPath = path + '?' + "id=" + createUserID(); + String methodPath = getPath() + '?' + "id=" + createUserID(); return new HttpClient(methodPath); } @@ -333,7 +330,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private void setHttpsParas() { - if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { + if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); System.setProperty(PWD_KEY, envManager.getCertificatePass()); @@ -775,7 +772,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getUserID() { - return userID; + return EnvContext.currentToken(); } From 872f5b2f951ae05cb6aa2eb0f0d24211a9a77218 Mon Sep 17 00:00:00 2001 From: ju Date: Wed, 30 May 2018 14:23:23 +0800 Subject: [PATCH 22/29] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/van/chart/DownloadOnlineSourcesHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-chart/src/com/fr/van/chart/DownloadOnlineSourcesHelper.java b/designer-chart/src/com/fr/van/chart/DownloadOnlineSourcesHelper.java index 23b4339ee..3af59526a 100644 --- a/designer-chart/src/com/fr/van/chart/DownloadOnlineSourcesHelper.java +++ b/designer-chart/src/com/fr/van/chart/DownloadOnlineSourcesHelper.java @@ -145,7 +145,7 @@ public class DownloadOnlineSourcesHelper implements DownloadSourcesEvent { if (result) { //安装文件 - IOUtils.unZipFilesGBK(temp, FRContext.getCurrentEnv().getPath() + siteInfo.localDir); + IOUtils.unZipFilesGBK(temp, StableUtils.pathJoin(FRContext.getCurrentEnv().getPath(), siteInfo.localDir)); } } else { result = false; From e9cec1e07394b7bca227996d343428c993de762f Mon Sep 17 00:00:00 2001 From: hzzz Date: Wed, 30 May 2018 16:32:11 +0800 Subject: [PATCH 23/29] merge --- .../loghandler/socketio/DesignerSocketIO.java | 6 +- designer-base/src/com/fr/env/RemoteEnv.java | 377 ++++++++++-------- .../src/com/fr/env/RemoteEnvUtils.java | 165 ++++++-- 3 files changed, 325 insertions(+), 223 deletions(-) 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 14be4cfb1..7e3746089 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 @@ -31,10 +31,8 @@ public class DesignerSocketIO { private static final Emitter.Listener printLog = new Emitter.Listener() { @Override public void call(Object... objects) { - //TODO 这里要测试一下类型 - String object = (String) objects[0]; try { - LogRecordTime[] logRecordTimes = LogUtils.readXMLLogRecords(new ByteArrayInputStream(object.getBytes())); + LogRecordTime[] logRecordTimes = LogUtils.readXMLLogRecords(new ByteArrayInputStream((byte[]) objects[0])); for (LogRecordTime logRecordTime : logRecordTimes) { DesignerLogHandler.getInstance().printRemoteLog(logRecordTime); } @@ -73,7 +71,7 @@ public class DesignerSocketIO { } try { - String uri = String.format("http://%s:%s/%s?%s=%s", + String uri = String.format("http://%s:%s%s?%s=%s", new URL(env.getPath()).getHost(), WebSocketConfig.getInstance().getPort(), EnvConstants.WS_NAMESPACE, diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index 74995cf1d..373b15f48 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -3,6 +3,9 @@ package com.fr.env; import com.fr.base.AbstractEnv; import com.fr.base.EnvException; import com.fr.base.FRContext; +import com.fr.base.ModifiedTable; +import com.fr.base.Parameter; +import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; import com.fr.base.Utils; import com.fr.base.env.EnvContext; @@ -10,27 +13,42 @@ import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.base.remote.RemoteDeziConstants; import com.fr.core.env.EnvConstants; import com.fr.data.TableDataSource; +import com.fr.data.core.DataCoreUtils; +import com.fr.data.core.db.TableProcedure; +import com.fr.data.impl.Connection; import com.fr.data.impl.EmbeddedTableData; +import com.fr.data.impl.storeproc.ProcedureDataModel; +import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.dav.DavXMLUtils; +import com.fr.dav.UserBaseEnv; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; +import com.fr.design.dialog.InformationWarnPane; +import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.file.CacheManager; import com.fr.file.ConnectionConfig; import com.fr.file.TableDataConfig; +import com.fr.file.filetree.FileNode; +import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.general.Inter; -import com.fr.general.http.HttpClient; +import com.fr.general.LogRecordTime; +import com.fr.general.LogUtils; import com.fr.general.http.HttpToolbox; import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; +import com.fr.license.function.VT4FR; import com.fr.log.FineLoggerFactory; +import com.fr.regist.License; import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; +import com.fr.stable.ArrayUtils; import com.fr.stable.EncodeConstants; import com.fr.stable.Filter; import com.fr.stable.JavaCompileInfo; @@ -40,11 +58,15 @@ import com.fr.stable.StringUtils; import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; +import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLTools; +import com.fr.stable.xml.XMLableReader; import com.fr.third.guava.collect.ImmutableMap; import com.fr.web.ResourceConstants; +import com.fr.report.util.AuthorityXMLUtils; import javax.swing.JOptionPane; +import javax.swing.UIManager; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; @@ -64,11 +86,18 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; +import java.net.NoRouteToHostException; +import java.net.Socket; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.logging.Level; +import java.util.regex.Pattern; import static com.fr.third.guava.base.Preconditions.checkArgument; @@ -76,7 +105,6 @@ import static com.fr.third.guava.base.Preconditions.checkArgument; * @author null */ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { - private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; @@ -89,9 +117,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl env = new RemoteEnvConfig(path, userName, password); } - /** - * 返回env配置路径 - */ @Override public String getPath() { return env.getPath(); @@ -102,82 +127,25 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return env.getUsername(); } - public String getPassword() { return env.getPassword(); } - /** - * 所有与服务器端交互前,都要调用这个方法生成UserID - */ - private String createUserID() { + @Override + public String getUserID() { return EnvContext.currentToken(); } - private HttpClient createHttpMethod(HashMap para) throws EnvException { - return createHttpMethod(para, false); - } - - /** - * 根据nameValuePairs,也就是参数对,生成PostMethod - */ - private HttpClient createHttpMethod(HashMap para, boolean isSignIn) throws EnvException { - String methodPath = getPath(); - if (!isSignIn) { - methodPath = methodPath + "?id=" + createUserID(); - } - HttpClient client = new HttpClient(methodPath, para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ - client.asGet(); - return client; - } - - /** - * 根据nameValuePairs,也就是参数对,生成PostMethod,不同之处在于,参数拼在path后面,不是method.addParameters - */ - private HttpClient createHttpMethod2(HashMap para) throws EnvException, UnsupportedEncodingException { - String methodPath = getPath() + '?' + "id=" + createUserID(); - return new HttpClient(methodPath); - } - - - /* - * Read the response body. - * 拿出InputStream中所有的Byte,转换成ByteArrayInputStream的形式返回 - * - * 这样做的目的是确保method.releaseConnection - * - * TODO 但如果不做method.releaseConnection,有多大危害呢?不确定... - */ - /** - * execute method之后,取返回的inputstream + * execute method之后,取返回的 InputStream */ - private ByteArrayInputStream execute4InputStream(HttpClient client) throws Exception { - setHttpsParas(); - try { - int statusCode = client.getResponseCode(); - if (statusCode != HttpURLConnection.HTTP_OK) { - //数据加载太多,屏蔽掉 - //doWithTimeOutException(); - throw new EnvException("Method failed: " + statusCode); - } - } catch (Exception e) { - FRContext.getLogger().info("Connection reset "); - } - InputStream in = client.getResponseStream(); + private InputStream filterInputStream(InputStream in) throws Exception { if (in == null) { return null; } ByteArrayOutputStream out = new ByteArrayOutputStream(); try { - Utils.copyBinaryTo(in, out); - + IOUtils.copyBinaryTo(in, out); // 看一下传过来的byte[]是不是DesignProcessor.INVALID,如果是的话,就抛Exception byte[] bytes = out.toByteArray(); // carl:格式一致传中文 @@ -195,7 +163,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl synchronized (this) { in.close(); out.close(); - client.release(); } } } @@ -210,10 +177,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception 异常 */ private boolean postBytes2Server(byte[] bytes, HashMap para) throws Exception { - HttpClient client = createHttpMethod2(para); - client.setContent(bytes); - execute4InputStream(client); - + filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); return true; } @@ -227,27 +191,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl if (in == null) { return null; } - BufferedReader br; + String result = null; try { - br = new BufferedReader(new InputStreamReader(in, EncodeConstants.ENCODING_UTF_8)); + result = CommonIOUtils.inputStream2String(in, EncodeConstants.ENCODING_UTF_8); } catch (UnsupportedEncodingException e) { - br = new BufferedReader(new InputStreamReader(in)); - } - StringBuilder sb = new StringBuilder(); - String line; - - try { - while ((line = br.readLine()) != null) { - if (sb.length() > 0) { - sb.append('\n'); - } - sb.append(line); - } - } catch (IOException e) { FRContext.getLogger().error(e.getMessage(), e); } - - return sb.toString(); + return result; } /** @@ -328,8 +278,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - - private void setHttpsParas() { + private void refreshHttpSProperty() { if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); @@ -338,7 +287,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - + /** + * 心跳访问,用来更新当前用户的访问时间 + * + * @throws Exception e + */ /** * 返回描述该运行环境的名字 @@ -350,15 +303,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Inter.getLocText("Env-Remote_Server"); } - /** - * 登录,返回userID - */ - @Override - public void signIn() throws Exception { - throw new UnsupportedOperationException("unsupport now"); - } - - public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -416,20 +360,35 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - @Override public boolean updateAuthorities(DesignAuthority[] authorities) { - return RemoteEnvUtils.updateAuthorities(authorities, this); + refreshHttpSProperty(); + String res = null; + try { + InputStream inputStream = RemoteEnvUtils.updateAuthorities(authorities, this); + inputStream = filterInputStream(inputStream); + res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return StringUtils.isNotEmpty(res) && Boolean.valueOf(res); } @Override public DesignAuthority[] getAuthorities() { - - return RemoteEnvUtils.getAuthorities(this); - + refreshHttpSProperty(); + DesignAuthority[] authorities = new DesignAuthority[0]; + try { + InputStream inputStream = RemoteEnvUtils.getAuthorities(this); + inputStream = filterInputStream(inputStream); + authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(inputStream); + return authorities; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return authorities; } - /** * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 * @@ -439,6 +398,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception e */ public boolean writePrivilegeMap(String key, String value) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); @@ -448,8 +408,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("value", value); //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -463,6 +424,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public void removeNoPrivilegeConnection() { + refreshHttpSProperty(); TableDataConfig dm = TableDataConfig.getInstance(); try { @@ -472,8 +434,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("currentUsername", this.getUser()); para.put("currentPwd", this.getPassword()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); ArrayList toBeRemoveTDName = new ArrayList<>(); for (int i = 0; i < ja.length(); i++) { @@ -495,7 +458,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - @Override public EmbeddedTableData previewTableData(Object tableData, Map parameterMap, int rowCount) throws Exception { return previewTableData(null, tableData, parameterMap, rowCount); @@ -565,16 +527,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl * @throws Exception 异常 */ public InputStream postBytes2ServerB(byte[] bytes, HashMap para) throws Exception { - HttpClient client = createHttpMethod2(para); - /* - todo post 方法好象过去不了 - 但是get方法也会有一些url参数问题,尤其是图表部分 - 比如: - op=fr_remote_design&cmd=design_get_plugin_service_data&serviceID=plugin.phantomjs&req= - */ -// client.asGet(); - client.setContent(bytes); - return execute4InputStream(client); + refreshHttpSProperty(); + return filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); } @@ -586,28 +540,29 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public String[] readPathSvgFiles(String path) { + refreshHttpSProperty(); String cataloguePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getPath(), SvgProvider.SERVER, path); - ArrayList fileArray = new ArrayList<>(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); for (int i = 0; i < ja.length(); i++) { JSONObject jsonObject = (JSONObject) ja.get(i); String svgFileName = (String) jsonObject.get("svgfileName"); - String svgfileContent = (String) jsonObject.get("svgfileContent"); + String svgFileContent = (String) jsonObject.get("svgfileContent"); String file = StableUtils.pathJoin(cataloguePath, svgFileName); - InputStream in = new ByteArrayInputStream(svgfileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); + InputStream in = new ByteArrayInputStream(svgFileContent.getBytes(EncodeConstants.ENCODING_UTF_8)); ResourceIOUtils.write(file, in); fileArray.add(file); } @@ -615,7 +570,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl FRContext.getLogger().error(e.getMessage()); } - return fileArray.toArray(new String[fileArray.size()]); + return fileArray.toArray(new String[0]); } @@ -634,7 +589,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); // 通过ByteArrayOutputStream将svg写成字节流 @@ -657,9 +612,9 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } try { - HttpClient client = createHttpMethod2(out.getNameValuePairs()); - client.setContent(out.getOut().toByteArray()); - String res = stream2String(execute4InputStream(client)); + String res = stream2String(filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(out.getOut().toByteArray(), out.nameValuePairs, false, this) + )); if (StringUtils.isNotEmpty(res)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Already_exist") + res); return false; @@ -688,7 +643,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); para.put("class_name", mgr.getClass().getName()); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); // alex:通过ByteArrayOutputStream将mgr写成字节流 @@ -696,9 +651,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl XMLTools.writeOutputStreamXML(mgr, out); try { - HttpClient client = createHttpMethod2(out.getNameValuePairs()); - client.setContent(out.getOut().toByteArray()); - String res = stream2String(execute4InputStream(client)); + String res = stream2String( + filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(out.getOut().toByteArray(), out.nameValuePairs, false, this) + ) + ); if (StringUtils.isNotEmpty(res)) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Already_exist") + res); return false; @@ -721,16 +678,14 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public InputStream readBean(String beanPath, String prefix) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_open"); para.put(RemoteDeziConstants.PREFXI, prefix); para.put("resource", beanPath); - HttpClient client = createHttpMethod(para); - // return Utils.toZipIn(execute4InputStream(method)); - //Utils.toZipIn这边有bug,远程连接的时候datasource.xml不能读取,先还原了 - return execute4InputStream(client); + return filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, false, this)); } /** @@ -751,7 +706,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return new Bytes2ServerOutputStream(para); } - /** * 返回模板文件路径 */ @@ -760,22 +714,72 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return getPath().substring(0, getPath().lastIndexOf("/")); } + public String[] getProcedureColumns(StoreProcedure storeProcedure, Map parameterMap) throws Exception { + refreshHttpSProperty(); + String[] columns; + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp"); + try { + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + + columns = DavXMLUtils.readXMLSPColumns(input); + return columns; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + + return new String[0]; + } + + public String[] getProcedureColumns(String name) throws Exception { + refreshHttpSProperty(); + String[] columns; + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp_columns_name"); + para.put("name", name); + try { + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + if (input == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + columns = DavXMLUtils.readXMLSPColumns(input); + return columns; + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new String[0]; + + } + /** * 输出日志信息 * - * @throws Exception + * @throws Exception e */ @Override public void printLogMessage() throws Exception { - throw new UnsupportedOperationException("unsupport now"); - } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "get_log_message"); - @Override - public String getUserID() { - return EnvContext.currentToken(); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return; + } + LogRecordTime[] records = LogUtils.readXMLLogRecords(input); } - @Override public String[] getSupportedTypes() { return FILE_TYPE; @@ -790,16 +794,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl */ @Override public boolean hasFileFolderAllow(String path) { - HttpClient client = null; + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put(RemoteDeziConstants.TEMPLATE_PATH, path); - client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); if (input == null) { return false; @@ -812,7 +817,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } - @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); @@ -821,15 +825,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public ArrayList getAllRole4Privilege(boolean isFS) { - ArrayList allRoleList = new ArrayList(); + refreshHttpSProperty(); + ArrayList allRoleList = new ArrayList<>(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "get_all_role"); para.put("isFS", String.valueOf(isFS)); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); JSONArray ja = new JSONArray(stream2String(input)); for (int i = 0; i < ja.length(); i++) { String roleName = (String) ((JSONObject) ja.get(i)).get("name"); @@ -842,6 +848,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } + /** * 获取当前env的build文件路径 */ @@ -885,14 +892,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String pluginServiceAction(String serviceID, String req) throws Exception { + refreshHttpSProperty(); HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_plugin_service_data"); para.put("serviceID", serviceID); para.put("req", req); //jim :加上user,远程设计点击预览时传递用户角色信息 - HttpClient client = createHttpMethod(para); - InputStream inputStream = execute4InputStream(client); + InputStream inputStream = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost(para, false, this) + ); return IOUtils.inputStream2String(inputStream); } @@ -908,6 +917,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String[] loadREUFile() { + refreshHttpSProperty(); ResourceIOUtils.delete(StableUtils.pathJoin( CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE)); @@ -917,12 +927,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 - InputStream input = client.getResponseStream(); + InputStream input = RemoteEnvUtils.simulateRPCByHttpGet(para, false, this); zipFilePath = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), "share.zip"); String cacheDir = StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath(), ShareConstants.DIR_SHARE_CACHE); @@ -952,6 +961,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public boolean installREUFile(File reuFile) { + refreshHttpSProperty(); if (reuFile == null) { return false; } @@ -963,18 +973,27 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", reuFile.getName()); - HttpClient client = createHttpMethod(para); - client.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(shareXMLName)))); - InputStream input = execute4InputStream(client); - client.release(); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpPost( + IOUtils.inputStream2Bytes( + new FileInputStream(new File(shareXMLName)) + ) + , para, + false, + this) + ); para.put("isComplete", "true"); - HttpClient client1 = createHttpMethod(para); - client1.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(helpXMLName)))); - InputStream input1 = execute4InputStream(client1); + InputStream input1 = filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost( + IOUtils.inputStream2Bytes( + new FileInputStream(new File(helpXMLName)) + ) + , para, + false, + this)); return ComparatorUtils.equals(stream2String(input), "true") && ComparatorUtils.equals(stream2String(input1), "true"); } catch (Exception e) { return false; @@ -983,6 +1002,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public boolean removeREUFilesByName(String fileName) { + refreshHttpSProperty(); if (StringUtils.isEmpty(fileName)) { return true; } @@ -990,12 +1010,13 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", fileName); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); return ComparatorUtils.equals(stream2String(input), "true"); } catch (Exception e) { return false; @@ -1004,15 +1025,17 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl @Override public String getSharePath() { + refreshHttpSProperty(); try { HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.createUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); - HttpClient client = createHttpMethod(para); - InputStream input = execute4InputStream(client); + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); return stream2String(input); } catch (Exception e) { return StringUtils.EMPTY; diff --git a/designer-base/src/com/fr/env/RemoteEnvUtils.java b/designer-base/src/com/fr/env/RemoteEnvUtils.java index 5580222be..cf6b2d657 100644 --- a/designer-base/src/com/fr/env/RemoteEnvUtils.java +++ b/designer-base/src/com/fr/env/RemoteEnvUtils.java @@ -1,86 +1,167 @@ package com.fr.env; +import com.fr.base.EnvException; import com.fr.base.FRContext; -import com.fr.general.IOUtils; import com.fr.report.DesignAuthority; import com.fr.report.util.AuthorityXMLUtils; import com.fr.stable.EncodeConstants; -import com.fr.third.org.apache.http.HttpEntity; -import com.fr.third.org.apache.http.client.methods.CloseableHttpResponse; +import com.fr.third.org.apache.commons.io.IOUtils; +import com.fr.third.org.apache.http.HttpResponse; +import com.fr.third.org.apache.http.HttpStatus; +import com.fr.third.org.apache.http.client.ClientProtocolException; +import com.fr.third.org.apache.http.client.ResponseHandler; import com.fr.third.org.apache.http.client.methods.HttpUriRequest; import com.fr.third.org.apache.http.client.methods.RequestBuilder; import com.fr.third.org.apache.http.entity.ContentType; import com.fr.third.org.apache.http.entity.InputStreamEntity; import com.fr.third.org.apache.http.impl.client.CloseableHttpClient; import com.fr.third.org.apache.http.impl.client.HttpClients; -import com.fr.third.org.apache.http.util.EntityUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; +import java.util.Map; public class RemoteEnvUtils { private RemoteEnvUtils() { } - public static boolean updateAuthorities(DesignAuthority[] authorities, RemoteEnv env) { + private static ResponseHandler responseHandler = new ResponseHandler() { + @Override + public InputStream handleResponse(HttpResponse response) throws IOException { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != HttpStatus.SC_OK) { + throw new ClientProtocolException("Method failed: " + response.getStatusLine().toString()); + } + InputStream in = response.getEntity().getContent(); + if (in == null) { + return null; + } + // 读取并返回 + ByteArrayOutputStream out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + return new ByteArrayInputStream(out.toByteArray()); + } + }; + + public static InputStream simulateRPCByHttpPost(byte[] bytes, Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { String path = env.getPath(); - String userID = env.getUserID(); + RequestBuilder builder = RequestBuilder.post(path); - String res = null; - CloseableHttpClient httpClient = HttpClients.createDefault(); + InputStream inputStream = null; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getUserID()); + } + InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(bytes)); - AuthorityXMLUtils.writeDesignAuthoritiesXML(authorities, outputStream); + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder + .setEntity(reqEntity) + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; + } + public static InputStream simulateRPCByHttpPost(Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { + String path = env.getPath(); + RequestBuilder builder = RequestBuilder.post(path); - InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(outputStream.toByteArray()), ContentType.TEXT_XML); + InputStream inputStream = null; + + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getUserID()); + } - HttpUriRequest request = RequestBuilder.post(path) - .addParameter("id", userID) - .addParameter("op", "remote_design_authority") - .addParameter("cmd", "update_authorities") - .setEntity(reqEntity) - .build(); - - try { - CloseableHttpResponse response = httpClient.execute(request); - HttpEntity entity = response.getEntity(); - res = IOUtils.inputStream2String(entity.getContent(), EncodeConstants.ENCODING_UTF_8); - EntityUtils.consume(entity); + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder + .build(); + inputStream = httpClient.execute(request, responseHandler); } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } + return inputStream; + } + + public static InputStream simulateRPCByHttpGet(Map parameters, boolean isSignIn, RemoteEnv env) throws EnvException { + String path = env.getPath(); + RequestBuilder builder = RequestBuilder.get(path); - return res != null && Boolean.valueOf(res); + InputStream inputStream = null; + for (Map.Entry entry : parameters.entrySet()) { + builder.addParameter(entry.getKey(), entry.getValue()); + } + if (!isSignIn) { + builder.addParameter("id", env.getUserID()); + } + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = builder.build(); + inputStream = httpClient.execute(request, responseHandler); + + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; } - public static DesignAuthority[] getAuthorities(RemoteEnv env) { + + public static InputStream updateAuthorities(DesignAuthority[] authorities, RemoteEnv env) { String path = env.getPath(); + // 远程设计临时用户id String userID = env.getUserID(); - DesignAuthority[] authorities = null; - CloseableHttpClient httpClient = HttpClients.createDefault(); - - HttpUriRequest request = RequestBuilder.get(path) - .addParameter("id", userID) - .addParameter("op", "remote_design_authority") - .addParameter("cmd", "get_authorities") - .build(); - - try { - CloseableHttpResponse response = httpClient.execute(request); - HttpEntity entity = response.getEntity(); - - authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(entity.getContent()); - EntityUtils.consume(entity); - } catch (Exception e) { + InputStream inputStream = null; + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + AuthorityXMLUtils.writeDesignAuthoritiesXML(authorities, outputStream); + InputStreamEntity reqEntity = new InputStreamEntity(new ByteArrayInputStream(outputStream.toByteArray()), ContentType.TEXT_XML); + + try (CloseableHttpClient httpClient = HttpClients.createSystem()) { + HttpUriRequest request = RequestBuilder.post(path) + .addParameter("id", userID) + .addParameter("op", "remote_design_authority") + .addParameter("cmd", "update_authorities") + .setEntity(reqEntity) + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { FRContext.getLogger().error(e.getMessage()); } - return authorities; + return inputStream; + + } + + public static InputStream getAuthorities(RemoteEnv env) throws EnvException { + String path = env.getPath(); + // 远程设计临时用户id + String userID = env.getUserID(); + InputStream inputStream = null; + + try (CloseableHttpClient httpClient = HttpClients.createSystem();) { + HttpUriRequest request = RequestBuilder.get(path) + .addParameter("id", userID) + .addParameter("op", "remote_design_authority") + .addParameter("cmd", "get_authorities") + .build(); + inputStream = httpClient.execute(request, responseHandler); + } catch (IOException e) { + FRContext.getLogger().error(e.getMessage()); + } + return inputStream; } + } From 3838b06108bc132d2508c5bfb8023872cc9f7e40 Mon Sep 17 00:00:00 2001 From: hzzz Date: Wed, 30 May 2018 17:26:34 +0800 Subject: [PATCH 24/29] check --- .../src/com/fr/design/DesignerEnvManager.java | 2 - .../design/actions/file/SwitchExistEnv.java | 18 +------- .../com/fr/design/mainframe/TemplatePane.java | 43 ++++++++++++++----- designer-base/src/com/fr/env/EnvListPane.java | 2 - .../src/com/fr/start/server/FRTomcat.java | 8 ++-- .../src/com/fr/start/Designer4Debug.java | 6 +-- 6 files changed, 40 insertions(+), 39 deletions(-) diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index 8d6cbafed..c4266cf15 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -10,10 +10,8 @@ import com.fr.base.env.resource.EnvConfigUtils; import com.fr.base.env.resource.LocalEnvConfig; import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.core.env.EnvConfig; -import com.fr.dav.LocalEnv; import com.fr.design.actions.help.alphafine.AlphaFineConfigManager; import com.fr.design.constants.UIConstants; -import com.fr.env.RemoteEnv; import com.fr.env.SignIn; import com.fr.file.FILEFactory; import com.fr.general.ComparatorUtils; 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 2da352c83..602f440d9 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -1,17 +1,14 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; -import com.fr.base.Env; import com.fr.base.FRContext; import com.fr.base.env.resource.LocalEnvConfig; import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.core.env.EnvConfig; -import com.fr.dav.LocalEnv; 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.dialog.InformationWarnPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; @@ -21,20 +18,15 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.env.RemoteEnv; import com.fr.env.SignIn; -import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.stable.EnvChangedListener; -import com.fr.stable.ProductConstants; -import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.JOptionPane; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.logging.Level; public class SwitchExistEnv extends MenuDef { @@ -111,14 +103,6 @@ public class SwitchExistEnv extends MenuDef { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); return; } -// String remoteVersion = selectedEnv.getDesignerVersion(); -// 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"); -// FRLogger.getLogger().log(Level.WARNING, infor); -// new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); -// return; -// } SignIn.signIn(selectedEnv); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); diff --git a/designer-base/src/com/fr/design/mainframe/TemplatePane.java b/designer-base/src/com/fr/design/mainframe/TemplatePane.java index f95e0aee4..8d128ce5e 100644 --- a/designer-base/src/com/fr/design/mainframe/TemplatePane.java +++ b/designer-base/src/com/fr/design/mainframe/TemplatePane.java @@ -1,7 +1,6 @@ package com.fr.design.mainframe; import com.fr.base.BaseUtils; -import com.fr.base.Env; import com.fr.core.env.EnvConfig; import com.fr.dav.LocalEnv; import com.fr.design.DesignModelAdapter; @@ -23,8 +22,19 @@ import com.fr.stable.EnvChangedListener; import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; +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 java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -98,6 +108,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 是否可扩展 + * * @return 同上 */ public boolean IsExpanded() { @@ -121,13 +132,13 @@ public class TemplatePane extends JPanel implements MouseListener { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); return false; } else { -// String remoteVersion = selectedEnv.getDesignerVersion(); -// 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; -// } + 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); @@ -148,6 +159,11 @@ public class TemplatePane extends JPanel implements MouseListener { return true; } + private String getDesignerVersion(EnvConfig selectedEnv) { +// return selectedEnv.getDesignerVersion(); + throw new UnsupportedOperationException("unsupport now"); + } + /** * 编辑items */ @@ -162,7 +178,7 @@ public class TemplatePane extends JPanel implements MouseListener { } public void doCancel() { - envListDialog.setVisible(false); + envListDialog.setVisible(false); } }); envListDialog.setVisible(true); @@ -210,6 +226,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 鼠标点击 + * * @param e 事件 */ @Override @@ -218,6 +235,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 鼠标按下 + * * @param e 事件 */ @Override @@ -232,6 +250,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 鼠标放开 + * * @param e 事件 */ @Override @@ -240,6 +259,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 鼠标进入 + * * @param e 事件 */ @Override @@ -248,6 +268,7 @@ public class TemplatePane extends JPanel implements MouseListener { /** * 鼠标离开 + * * @param e 事件 */ @Override diff --git a/designer-base/src/com/fr/env/EnvListPane.java b/designer-base/src/com/fr/env/EnvListPane.java index 9e1677ba3..b7f3b29ed 100644 --- a/designer-base/src/com/fr/env/EnvListPane.java +++ b/designer-base/src/com/fr/env/EnvListPane.java @@ -1,10 +1,8 @@ package com.fr.env; -import com.fr.base.Env; import com.fr.base.env.resource.LocalEnvConfig; import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.core.env.EnvConfig; -import com.fr.dav.LocalEnv; 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/start/server/FRTomcat.java b/designer-base/src/com/fr/start/server/FRTomcat.java index b7519b98a..46c529697 100644 --- a/designer-base/src/com/fr/start/server/FRTomcat.java +++ b/designer-base/src/com/fr/start/server/FRTomcat.java @@ -20,9 +20,9 @@ public class FRTomcat extends Tomcat{ public Context addWebapp(String contextPath, String docBase) throws ServletException { - silence(getHost(), contextPath); + silence(host, contextPath); - Context ctx = createContext(getHost(), contextPath); + Context ctx = createContext(host, contextPath); if (ctx instanceof StandardContext) { ((StandardContext)ctx).setDelegate(true); } @@ -37,10 +37,10 @@ public class FRTomcat extends Tomcat{ ctxCfg.setDefaultWebXml(noDefaultWebXmlPath()); - if (getHost() == null) { + if (host == null) { getHost().addChild(ctx); } else { - getHost().addChild(ctx); + host.addChild(ctx); } return ctx; diff --git a/designer-realize/src/com/fr/start/Designer4Debug.java b/designer-realize/src/com/fr/start/Designer4Debug.java index 6448b70bc..0786fee6f 100644 --- a/designer-realize/src/com/fr/start/Designer4Debug.java +++ b/designer-realize/src/com/fr/start/Designer4Debug.java @@ -5,7 +5,7 @@ package com.fr.start; */ public class Designer4Debug { -// public static void main(String... args) { -// org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); -// } + public static void main(String... args) { + org.swingexplorer.Launcher.main(new String[]{"com.fr.start.Designer"}); + } } From 643b69ea58ccfc46202bbb333d6602fff013e96b Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 31 May 2018 16:54:17 +0800 Subject: [PATCH 25/29] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20Log?= =?UTF-8?q?=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/DesignerEnvManager.java | 9 +- .../fr/design/ExtraDesignClassManager.java | 4 +- .../src/com/fr/design/RestartHelper.java | 29 +- .../design/actions/community/BBSAction.java | 25 +- .../design/actions/community/BugAction.java | 25 +- .../design/actions/community/NeedAction.java | 25 +- .../actions/community/QuestionAction.java | 25 +- .../design/actions/community/SignAction.java | 25 +- .../fr/design/actions/community/UpAction.java | 25 +- .../design/actions/community/VideoAction.java | 27 +- .../fr/design/actions/core/ActionFactory.java | 7 +- .../fr/design/actions/file/LocalePane.java | 43 +- .../design/actions/file/PreferencePane.java | 24 +- .../design/actions/file/SwitchExistEnv.java | 28 +- .../fr/design/actions/help/FeedBackPane.java | 17 +- .../fr/design/actions/help/ForumAction.java | 9 +- .../design/actions/help/SupportQQAction.java | 6 +- .../help/alphafine/AlphaFineConfigPane.java | 11 +- .../design/condition/LiteConditionPane.java | 10 +- .../fr/design/data/datapane/ChoosePane.java | 14 +- .../connect/DatabaseConnectionPane.java | 5 +- .../datapane/preview/PreviewTablePane.java | 3 +- .../wrapper/StoreProcedureNameWrapper.java | 5 +- .../com/fr/design/extra/PluginDetailPane.java | 4 +- .../fr/design/extra/PluginFromStorePane.java | 10 +- .../fr/design/extra/PluginOperateUtils.java | 7 +- .../com/fr/design/extra/PluginUpdatePane.java | 11 +- .../src/com/fr/design/extra/PluginUtils.java | 5 +- .../com/fr/design/extra/PluginWebBridge.java | 16 +- .../com/fr/design/extra/QQLoginWebPane.java | 3 +- .../extra/exe/GetPluginFromStoreExecutor.java | 4 +- .../extra/exe/ReadUpdateOnlineExecutor.java | 4 +- .../extra/exe/SearchOnlineExecutor.java | 4 +- .../exe/callback/InstallFromDiskCallback.java | 6 +- .../exe/callback/InstallOnlineCallback.java | 6 +- .../exe/callback/UninstallPluginCallback.java | 6 +- .../exe/callback/UpdateFromDiskCallback.java | 6 +- .../exe/callback/UpdateOnlineCallback.java | 7 +- .../callback/UpdateOnlineCallback.java | 6 +- .../design/file/HistoryTemplateListPane.java | 39 +- .../fr/design/file/MutilTempalteTabPane.java | 19 +- .../fr/design/file/SaveSomeTemplatePane.java | 2 +- .../com/fr/design/file/TemplateTreePane.java | 9 +- .../com/fr/design/formula/JavaEditorPane.java | 10 +- .../src/com/fr/design/gui/UILookAndFeel.java | 4 +- .../autocomplete/AutoCompletePopupWindow.java | 6 +- .../ParameterizedCompletionContext.java | 6 +- .../fr/design/gui/frpane/UITabbedPaneUI.java | 4 +- .../fr/design/gui/icombobox/LazyComboBox.java | 4 +- .../fr/design/gui/imenu/UIBasicMenuUI.java | 6 +- .../gui/imenutable/UIMenuNameableCreator.java | 6 +- .../fr/design/gui/style/NumberDragBar.java | 4 +- .../beautify/JavaScriptFormatHelper.java | 4 +- .../fr/design/mainframe/DesignerContext.java | 6 +- .../fr/design/mainframe/DesignerFrame.java | 40 +- .../com/fr/design/mainframe/JTemplate.java | 4 +- .../loghandler/DesignerLogHandler.java | 63 +- .../templateinfo/TemplateInfoCollector.java | 4 +- .../style/background/BackgroundPane.java | 4 +- .../fr/design/style/color/ColorPicker.java | 4 +- .../style/color/ColorSelectConfigManager.java | 4 +- .../style/color/CustomChooserPanel.java | 4 +- .../src/com/fr/design/utils/DesignUtils.java | 14 +- .../src/com/fr/design/utils/DrawRoutines.java | 6 +- designer-base/src/com/fr/env/RemoteEnv.java | 1366 ++++++++++++++++- .../src/com/fr/start/BaseDesigner.java | 6 +- .../src/com/fr/start/StartServer.java | 22 +- .../design/chart/report/MapCubeLayerPane.java | 4 +- .../PlotSeries/MapGroupExtensionPane.java | 6 +- .../PlotSeries/UIGroupExtensionPane.java | 4 +- .../impl/ChartHyperPoplinkPane.java | 4 +- .../design/mainframe/chart/ChartEditPane.java | 4 +- .../chart/gui/ChartTypeButtonPane.java | 4 +- .../chart/gui/data/CalculateComboBox.java | 6 +- .../table/SeriesNameUseFieldNamePane.java | 6 +- .../chart/gui/style/DateAxisValuePane.java | 4 +- .../chart/gui/type/AbstractChartTypePane.java | 4 +- .../mainframe/chart/gui/type/BarPlotPane.java | 4 +- .../chart/gui/type/ColumnPlotPane.java | 4 +- .../chart/gui/type/GisMapPlotPane.java | 4 +- .../chart/gui/type/LinePlotPane.java | 4 +- .../chart/gui/type/MeterPlotPane.java | 4 +- .../van/chart/area/VanChartAreaPlotPane.java | 4 +- .../fr/van/chart/bar/VanChartBarPlotPane.java | 4 +- .../chart/bubble/VanChartBubblePlotPane.java | 4 +- .../chart/column/VanChartColumnPlotPane.java | 4 +- .../custom/CustomPlotDesignerPaneFactory.java | 8 +- .../chart/custom/VanChartCustomPlotPane.java | 4 +- .../VanChartCustomPlotSelectPane.java | 4 +- .../component/VanChartHyperLinkPane.java | 8 +- .../fr/van/chart/designer/PlotFactory.java | 16 +- .../component/ChartUIMenuNameableCreator.java | 6 +- .../VanChartUIMenuNameableCreator.java | 4 +- .../style/axis/VanChartTimeAxisPane.java | 4 +- .../BackgroundNameObjectCreator.java | 10 +- .../background/ChartNameObjectCreator.java | 10 +- .../StackedAndAxisNameObjectCreator.java | 10 +- .../type/AbstractVanChartTypePane.java | 4 +- .../designer/type/VanChartFunnelTypePane.java | 4 +- .../designer/type/VanChartGanttPlotPane.java | 4 +- .../chart/gauge/VanChartGaugePlotPane.java | 4 +- .../type/VanChartHeatMapTypePane.java | 4 +- .../van/chart/line/VanChartLinePlotPane.java | 4 +- .../designer/type/VanChartMapPlotPane.java | 6 +- .../multilayer/VanChartMultiPiePlotPane.java | 4 +- .../fr/van/chart/pie/VanChartPiePlotPane.java | 4 +- .../chart/radar/VanChartRadarPlotPane.java | 4 +- .../scatter/VanChartScatterPlotPane.java | 4 +- .../type/VanChartStructureTypePane.java | 4 +- .../treemap/VanChartTreeMapPlotPane.java | 4 +- .../type/VanChartWordCloudTypePane.java | 4 +- .../layout/FRAbsoluteLayoutAdapter.java | 4 +- .../painters/FRAbsoluteLayoutPainter.java | 6 +- .../creator/cardlayout/TabMoveAction.java | 4 +- .../creator/cardlayout/XWTabFitLayout.java | 4 +- ...bsoluteBodyLayoutPropertiesGroupModel.java | 4 +- .../FRFitLayoutPropertiesGroupModel.java | 4 +- .../com/fr/design/mainframe/FormDesigner.java | 4 +- .../design/mainframe/FormSelectionUtils.java | 4 +- .../mainframe/FormWidgetDetailPane.java | 15 +- .../src/com/fr/design/mainframe/JForm.java | 4 +- .../EmbeddedFormExportExportAction.java | 21 +- .../FRAbsoluteBodyLayoutDefinePane.java | 4 +- .../layout/FRFitLayoutDefinePane.java | 4 +- .../file/export/AbstractExportAction.java | 10 +- .../actions/insert/flot/ChartFloatAction.java | 4 +- .../mainframe/CellWidgetPropertyPane.java | 4 +- .../fr/design/mainframe/ElementCasePane.java | 6 +- .../alphafine/cell/model/ActionModel.java | 4 +- .../alphafine/cell/model/DocumentModel.java | 8 +- .../alphafine/cell/model/FileModel.java | 4 +- .../alphafine/cell/model/PluginModel.java | 4 +- .../alphafine/component/AlphaFineDialog.java | 26 +- .../manager/impl/DocumentSearchManager.java | 4 +- .../manager/impl/FileSearchManager.java | 4 +- .../manager/impl/PluginSearchManager.java | 8 +- .../manager/impl/RecommendSearchManager.java | 4 +- .../fr/design/mainframe/bbs/BBSDialog.java | 4 +- .../design/mainframe/bbs/BBSLoginDialog.java | 5 +- .../errorinfo/ErrorInfoUploader.java | 9 +- .../com/fr/design/module/DesignerModule.java | 6 +- .../fr/design/present/CellWriteAttrPane.java | 4 +- .../com/fr/design/widget/WidgetEventPane.java | 2 +- .../write/submit/SubmitVisitorListPane.java | 4 +- 144 files changed, 1916 insertions(+), 690 deletions(-) diff --git a/designer-base/src/com/fr/design/DesignerEnvManager.java b/designer-base/src/com/fr/design/DesignerEnvManager.java index c4266cf15..06d205860 100644 --- a/designer-base/src/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/com/fr/design/DesignerEnvManager.java @@ -16,10 +16,10 @@ import com.fr.env.SignIn; import com.fr.file.FILEFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogFormatter; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.EnvChangedListener; import com.fr.stable.ListMap; @@ -34,10 +34,9 @@ import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLableReader; -import javax.swing.SwingWorker; +import javax.swing.*; import javax.swing.SwingWorker.StateValue; -import java.awt.Color; -import java.awt.Rectangle; +import java.awt.*; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; @@ -228,7 +227,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { try { Thread.sleep(5000); } catch (InterruptedException e) { - FRLogger.getLogger().error("Map Save Error"); + FineLoggerFactory.getLogger().error("Map Save Error"); } } } diff --git a/designer-base/src/com/fr/design/ExtraDesignClassManager.java b/designer-base/src/com/fr/design/ExtraDesignClassManager.java index ce5878946..179251539 100644 --- a/designer-base/src/com/fr/design/ExtraDesignClassManager.java +++ b/designer-base/src/com/fr/design/ExtraDesignClassManager.java @@ -18,9 +18,9 @@ import com.fr.design.gui.core.WidgetOptionFactory; import com.fr.design.menu.ShortCut; import com.fr.design.widget.Appearance; import com.fr.form.ui.Widget; -import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.AbstractExtraClassManager; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginSingleInjection; @@ -208,7 +208,7 @@ public class ExtraDesignClassManager extends AbstractExtraClassManager implement return (Feedback) clazz.newInstance(); } } catch (Exception e) { - FRLogger.getLogger().info("no feed back support"); + FineLoggerFactory.getLogger().info("no feed back support"); } return Feedback.EMPTY; } diff --git a/designer-base/src/com/fr/design/RestartHelper.java b/designer-base/src/com/fr/design/RestartHelper.java index 53aa5e56b..2900e09f5 100644 --- a/designer-base/src/com/fr/design/RestartHelper.java +++ b/designer-base/src/com/fr/design/RestartHelper.java @@ -2,11 +2,18 @@ package com.fr.design; import com.fr.design.mainframe.DesignerContext; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.GeneralUtils; -import com.fr.stable.*; - -import java.io.*; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.ArrayUtils; +import com.fr.stable.OperatingSystem; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.util.ArrayList; @@ -39,7 +46,7 @@ public class RestartHelper { properties.load(file2DeleteInputStream); file2DeleteInputStream.close(); } catch (IOException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } if (ArrayUtils.getLength(files) != 0) { @@ -53,7 +60,7 @@ public class RestartHelper { properties.store(file2DeleteOutputStream, "save"); file2DeleteOutputStream.close(); } catch (IOException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -71,7 +78,7 @@ public class RestartHelper { properties.load(file2MoveInputStream); file2MoveInputStream.close(); } catch (IOException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } if (!map.isEmpty()) { @@ -84,7 +91,7 @@ public class RestartHelper { properties.store(file2MoveOutputStream, "save"); file2MoveOutputStream.close(); } catch (IOException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -156,10 +163,10 @@ public class RestartHelper { FileChannel restartLockFC = randomAccessFile.getChannel(); FileLock restartLock = restartLockFC.tryLock(); if(restartLock == null) { - FRLogger.getLogger().error("restart lock null!"); + FineLoggerFactory.getLogger().error("restart lock null!"); } }catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } if (OperatingSystem.isMacOS()) { restartInMacOS(installHome, filesToBeDelete); @@ -167,7 +174,7 @@ public class RestartHelper { restartInWindows(installHome, filesToBeDelete); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } finally { DesignerContext.getDesignerFrame().exit(); } diff --git a/designer-base/src/com/fr/design/actions/community/BBSAction.java b/designer-base/src/com/fr/design/actions/community/BBSAction.java index 09add551d..01cdcee95 100644 --- a/designer-base/src/com/fr/design/actions/community/BBSAction.java +++ b/designer-base/src/com/fr/design/actions/community/BBSAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class BBSAction extends UpdateAction { @@ -46,12 +45,12 @@ public class BBSAction extends UpdateAction Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } public static final MenuKeySet BBS = new MenuKeySet() { diff --git a/designer-base/src/com/fr/design/actions/community/BugAction.java b/designer-base/src/com/fr/design/actions/community/BugAction.java index 497a12caa..5d5e6893c 100644 --- a/designer-base/src/com/fr/design/actions/community/BugAction.java +++ b/designer-base/src/com/fr/design/actions/community/BugAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class BugAction extends UpdateAction { @@ -40,12 +39,12 @@ public void actionPerformed(ActionEvent arg0) Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/community/NeedAction.java b/designer-base/src/com/fr/design/actions/community/NeedAction.java index bf9b3a509..b353dcaa8 100644 --- a/designer-base/src/com/fr/design/actions/community/NeedAction.java +++ b/designer-base/src/com/fr/design/actions/community/NeedAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class NeedAction extends UpdateAction { @@ -41,12 +40,12 @@ public class NeedAction extends UpdateAction Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/community/QuestionAction.java b/designer-base/src/com/fr/design/actions/community/QuestionAction.java index 7e8ced10b..6cf5f479c 100644 --- a/designer-base/src/com/fr/design/actions/community/QuestionAction.java +++ b/designer-base/src/com/fr/design/actions/community/QuestionAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class QuestionAction extends UpdateAction { @@ -40,12 +39,12 @@ public void actionPerformed(ActionEvent arg0) Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/community/SignAction.java b/designer-base/src/com/fr/design/actions/community/SignAction.java index 30170bc86..839d2b9d7 100644 --- a/designer-base/src/com/fr/design/actions/community/SignAction.java +++ b/designer-base/src/com/fr/design/actions/community/SignAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class SignAction extends UpdateAction { @@ -41,12 +40,12 @@ public class SignAction extends UpdateAction Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/community/UpAction.java b/designer-base/src/com/fr/design/actions/community/UpAction.java index 999b7e9e8..acbe2522b 100644 --- a/designer-base/src/com/fr/design/actions/community/UpAction.java +++ b/designer-base/src/com/fr/design/actions/community/UpAction.java @@ -1,22 +1,21 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + public class UpAction extends UpdateAction { @@ -41,12 +40,12 @@ public class UpAction extends UpdateAction Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/community/VideoAction.java b/designer-base/src/com/fr/design/actions/community/VideoAction.java index ea53fbf8f..cedbe6273 100644 --- a/designer-base/src/com/fr/design/actions/community/VideoAction.java +++ b/designer-base/src/com/fr/design/actions/community/VideoAction.java @@ -1,23 +1,22 @@ package com.fr.design.actions.community; -import java.awt.Desktop; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Locale; - -import javax.swing.JOptionPane; -import javax.swing.KeyStroke; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Locale; + public class VideoAction extends UpdateAction { @@ -47,12 +46,12 @@ public class VideoAction extends UpdateAction Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer_Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/core/ActionFactory.java b/designer-base/src/com/fr/design/actions/core/ActionFactory.java index e48caa0ac..00824285c 100644 --- a/designer-base/src/com/fr/design/actions/core/ActionFactory.java +++ b/designer-base/src/com/fr/design/actions/core/ActionFactory.java @@ -7,10 +7,9 @@ import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.JTemplate; import com.fr.design.menu.MenuKeySet; import com.fr.design.selection.QuickEditor; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; -import javax.swing.Action; -import javax.swing.KeyStroke; +import javax.swing.*; import java.awt.event.KeyEvent; import java.lang.reflect.Constructor; import java.util.ArrayList; @@ -350,7 +349,7 @@ public class ActionFactory { if (c == null) { Class cClazz = findQuickEditorClass(clazz, editorClassMap); if (cClazz == null) { - FRLogger.getLogger().error("No Such Editor"); + FineLoggerFactory.getLogger().error("No Such Editor"); return null; } try { diff --git a/designer-base/src/com/fr/design/actions/file/LocalePane.java b/designer-base/src/com/fr/design/actions/file/LocalePane.java index 4dd25c504..a5017bf04 100644 --- a/designer-base/src/com/fr/design/actions/file/LocalePane.java +++ b/designer-base/src/com/fr/design/actions/file/LocalePane.java @@ -4,33 +4,40 @@ package com.fr.design.actions.file; -import java.awt.BorderLayout; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.*; - -import javax.swing.JTable; -import javax.swing.RowFilter; -import javax.swing.SwingWorker; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableRowSorter; - import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.design.dialog.BasicPane; import com.fr.design.gui.frpane.UITabbedPane; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.itextfield.UITextField; -import com.fr.design.dialog.BasicPane; import com.fr.file.filetree.FileNode; -import com.fr.general.*; +import com.fr.general.GeneralUtils; +import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; -import com.fr.stable.StringUtils; import com.fr.stable.bridge.StableFactory; import com.fr.stable.project.ProjectConstants; +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableRowSorter; +import java.awt.*; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; +import java.util.ResourceBundle; +import java.util.Set; +import java.util.Vector; + /** * @author : richie * @since : 8.0 @@ -235,7 +242,7 @@ public class LocalePane extends BasicPane { out.flush(); out.close(); } catch (Exception e) { - FRLogger.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().info(e.getMessage()); } } } diff --git a/designer-base/src/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/com/fr/design/actions/file/PreferencePane.java index dd6eaa9ad..fd9024293 100644 --- a/designer-base/src/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/com/fr/design/actions/file/PreferencePane.java @@ -1,7 +1,6 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; -import com.fr.base.ServerConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicDialog; @@ -23,8 +22,9 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; -import com.fr.general.FRLevel; import com.fr.general.Inter; +import com.fr.general.log.Log4jConfig; +import com.fr.third.apache.log4j.Level; import javax.swing.*; import java.awt.*; @@ -81,7 +81,7 @@ public class PreferencePane extends BasicPane { private static final String MINUS = "MINUS"; private static final String DISPLAY_MINUS = "-"; - private static final FRLevel[] LOG = {FRLevel.SEVERE, FRLevel.WARNING, FRLevel.INFO, FRLevel.DEBUG}; + private static final Level[] LOG = {Level.FATAL, Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG}; private static java.util.List LANGUAGE = new ArrayList<>(); private static int designerEnvLanguageIndex; // 打开设置对话框时,设计器使用的语言 @@ -125,7 +125,7 @@ public class PreferencePane extends BasicPane { LANGUAGE.clear(); Map map = Inter.getSupportLocaleMap(); LANGUAGE.add(Inter.getLocText("FR-Designer_Language_Default")); - for(Locale locale : map.keySet()){ + for (Locale locale : map.keySet()) { LANGUAGE.add(getLocaledLanguage(map.get(locale), locale)); } } @@ -177,7 +177,7 @@ public class PreferencePane extends BasicPane { advancePane.add(spaceUpPane); } - private static String getLocaledLanguage(String key, Locale locale){ + private static String getLocaledLanguage(String key, Locale locale) { StringBuilder sb = new StringBuilder(); sb.append(Inter.getLocText(key)).append("("); sb.append(Inter.getLocText(key, locale)).append(")"); @@ -362,8 +362,8 @@ public class PreferencePane extends BasicPane { logLevelPane.add(logLevelComboBox); logLevelComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - - ServerConfig.getInstance().setServerLogLevel(((FRLevel) logLevelComboBox.getSelectedItem()).getLevel()); + + Log4jConfig.getInstance().setRootLevel((Level) logLevelComboBox.getSelectedItem()); } }); } @@ -380,7 +380,7 @@ public class PreferencePane extends BasicPane { languageLabel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - final LocalePane localePane = new LocalePane(); + final LocalePane localePane = new LocalePane(); BasicDialog dlg = localePane.showLargeWindow(SwingUtilities.getWindowAncestor(PreferencePane.this), new DialogActionAdapter() { @Override public void doOk() { @@ -542,8 +542,8 @@ public class PreferencePane extends BasicPane { paginationLineColorTBButton.setColor(designerEnvManager.getPaginationLineColor()); this.logExportDirectoryField.setText(designerEnvManager.getLogLocation()); - - this.logLevelComboBox.setSelectedItem(FRLevel.getByLevel(ServerConfig.getInstance().getServerLogLevel())); + + this.logLevelComboBox.setSelectedItem(Log4jConfig.getInstance().getRootLevel()); this.languageComboBox.setSelectedItem(LANGUAGE.get(designerEnvManager.getLanguage())); designerEnvLanguageIndex = designerEnvManager.getLanguage(); @@ -622,8 +622,8 @@ public class PreferencePane extends BasicPane { if (maxUndoLimit.getSelectedIndex() == SELECTED_INDEX_5) { designerEnvManager.setUndoLimit(MAX_UNDO_LIMIT_50); } - - ServerConfig.getInstance().setServerLogLevel(((FRLevel) logLevelComboBox.getSelectedItem()).getLevel()); + + Log4jConfig.getInstance().setRootLevel(((Level) logLevelComboBox.getSelectedItem())); } 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 602f440d9..d58c6cc7f 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -1,14 +1,14 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; +import com.fr.base.Env; import com.fr.base.FRContext; -import com.fr.base.env.resource.LocalEnvConfig; -import com.fr.base.env.resource.RemoteEnvConfig; -import com.fr.core.env.EnvConfig; +import com.fr.dav.LocalEnv; 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.dialog.InformationWarnPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; @@ -18,11 +18,15 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; 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; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EnvChangedListener; +import com.fr.stable.ProductConstants; +import com.fr.stable.StringUtils; -import javax.swing.JOptionPane; +import javax.swing.*; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Iterator; @@ -66,10 +70,10 @@ public class SwitchExistEnv extends MenuDef { public GetExistEnvAction(String envName) { this.setName(envName); - EnvConfig env = DesignerEnvManager.getEnvManager().getEnv(envName); - if (env instanceof LocalEnvConfig) { + Env env = DesignerEnvManager.getEnvManager().getEnv(envName); + if (env instanceof LocalEnv) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); - } else if (env instanceof RemoteEnvConfig) { + } else if (env instanceof RemoteEnv) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); } } @@ -97,12 +101,20 @@ public class SwitchExistEnv extends MenuDef { */ public void actionPerformed(ActionEvent e) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - EnvConfig selectedEnv = envManager.getEnv(this.getName()); + Env selectedEnv = envManager.getEnv(this.getName()); try { if (selectedEnv instanceof RemoteEnv && !((RemoteEnv) selectedEnv).testServerConnection()) { JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); return; } + String remoteVersion = selectedEnv.getDesignerVersion(); + 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"); + FineLoggerFactory.getLogger().error(infor); + new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); + return; + } SignIn.signIn(selectedEnv); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); diff --git a/designer-base/src/com/fr/design/actions/help/FeedBackPane.java b/designer-base/src/com/fr/design/actions/help/FeedBackPane.java index e7894e77f..d4f212f3d 100644 --- a/designer-base/src/com/fr/design/actions/help/FeedBackPane.java +++ b/designer-base/src/com/fr/design/actions/help/FeedBackPane.java @@ -7,6 +7,8 @@ package com.fr.design.actions.help; import com.fr.base.FRContext; import com.fr.base.FeedBackInfo; import com.fr.design.constants.LayoutConstants; +import com.fr.design.dialog.BasicDialog; +import com.fr.design.dialog.BasicPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; @@ -16,13 +18,11 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.BasicPane; +import com.fr.design.utils.DesignUtils; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import com.fr.design.utils.DesignUtils; import javax.swing.*; import javax.swing.border.Border; @@ -33,7 +33,12 @@ import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; import java.awt.*; -import java.awt.event.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.util.Date; import java.util.concurrent.CancellationException; @@ -275,7 +280,7 @@ public class FeedBackPane extends BasicPane { try { return DesignUtils.sendFeedBack(feedBackInfo); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } } diff --git a/designer-base/src/com/fr/design/actions/help/ForumAction.java b/designer-base/src/com/fr/design/actions/help/ForumAction.java index 5a07cca92..292ad13f3 100644 --- a/designer-base/src/com/fr/design/actions/help/ForumAction.java +++ b/designer-base/src/com/fr/design/actions/help/ForumAction.java @@ -10,6 +10,7 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import javax.swing.*; @@ -48,12 +49,12 @@ public class ForumAction extends UpdateAction { Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } diff --git a/designer-base/src/com/fr/design/actions/help/SupportQQAction.java b/designer-base/src/com/fr/design/actions/help/SupportQQAction.java index ae59df4a5..703c5632e 100644 --- a/designer-base/src/com/fr/design/actions/help/SupportQQAction.java +++ b/designer-base/src/com/fr/design/actions/help/SupportQQAction.java @@ -5,10 +5,10 @@ package com.fr.design.actions.help; import com.fr.base.BaseUtils; -import com.fr.base.FRContext; import com.fr.design.actions.UpdateAction; import com.fr.design.menu.MenuKeySet; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ProductConstants; import javax.swing.*; @@ -38,9 +38,9 @@ public class SupportQQAction extends UpdateAction { Desktop.getDesktop().browse(new URI(ProductConstants.SUPPORT_QQ)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } } diff --git a/designer-base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigPane.java b/designer-base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigPane.java index a868e404d..0ab5edd25 100644 --- a/designer-base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigPane.java +++ b/designer-base/src/com/fr/design/actions/help/alphafine/AlphaFineConfigPane.java @@ -8,12 +8,17 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayoutHelper; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import java.awt.*; -import java.awt.event.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; /** * Created by XiaXiang on 2017/4/6. @@ -202,7 +207,7 @@ public class AlphaFineConfigPane extends BasicPane { DesignerEnvManager.loadLogSetting(); DesignerEnvManager.getEnvManager().saveXMLFile(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } diff --git a/designer-base/src/com/fr/design/condition/LiteConditionPane.java b/designer-base/src/com/fr/design/condition/LiteConditionPane.java index 58e859ba3..5efa85dc5 100644 --- a/designer-base/src/com/fr/design/condition/LiteConditionPane.java +++ b/designer-base/src/com/fr/design/condition/LiteConditionPane.java @@ -3,7 +3,11 @@ package com.fr.design.condition; import com.fr.base.BaseFormula; import com.fr.base.BaseUtils; import com.fr.data.DataConstants; -import com.fr.data.condition.*; +import com.fr.data.condition.CommonCondition; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.condition.JoinCondition; +import com.fr.data.condition.ListCondition; +import com.fr.data.condition.ObjectCondition; import com.fr.design.beans.BasicBeanPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.formula.FormulaFactory; @@ -18,9 +22,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.general.data.Condition; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import javax.swing.*; @@ -960,7 +964,7 @@ public abstract class LiteConditionPane extends BasicBeanPa try{ newCondition = (Condition)joinCondition.getCondition().clone(); }catch (CloneNotSupportedException e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return newCondition; } diff --git a/designer-base/src/com/fr/design/data/datapane/ChoosePane.java b/designer-base/src/com/fr/design/data/datapane/ChoosePane.java index 281a61de5..5fabd7c2b 100644 --- a/designer-base/src/com/fr/design/data/datapane/ChoosePane.java +++ b/designer-base/src/com/fr/design/data/datapane/ChoosePane.java @@ -33,15 +33,11 @@ import com.fr.design.mainframe.DesignerFrame; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.file.ConnectionConfig; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTree; -import javax.swing.SwingWorker; +import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.PopupMenuEvent; @@ -52,9 +48,7 @@ import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Dimension; +import java.awt.*; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.ItemEvent; @@ -283,7 +277,7 @@ public class ChoosePane extends BasicBeanPane implements Refresha schemaBox.setSelectedIndex(index); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } schemaBox.setRefreshingModel(false); schemaBox.removePopupMenuListener(listener); diff --git a/designer-base/src/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 680a69f61..94b38f681 100644 --- a/designer-base/src/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -12,9 +12,10 @@ import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.scrollruler.ModLineBorder; +import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; -import com.fr.design.utils.gui.GUICoreUtils; import javax.swing.*; import java.awt.*; @@ -121,7 +122,7 @@ public abstract class DatabaseConnectionPane task = new PluginTask<>(webEngine, callback, new GetPluginFromStoreExecutor(new JSONObject(info))); threadPoolExecutor.submit(task); } catch (JSONException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } @@ -490,10 +488,10 @@ public class PluginWebBridge { } } catch (NullPointerException e) { //此为uri为空时抛出异常 - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (IOException e) { //此为无法获取系统默认浏览器 - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } } @@ -505,7 +503,7 @@ public class PluginWebBridge { try { Desktop.getDesktop().browse(new URI(SiteCenter.getInstance().acquireUrlByKind("bbs.register"))); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().info(e.getMessage()); } } diff --git a/designer-base/src/com/fr/design/extra/QQLoginWebPane.java b/designer-base/src/com/fr/design/extra/QQLoginWebPane.java index 82648531c..f74219691 100644 --- a/designer-base/src/com/fr/design/extra/QQLoginWebPane.java +++ b/designer-base/src/com/fr/design/extra/QQLoginWebPane.java @@ -2,6 +2,7 @@ package com.fr.design.extra; import com.fr.base.FRContext; import com.fr.general.*; +import com.fr.log.FineLoggerFactory; import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; @@ -148,7 +149,7 @@ public class QQLoginWebPane extends JFXPanel { } }); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } diff --git a/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java b/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java index db10437fd..c5a159a10 100644 --- a/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java +++ b/designer-base/src/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java @@ -4,11 +4,11 @@ import com.fr.design.extra.PluginConstants; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; import com.fr.design.extra.Process; -import com.fr.general.FRLogger; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; /** @@ -72,7 +72,7 @@ public class GetPluginFromStoreExecutor implements Executor { JSONArray resultJSONArray = PluginUtils.filterPluginsFromVersion(resultArr); result = resultJSONArray.toString(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } else { result = PluginConstants.CONNECTION_404; diff --git a/designer-base/src/com/fr/design/extra/exe/ReadUpdateOnlineExecutor.java b/designer-base/src/com/fr/design/extra/exe/ReadUpdateOnlineExecutor.java index 303d8aee7..2d7917d55 100644 --- a/designer-base/src/com/fr/design/extra/exe/ReadUpdateOnlineExecutor.java +++ b/designer-base/src/com/fr/design/extra/exe/ReadUpdateOnlineExecutor.java @@ -2,9 +2,9 @@ package com.fr.design.extra.exe; import com.fr.design.extra.PluginsReaderFromStore; import com.fr.design.extra.Process; -import com.fr.general.FRLogger; import com.fr.json.JSONArray; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.view.PluginView; import com.fr.stable.StringUtils; @@ -42,7 +42,7 @@ public class ReadUpdateOnlineExecutor implements Executor { } result = jsonArray.toString(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } } diff --git a/designer-base/src/com/fr/design/extra/exe/SearchOnlineExecutor.java b/designer-base/src/com/fr/design/extra/exe/SearchOnlineExecutor.java index c46dd5d4e..456b77dd1 100644 --- a/designer-base/src/com/fr/design/extra/exe/SearchOnlineExecutor.java +++ b/designer-base/src/com/fr/design/extra/exe/SearchOnlineExecutor.java @@ -3,11 +3,11 @@ package com.fr.design.extra.exe; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; import com.fr.design.extra.Process; -import com.fr.general.FRLogger; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; /** @@ -50,7 +50,7 @@ public class SearchOnlineExecutor implements Executor { JSONArray resultJSONArray = PluginUtils.filterPluginsFromVersion(jsonArray); result = resultJSONArray.toString(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } } diff --git a/designer-base/src/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java b/designer-base/src/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java index 834f4370d..b9d04ecd1 100644 --- a/designer-base/src/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java +++ b/designer-base/src/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java @@ -2,8 +2,8 @@ package com.fr.design.extra.exe.callback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.error.PluginErrorCode; import com.fr.plugin.manage.PluginManager; @@ -37,7 +37,7 @@ public class InstallFromDiskCallback extends AbstractPluginTaskCallback { public void done(PluginTaskResult result) { if (result.isSuccess()) { jsCallback.execute("success"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Install_Success")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Install_Success")); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Plugin_Install_Success")); } else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) { int rv = JOptionPane.showOptionDialog( @@ -76,7 +76,7 @@ public class InstallFromDiskCallback extends AbstractPluginTaskCallback { PluginOperateUtils.updatePluginFromDisk(zipFile, jsCallback); }else { jsCallback.execute("failed"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Install_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Install_Failed")); JOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), Inter.getLocText("FR-Plugin_Install_Failed"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/extra/exe/callback/InstallOnlineCallback.java b/designer-base/src/com/fr/design/extra/exe/callback/InstallOnlineCallback.java index 88f125a98..49da09b9c 100644 --- a/designer-base/src/com/fr/design/extra/exe/callback/InstallOnlineCallback.java +++ b/designer-base/src/com/fr/design/extra/exe/callback/InstallOnlineCallback.java @@ -1,8 +1,8 @@ package com.fr.design.extra.exe.callback; import com.fr.design.extra.PluginOperateUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.error.PluginErrorCode; import com.fr.plugin.manage.control.AbstractDealPreTaskCallback; @@ -35,7 +35,7 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { String pluginInfo = PluginOperateUtils.getSuccessInfo(result); if (result.isSuccess()) { jsCallback.execute("success"); - FRLogger.getLogger().info(pluginInfo + Inter.getLocText("FR-Plugin_Install_Success")); + FineLoggerFactory.getLogger().info(pluginInfo + Inter.getLocText("FR-Plugin_Install_Success")); JOptionPane.showMessageDialog(null, pluginInfo + Inter.getLocText("FR-Plugin_Install_Success")); } else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){ int rv = JOptionPane.showOptionDialog( @@ -55,7 +55,7 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback { PluginOperateUtils.updatePluginOnline(pluginMarker, jsCallback); }else { jsCallback.execute("failed"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Install_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Install_Failed")); JOptionPane.showMessageDialog(null, pluginInfo, Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/extra/exe/callback/UninstallPluginCallback.java b/designer-base/src/com/fr/design/extra/exe/callback/UninstallPluginCallback.java index 894903bff..be67ce617 100644 --- a/designer-base/src/com/fr/design/extra/exe/callback/UninstallPluginCallback.java +++ b/designer-base/src/com/fr/design/extra/exe/callback/UninstallPluginCallback.java @@ -1,8 +1,8 @@ package com.fr.design.extra.exe.callback; import com.fr.design.extra.PluginUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.error.PluginErrorCode; import com.fr.plugin.manage.PluginManager; @@ -25,7 +25,7 @@ public class UninstallPluginCallback extends AbstractPluginTaskCallback { public void done(PluginTaskResult result) { if (result.isSuccess()) { jsCallback.execute("success"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Delete_Success")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Delete_Success")); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Plugin_Delete_Success")); }else if (result.errorCode() == PluginErrorCode.NeedUninstallDependingPluginFirst) { int rv = JOptionPane.showOptionDialog( @@ -44,7 +44,7 @@ public class UninstallPluginCallback extends AbstractPluginTaskCallback { PluginManager.getController().uninstall(pluginMarker, true, new UninstallPluginCallback(pluginMarker, jsCallback)); } else { jsCallback.execute("failed"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Delete_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Delete_Failed")); JOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java b/designer-base/src/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java index 89f5e1c05..586538a93 100644 --- a/designer-base/src/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java +++ b/designer-base/src/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java @@ -2,8 +2,8 @@ package com.fr.design.extra.exe.callback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.error.PluginErrorCode; import com.fr.plugin.manage.PluginManager; @@ -37,7 +37,7 @@ public class UpdateFromDiskCallback extends AbstractPluginTaskCallback { public void done(PluginTaskResult result) { if (result.isSuccess()) { jsCallback.execute("success"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Update_Success")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Update_Success")); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Plugin_Update_Success")); } else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) { int rv = JOptionPane.showOptionDialog( @@ -76,7 +76,7 @@ public class UpdateFromDiskCallback extends AbstractPluginTaskCallback { PluginOperateUtils.installPluginFromDisk(zipFile, jsCallback); }else { jsCallback.execute("failed"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Update_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Update_Failed")); JOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java b/designer-base/src/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java index 441e27d95..8219fbe06 100644 --- a/designer-base/src/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java +++ b/designer-base/src/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java @@ -1,9 +1,8 @@ package com.fr.design.extra.exe.callback; -import com.fr.design.extra.PluginUtils; import com.fr.design.extra.PluginOperateUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.manage.control.AbstractDealPreTaskCallback; import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTaskResult; @@ -32,11 +31,11 @@ public class UpdateOnlineCallback extends AbstractDealPreTaskCallback { String pluginInfo = PluginOperateUtils.getSuccessInfo(result); if (result.isSuccess()) { jsCallback.execute("success"); - FRLogger.getLogger().info(pluginInfo + Inter.getLocText("FR-Plugin_Update_Success")); + FineLoggerFactory.getLogger().info(pluginInfo + Inter.getLocText("FR-Plugin_Update_Success")); JOptionPane.showMessageDialog(null,pluginInfo + Inter.getLocText("FR-Plugin_Update_Success")); } else { jsCallback.execute("failed"); - FRLogger.getLogger().info(Inter.getLocText("FR-Plugin_Update_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Plugin_Update_Failed")); JOptionPane.showMessageDialog(null, pluginInfo, Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/extra/tradition/callback/UpdateOnlineCallback.java b/designer-base/src/com/fr/design/extra/tradition/callback/UpdateOnlineCallback.java index ef594f89f..78661fabd 100644 --- a/designer-base/src/com/fr/design/extra/tradition/callback/UpdateOnlineCallback.java +++ b/designer-base/src/com/fr/design/extra/tradition/callback/UpdateOnlineCallback.java @@ -2,8 +2,8 @@ package com.fr.design.extra.tradition.callback; import com.fr.design.extra.PluginStatusCheckCompletePane; import com.fr.design.extra.PluginUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; import com.fr.plugin.error.PluginErrorCode; import com.fr.plugin.manage.PluginManager; @@ -31,7 +31,7 @@ public class UpdateOnlineCallback implements ProgressCallback { public void done(PluginTaskResult result){ if (result.isSuccess()) { - FRLogger.getLogger().info(Inter.getLocText("FR-Designer-Plugin_Update_Success")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Designer-Plugin_Update_Success")); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Plugin_Install_Successful")); } else if (result.errorCode() == PluginErrorCode.OperationNotSupport) { int rv = JOptionPane.showOptionDialog( @@ -49,7 +49,7 @@ public class UpdateOnlineCallback implements ProgressCallback { } PluginManager.getController().update(pluginMarker, toPluginMarker, new UpdateOnlineCallback(pluginMarker, toPluginMarker, pane)); } else { - FRLogger.getLogger().info(Inter.getLocText("FR-Designer-Plugin_Delete_Failed")); + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Designer-Plugin_Delete_Failed")); JOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), Inter.getLocText("FR-Designer-Plugin_Warning"), JOptionPane.ERROR_MESSAGE); } } diff --git a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java index dfd1f123f..b9ffee91a 100644 --- a/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java +++ b/designer-base/src/com/fr/design/file/HistoryTemplateListPane.java @@ -1,40 +1,37 @@ package com.fr.design.file; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.*; -import java.util.List; -import java.util.logging.Level; - -import javax.swing.*; - +import com.fr.base.FRContext; import com.fr.base.chart.chartdata.CallbackEvent; -import com.fr.design.constants.UIConstants; +import com.fr.dav.LocalEnv; +import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; +import com.fr.design.constants.UIConstants; import com.fr.design.data.DesignTableDataManager; -import com.fr.design.gui.ilable.UILabel; - -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; - -import com.fr.base.FRContext; import com.fr.design.data.datapane.TableDataTreePane; -import com.fr.dav.LocalEnv; -import com.fr.design.DesignModelAdapter; import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.UIList; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.module.DesignModuleFactory; +import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.project.ProjectConstants; -import com.fr.design.utils.gui.GUIPaintUtils; + +import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class HistoryTemplateListPane extends JPanel implements FileOperations, CallbackEvent { //最大保存内存中面板数,为0时关闭优化内存 @@ -120,7 +117,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations, C try { historyList.remove(contains(selected)); selected.getEditingFILE().closeTemplate(); - FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"Template", "alraedy_close"}, new String[]{selected.getEditingFILE().getName(), "."})); + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Template", "alraedy_close"}, new String[]{selected.getEditingFILE().getName(), "."})); MutilTempalteTabPane.getInstance().refreshOpenedTemplate(historyList); } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); diff --git a/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java b/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java index 24aa39693..e2c026465 100644 --- a/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java +++ b/designer-base/src/com/fr/design/file/MutilTempalteTabPane.java @@ -8,14 +8,13 @@ import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIScrollPopUpMenu; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; -import com.fr.design.mainframe.JVirtualTemplate; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.file.FILE; import com.fr.file.FileNodeFILE; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.Constants; import com.fr.stable.ProductConstants; import com.fr.stable.project.ProjectConstants; @@ -23,10 +22,18 @@ import com.fr.stable.project.ProjectConstants; import javax.swing.*; import javax.swing.plaf.basic.BasicMenuItemUI; import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; +import java.awt.event.AWTEventListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.geom.Arc2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Line2D; +import java.awt.geom.Path2D; +import java.awt.geom.RoundRectangle2D; import java.io.File; -import java.util.logging.Level; /** * Author : daisy @@ -710,7 +717,7 @@ public class MutilTempalteTabPane extends JComponent implements MouseListener, M ProductConstants.PRODUCT_NAME, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (returnVal == JOptionPane.YES_OPTION && specifiedTemplate.saveTemplate()) { specifiedTemplate.saveTemplate(); - FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); } } HistoryTemplateListPane.getInstance().closeSelectedReport(specifiedTemplate); diff --git a/designer-base/src/com/fr/design/file/SaveSomeTemplatePane.java b/designer-base/src/com/fr/design/file/SaveSomeTemplatePane.java index 568428c4e..522495e80 100644 --- a/designer-base/src/com/fr/design/file/SaveSomeTemplatePane.java +++ b/designer-base/src/com/fr/design/file/SaveSomeTemplatePane.java @@ -1 +1 @@ -package com.fr.design.file; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.UIList; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; import com.fr.general.Inter; import com.fr.stable.ProductConstants; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.util.logging.Level; /** * Author : daisy * Date: 13-8-9 * Time: 下午3:41 */ public class SaveSomeTemplatePane extends BasicPane { private UICheckBox[] templateCheckBoxes = null; private BasicDialog dialog; private JPanel templatesChoosePane; private UIScrollPane scrollPane; private java.util.List> unSavedTemplate = new ArrayList>(); private boolean isAllSaved = false; //该变量用来判断是在关闭其他模板或是关闭设计器的时候,是否需要判断当前模板有没有保存 private boolean isJudgeCurrentEditingTemplate = true; public SaveSomeTemplatePane(boolean isNeedTojudgeCurrent) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); if (this.dialog == null) { this.dialog = this.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { for (int i = 0; i < templateCheckBoxes.length; i++) { if (templateCheckBoxes[i].isSelected()) { saveSelectedTemplate(unSavedTemplate.get(i)); } } isAllSaved = true; } public void doCancel() { isAllSaved = false; } }); } UILabel tip = new UILabel(Inter.getLocText("Select_The_Source_To_Save")); this.add(tip, BorderLayout.NORTH); templatesChoosePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); UIScrollPane scrollPane = new UIScrollPane(templatesChoosePane); this.add(scrollPane, BorderLayout.CENTER); this.isJudgeCurrentEditingTemplate = isNeedTojudgeCurrent; } private void initTemplatesChoosePane() { templatesChoosePane.setBorder(BorderFactory.createTitledBorder("")); for (int i = 0; i < unSavedTemplate.size(); i++) { templateCheckBoxes[i] = new UICheckBox(unSavedTemplate.get(i).getEditingFILE().getName()); templateCheckBoxes[i].setSelected(true); } final UIList templatesList = new UIList(templateCheckBoxes); templatesList.setModel(new UnSeletedTemplateListDataMode()); templatesList.setCellRenderer(new UnSelectedListCellRender()); templatesList.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { super.mousePressed(e); int index = templatesList.getSelectedIndex(); if (index < 0) { return; } UICheckBox checkBox = (UICheckBox) templatesList.getModel().getElementAt(index); checkBox.setSelected(!checkBox.isSelected()); templatesList.repaint(); } }); final UICheckBox filenameCheckBox = new UICheckBox(Inter.getLocText("Choose_All")); filenameCheckBox.setSelected(true); filenameCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { boolean isSelected = filenameCheckBox.isSelected(); for (int i = 0; i < templatesList.getModel().getSize(); i++) { UICheckBox checkBox = (UICheckBox) templatesList.getModel().getElementAt(i); checkBox.setSelected(isSelected); } templatesList.repaint(); } }); templatesChoosePane.add(filenameCheckBox, BorderLayout.NORTH); templatesChoosePane.add(templatesList, BorderLayout.CENTER); } public boolean showSavePane() { populate(); //如果有未保存的文件 ,则跳出保存对话框,选择要存储的项目 if (!unSavedTemplate.isEmpty()) { dialog.setVisible(true); } else { isAllSaved = true; } return isAllSaved; } public void populate() { java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); JTemplate currentTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); for (int i = 0; i < opendedTemplate.size(); i++) { if (isneedToAdd(opendedTemplate.get(i), currentTemplate)) { unSavedTemplate.add(opendedTemplate.get(i)); } } templateCheckBoxes = new UICheckBox[unSavedTemplate.size()]; initTemplatesChoosePane(); } private boolean isneedToAdd(JTemplate template, JTemplate currentTemplate) { //所有模板都判断是不是保存 if (isJudgeCurrentEditingTemplate) { return !template.isALLSaved(); } //当前编辑的模板不判断是否已经保存 if (ComparatorUtils.equals(template, currentTemplate)) { return false; } else { return !template.isALLSaved(); } } private void saveSelectedTemplate(JTemplate specifiedTemplate) { if (!specifiedTemplate.isSaved()) { specifiedTemplate.stopEditing(); specifiedTemplate.saveTemplate(); } FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); } public int saveLastOneTemplate() { JTemplate specifiedTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!specifiedTemplate.isALLSaved()) { specifiedTemplate.stopEditing(); int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Utils-Would_you_like_to_save") + " \"" + specifiedTemplate.getEditingFILE() + "\" ?", ProductConstants.PRODUCT_NAME, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (returnVal == JOptionPane.YES_OPTION && specifiedTemplate.saveTemplate()) { specifiedTemplate.saveTemplate(); FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); } return returnVal; } return JOptionPane.YES_OPTION; } protected String title4PopupWindow() { return Inter.getLocText("Save"); } private class UnSelectedListCellRender extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, final boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); templateCheckBoxes[index] = (UICheckBox) value; templateCheckBoxes[index].setBackground(list.getBackground()); return templateCheckBoxes[index]; } } private class UnSeletedTemplateListDataMode extends AbstractListModel { @Override public int getSize() { return templateCheckBoxes.length; } @Override public UICheckBox getElementAt(int index) { if (index > getSize() - 1 || index < 0) { return null; } return templateCheckBoxes[index]; } } } \ No newline at end of file +package com.fr.design.file; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilist.UIList; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.log.FineLoggerFactory; import com.fr.stable.ProductConstants; import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; /** * Author : daisy * Date: 13-8-9 * Time: 下午3:41 */ public class SaveSomeTemplatePane extends BasicPane { private UICheckBox[] templateCheckBoxes = null; private BasicDialog dialog; private JPanel templatesChoosePane; private UIScrollPane scrollPane; private java.util.List> unSavedTemplate = new ArrayList>(); private boolean isAllSaved = false; //该变量用来判断是在关闭其他模板或是关闭设计器的时候,是否需要判断当前模板有没有保存 private boolean isJudgeCurrentEditingTemplate = true; public SaveSomeTemplatePane(boolean isNeedTojudgeCurrent) { this.setLayout(FRGUIPaneFactory.createBorderLayout()); if (this.dialog == null) { this.dialog = this.showSmallWindow(DesignerContext.getDesignerFrame(), new DialogActionAdapter() { @Override public void doOk() { for (int i = 0; i < templateCheckBoxes.length; i++) { if (templateCheckBoxes[i].isSelected()) { saveSelectedTemplate(unSavedTemplate.get(i)); } } isAllSaved = true; } public void doCancel() { isAllSaved = false; } }); } UILabel tip = new UILabel(Inter.getLocText("Select_The_Source_To_Save")); this.add(tip, BorderLayout.NORTH); templatesChoosePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); UIScrollPane scrollPane = new UIScrollPane(templatesChoosePane); this.add(scrollPane, BorderLayout.CENTER); this.isJudgeCurrentEditingTemplate = isNeedTojudgeCurrent; } private void initTemplatesChoosePane() { templatesChoosePane.setBorder(BorderFactory.createTitledBorder("")); for (int i = 0; i < unSavedTemplate.size(); i++) { templateCheckBoxes[i] = new UICheckBox(unSavedTemplate.get(i).getEditingFILE().getName()); templateCheckBoxes[i].setSelected(true); } final UIList templatesList = new UIList(templateCheckBoxes); templatesList.setModel(new UnSeletedTemplateListDataMode()); templatesList.setCellRenderer(new UnSelectedListCellRender()); templatesList.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { super.mousePressed(e); int index = templatesList.getSelectedIndex(); if (index < 0) { return; } UICheckBox checkBox = (UICheckBox) templatesList.getModel().getElementAt(index); checkBox.setSelected(!checkBox.isSelected()); templatesList.repaint(); } }); final UICheckBox filenameCheckBox = new UICheckBox(Inter.getLocText("Choose_All")); filenameCheckBox.setSelected(true); filenameCheckBox.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { boolean isSelected = filenameCheckBox.isSelected(); for (int i = 0; i < templatesList.getModel().getSize(); i++) { UICheckBox checkBox = (UICheckBox) templatesList.getModel().getElementAt(i); checkBox.setSelected(isSelected); } templatesList.repaint(); } }); templatesChoosePane.add(filenameCheckBox, BorderLayout.NORTH); templatesChoosePane.add(templatesList, BorderLayout.CENTER); } public boolean showSavePane() { populate(); //如果有未保存的文件 ,则跳出保存对话框,选择要存储的项目 if (!unSavedTemplate.isEmpty()) { dialog.setVisible(true); } else { isAllSaved = true; } return isAllSaved; } public void populate() { java.util.List> opendedTemplate = HistoryTemplateListPane.getInstance().getHistoryList(); JTemplate currentTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); for (int i = 0; i < opendedTemplate.size(); i++) { if (isneedToAdd(opendedTemplate.get(i), currentTemplate)) { unSavedTemplate.add(opendedTemplate.get(i)); } } templateCheckBoxes = new UICheckBox[unSavedTemplate.size()]; initTemplatesChoosePane(); } private boolean isneedToAdd(JTemplate template, JTemplate currentTemplate) { //所有模板都判断是不是保存 if (isJudgeCurrentEditingTemplate) { return !template.isALLSaved(); } //当前编辑的模板不判断是否已经保存 if (ComparatorUtils.equals(template, currentTemplate)) { return false; } else { return !template.isALLSaved(); } } private void saveSelectedTemplate(JTemplate specifiedTemplate) { if (!specifiedTemplate.isSaved()) { specifiedTemplate.stopEditing(); specifiedTemplate.saveTemplate(); } FineLoggerFactory.getLogger().info( Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); } public int saveLastOneTemplate() { JTemplate specifiedTemplate = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (!specifiedTemplate.isALLSaved()) { specifiedTemplate.stopEditing(); int returnVal = JOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("Utils-Would_you_like_to_save") + " \"" + specifiedTemplate.getEditingFILE() + "\" ?", ProductConstants.PRODUCT_NAME, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); if (returnVal == JOptionPane.YES_OPTION && specifiedTemplate.saveTemplate()) { specifiedTemplate.saveTemplate(); FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{specifiedTemplate.getEditingFILE().getName(), "."})); } return returnVal; } return JOptionPane.YES_OPTION; } protected String title4PopupWindow() { return Inter.getLocText("Save"); } private class UnSelectedListCellRender extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, final boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); templateCheckBoxes[index] = (UICheckBox) value; templateCheckBoxes[index].setBackground(list.getBackground()); return templateCheckBoxes[index]; } } private class UnSeletedTemplateListDataMode extends AbstractListModel { @Override public int getSize() { return templateCheckBoxes.length; } @Override public UICheckBox getElementAt(int index) { if (index > getSize() - 1 || index < 0) { return null; } return templateCheckBoxes[index]; } } } \ No newline at end of file diff --git a/designer-base/src/com/fr/design/file/TemplateTreePane.java b/designer-base/src/com/fr/design/file/TemplateTreePane.java index a52e42389..f2fb514f7 100644 --- a/designer-base/src/com/fr/design/file/TemplateTreePane.java +++ b/designer-base/src/com/fr/design/file/TemplateTreePane.java @@ -15,8 +15,8 @@ import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; import com.fr.file.filetree.IOFileNodeFilter; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.CoreConstants; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; @@ -34,7 +34,6 @@ import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.logging.Level; public class TemplateTreePane extends JPanel implements FileOperations { @@ -157,7 +156,7 @@ public class TemplateTreePane extends JPanel implements FileOperations { */ public void refresh() { reportletsTree.refresh(); - FRLogger.getLogger().log(Level.INFO, Inter.getLocText(new String[]{"File-tree", "Refresh_Successfully"}) + "!"); + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"File-tree", "Refresh_Successfully"}) + "!"); } /** @@ -297,11 +296,11 @@ public class TemplateTreePane extends JPanel implements FileOperations { //todo 走下这个流程,否则集群下其它节点无法同步删除 FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); } catch (IOException e) { - FRLogger.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().info(e.getMessage()); FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); } } else { - FRLogger.getLogger().info("No Trash Available"); + FineLoggerFactory.getLogger().info("No Trash Available"); FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); } } diff --git a/designer-base/src/com/fr/design/formula/JavaEditorPane.java b/designer-base/src/com/fr/design/formula/JavaEditorPane.java index 0ba32641c..a5245d685 100644 --- a/designer-base/src/com/fr/design/formula/JavaEditorPane.java +++ b/designer-base/src/com/fr/design/formula/JavaEditorPane.java @@ -9,7 +9,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.SyntaxConstants; import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.EncodeConstants; import com.fr.stable.JavaCompileInfo; @@ -65,7 +65,7 @@ public class JavaEditorPane extends BasicPane { javaText.setText("//Didn't find java source match the class"); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); javaText.setText("//Loading source code from server error"); } } @@ -162,7 +162,7 @@ public class JavaEditorPane extends BasicPane { JOptionPane.showMessageDialog(null, Inter.getLocText(new String[]{"Save", "Successfully"}) + "!"); fireSaveActionListener(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); JOptionPane.showMessageDialog(null, Inter.getLocText(new String[]{"Save", "Failed"}) + "!"); } @@ -191,9 +191,9 @@ public class JavaEditorPane extends BasicPane { } JOptionPane.showMessageDialog(null, message); } catch (InterruptedException e1) { - FRLogger.getLogger().error(e1.getMessage(), e1); + FineLoggerFactory.getLogger().error(e1.getMessage(), e1); } catch (ExecutionException e1) { - FRLogger.getLogger().error(e1.getMessage(), e1); + FineLoggerFactory.getLogger().error(e1.getMessage(), e1); } } }.execute(); diff --git a/designer-base/src/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/com/fr/design/gui/UILookAndFeel.java index ed93237f3..f02715716 100644 --- a/designer-base/src/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/com/fr/design/gui/UILookAndFeel.java @@ -29,7 +29,7 @@ import com.fr.design.gui.itoolbar.UIToolBarBorder; import com.fr.design.gui.itoolbar.UIToolBarSeparatorUI; import com.fr.design.gui.itooltip.UIToolTipBorder; import com.fr.design.gui.itree.UITreeUI; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.IOUtils; import javax.swing.ImageIcon; @@ -195,7 +195,7 @@ public class UILookAndFeel extends MetalLookAndFeel { "com/fr/design/images/lookandfeel/" + fileName, UILookAndFeel.class); if (url == null) { - FRLogger.getLogger().error("Icon directory could not be resolved."); + FineLoggerFactory.getLogger().error("Icon directory could not be resolved."); return null; } } diff --git a/designer-base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java b/designer-base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java index 8a02bb057..6cdc26bfb 100644 --- a/designer-base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java +++ b/designer-base/src/com/fr/design/gui/autocomplete/AutoCompletePopupWindow.java @@ -10,7 +10,7 @@ package com.fr.design.gui.autocomplete; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.PopupWindowDecorator; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import javax.swing.event.CaretEvent; @@ -303,7 +303,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener, private void installKeyBindings() { if (AutoCompletion.isDebug()) { - FRLogger.getLogger().debug("PopupWindow: Installing keybindings"); + FineLoggerFactory.getLogger().debug("PopupWindow: Installing keybindings"); } if (escapeKap == null) { // Lazily create actions. @@ -711,7 +711,7 @@ class AutoCompletePopupWindow extends JWindow implements CaretListener, private void uninstallKeyBindings() { if (AutoCompletion.isDebug()) { - FRLogger.getLogger().debug("PopupWindow: Removing keybindings"); + FineLoggerFactory.getLogger().debug("PopupWindow: Removing keybindings"); } JTextComponent comp = ac.getTextComponent(); diff --git a/designer-base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java b/designer-base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java index 8b93f8540..a9dd305b0 100644 --- a/designer-base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java +++ b/designer-base/src/com/fr/design/gui/autocomplete/ParameterizedCompletionContext.java @@ -14,7 +14,7 @@ import com.fr.design.gui.autocomplete.ParameterizedCompletionInsertionInfo.Repla import com.fr.design.gui.syntax.ui.rsyntaxtextarea.DocumentRange; import com.fr.design.gui.syntax.ui.rsyntaxtextarea.RSyntaxTextArea; import com.fr.design.gui.syntax.ui.rtextarea.ChangeableHighlightPainter; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import javax.swing.event.CaretEvent; @@ -440,7 +440,7 @@ class ParameterizedCompletionContext { */ private void installKeyBindings() { if (AutoCompletion.isDebug()) { - FRLogger.getLogger().debug("CompletionContext: Installing keybindings"); + FineLoggerFactory.getLogger().debug("CompletionContext: Installing keybindings"); } JTextComponent tc = ac.getTextComponent(); InputMap im = tc.getInputMap(); @@ -739,7 +739,7 @@ class ParameterizedCompletionContext { private void uninstallKeyBindings() { if (AutoCompletion.isDebug()) { - FRLogger.getLogger().debug("CompletionContext Uninstalling keybindings"); + FineLoggerFactory.getLogger().debug("CompletionContext Uninstalling keybindings"); } JTextComponent tc = ac.getTextComponent(); diff --git a/designer-base/src/com/fr/design/gui/frpane/UITabbedPaneUI.java b/designer-base/src/com/fr/design/gui/frpane/UITabbedPaneUI.java index 38d33984c..d95740798 100644 --- a/designer-base/src/com/fr/design/gui/frpane/UITabbedPaneUI.java +++ b/designer-base/src/com/fr/design/gui/frpane/UITabbedPaneUI.java @@ -2,7 +2,7 @@ package com.fr.design.gui.frpane; import com.fr.base.BaseUtils; import com.fr.design.constants.UIConstants; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralUtils; import javax.swing.*; @@ -129,7 +129,7 @@ public class UITabbedPaneUI extends BasicTabbedPaneUI { tabPane.addTab(tabName, (Component) GeneralUtils.classForName(classpath).newInstance()); } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage(), ex); + FineLoggerFactory.getLogger().error(ex.getMessage(), ex); } } } diff --git a/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java b/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java index 2ec5590f6..575ab630b 100644 --- a/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java +++ b/designer-base/src/com/fr/design/gui/icombobox/LazyComboBox.java @@ -3,7 +3,7 @@ */ package com.fr.design.gui.icombobox; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import javax.swing.DefaultComboBoxModel; @@ -83,7 +83,7 @@ public abstract class LazyComboBox extends UIComboBox implements PopupMenuListen try { LazyComboBox.this.loadList(get()); } catch (InterruptedException | ExecutionException exception) { - FRLogger.getLogger().debug(exception.getMessage()); + FineLoggerFactory.getLogger().debug(exception.getMessage()); } LazyComboBox.this.showPopup(); } diff --git a/designer-base/src/com/fr/design/gui/imenu/UIBasicMenuUI.java b/designer-base/src/com/fr/design/gui/imenu/UIBasicMenuUI.java index 9279ba868..9d8c23259 100644 --- a/designer-base/src/com/fr/design/gui/imenu/UIBasicMenuUI.java +++ b/designer-base/src/com/fr/design/gui/imenu/UIBasicMenuUI.java @@ -6,7 +6,7 @@ package com.fr.design.gui.imenu; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import javax.swing.event.*; @@ -504,7 +504,7 @@ public class UIBasicMenuUI extends UIBasicMenuItemUI { } if (DEBUG) { - FRLogger.getLogger().info("in TinyMenuUI.menuKeyTyped for " + menuItem.getText()); + FineLoggerFactory.getLogger().info("in TinyMenuUI.menuKeyTyped for " + menuItem.getText()); } if (!crossMenuMnemonic) { @@ -544,7 +544,7 @@ public class UIBasicMenuUI extends UIBasicMenuItemUI { return; } if (DEBUG) { - FRLogger.getLogger().info("in TinyMenuUI.menuKeyPressed for " + menuItem.getText()); + FineLoggerFactory.getLogger().info("in TinyMenuUI.menuKeyPressed for " + menuItem.getText()); } char keyChar = e.getKeyChar(); if (!Character.isLetterOrDigit(keyChar)){ diff --git a/designer-base/src/com/fr/design/gui/imenutable/UIMenuNameableCreator.java b/designer-base/src/com/fr/design/gui/imenutable/UIMenuNameableCreator.java index bc593c00a..544d1e4e5 100644 --- a/designer-base/src/com/fr/design/gui/imenutable/UIMenuNameableCreator.java +++ b/designer-base/src/com/fr/design/gui/imenutable/UIMenuNameableCreator.java @@ -1,7 +1,7 @@ package com.fr.design.gui.imenutable; import com.fr.design.beans.BasicBeanPane; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.stable.Nameable; public class UIMenuNameableCreator implements Nameable{ @@ -46,9 +46,9 @@ public class UIMenuNameableCreator implements Nameable{ try { cloneObj = obj.getClass().newInstance(); } catch (InstantiationException e) { - FRLogger.getLogger().error("UIMenuNameableCreator InstantiationException"); + FineLoggerFactory.getLogger().error("UIMenuNameableCreator InstantiationException"); } catch (IllegalAccessException e) { - FRLogger.getLogger().error("UIMenuNameableCreator IllegalAccessException"); + FineLoggerFactory.getLogger().error("UIMenuNameableCreator IllegalAccessException"); } return new UIMenuNameableCreator(name, cloneObj, this.paneClazz); diff --git a/designer-base/src/com/fr/design/gui/style/NumberDragBar.java b/designer-base/src/com/fr/design/gui/style/NumberDragBar.java index cd9e7f8cb..5ab5c1698 100644 --- a/designer-base/src/com/fr/design/gui/style/NumberDragBar.java +++ b/designer-base/src/com/fr/design/gui/style/NumberDragBar.java @@ -1,7 +1,7 @@ package com.fr.design.gui.style; import com.fr.design.constants.UIConstants; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import javax.swing.event.ChangeEvent; @@ -126,7 +126,7 @@ public class NumberDragBar extends JComponent { repaint(); revalidate(); } catch (InterruptedException e) { - FRLogger.getLogger().error(e.toString()); + FineLoggerFactory.getLogger().error(e.toString()); } } }); diff --git a/designer-base/src/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java b/designer-base/src/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java index 10fb64ded..fef32a875 100644 --- a/designer-base/src/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java +++ b/designer-base/src/com/fr/design/javascript/beautify/JavaScriptFormatHelper.java @@ -1,7 +1,7 @@ package com.fr.design.javascript.beautify; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.IOUtils; import com.fr.script.ScriptFactory; @@ -42,7 +42,7 @@ public class JavaScriptFormatHelper { Invocable invocable = (Invocable) scriptEngine; result = (String) invocable.invokeFunction("js_beautify", jsCode, option.toFormatArgument()); } catch (ScriptException | NoSuchMethodException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return result; } diff --git a/designer-base/src/com/fr/design/mainframe/DesignerContext.java b/designer-base/src/com/fr/design/mainframe/DesignerContext.java index 3b76aab40..9362f37c5 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerContext.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerContext.java @@ -6,7 +6,7 @@ package com.fr.design.mainframe; import com.fr.base.Style; import com.fr.design.designer.TargetComponent; import com.fr.design.dialog.BasicDialog; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; import javax.swing.*; @@ -73,14 +73,14 @@ public class DesignerContext { return (Clipboard) clipMethod.invoke(transferAction, new Object[]{comp}); } catch (Exception securityException) { - FRLogger.getLogger().error(securityException.getMessage(), securityException); + FineLoggerFactory.getLogger().error(securityException.getMessage(), securityException); //用反射机制,获得TransferHandler的getClipboard //这样可以保证和TextField直接的copy paste try { //控件的Clipboard. DesignerContext.clipboard = comp.getToolkit().getSystemClipboard(); } catch (Exception exp) { - FRLogger.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); DesignerContext.clipboard = new Clipboard("FR"); } } diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index fa70748d8..d8096aab2 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -40,10 +40,11 @@ import com.fr.file.FILEFactory; import com.fr.file.FileFILE; import com.fr.file.FileNodeFILE; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.general.env.EnvContext; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.manage.PluginFilter; @@ -56,23 +57,9 @@ import com.fr.stable.StableUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; -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.*; import javax.swing.border.MatteBorder; -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.*; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; @@ -95,7 +82,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.logging.Level; public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { public static final String DESIGNER_FRAME_NAME = "designer_frame"; @@ -736,18 +722,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta JOptionPane.QUESTION_MESSAGE); if (returnVal == JOptionPane.YES_OPTION && editingTemplate.saveTemplate()) { editingTemplate.saveTemplate(); - FRLogger.getLogger().log( - Level.INFO, - Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ - editingTemplate.getEditingFILE().getName(), "."})); + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ + editingTemplate.getEditingFILE().getName(), "."})); } } else { if (editingTemplate.saveTemplate()) { editingTemplate.saveTemplate(); - FRLogger.getLogger().log( - Level.INFO, - Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ - editingTemplate.getEditingFILE().getName(), "."})); + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Template", "already-saved"}, new String[]{ + editingTemplate.getEditingFILE().getName(), "."})); } } } @@ -846,7 +828,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta return; } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } // p:判断一下,如何文件为空或者文件不存在,直接返回. @@ -860,7 +842,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { openFile(tplFile); } catch (Throwable t) { - FRLogger.getLogger().error(t.getMessage(), t); + FineLoggerFactory.getLogger().error(t.getMessage(), t); addAndActivateJTemplate(); } @@ -964,7 +946,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { thread.join(); } catch (InterruptedException e) { - FRLogger.getLogger().error("Map Thread Error"); + FineLoggerFactory.getLogger().error("Map Thread Error"); } DesignerEnvManager.getEnvManager().setLastOpenFile( diff --git a/designer-base/src/com/fr/design/mainframe/JTemplate.java b/designer-base/src/com/fr/design/mainframe/JTemplate.java index 40d00a703..bec2dcf2e 100644 --- a/designer-base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/com/fr/design/mainframe/JTemplate.java @@ -45,7 +45,7 @@ import com.fr.file.MemFILE; import com.fr.form.ui.NoneWidget; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.report.cell.Elem; import com.fr.report.cell.cellattr.CellImage; @@ -531,7 +531,7 @@ public abstract class JTemplate> return false; } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } diff --git a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index 9a5effae4..ebc69aef5 100644 --- a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -7,11 +7,10 @@ import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogLevel; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; -import com.fr.general.LogRecordTime; +import com.fr.general.log.Log4jConfig; +import com.fr.log.FineLoggerFactory; import com.fr.log.LogHandler; import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.LogRecordTimeProvider; @@ -38,9 +37,9 @@ import java.util.logging.LogRecord; import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; public class DesignerLogHandler { - protected static final int INFO_INT = FRLogLevel.INFO.intValue(); - protected static final int ERRO_INT = FRLogLevel.ERROR.intValue(); - protected static final int SERVER_INT = FRLogLevel.SEVERE.intValue(); + protected static final int INFO_INT = com.fr.third.apache.log4j.Level.INFO.toInt(); + protected static final int ERROR_INT = com.fr.third.apache.log4j.Level.ERROR.toInt(); + protected static final int WARN_INT = com.fr.third.apache.log4j.Level.WARN.toInt(); private static final int GAP_X = -150; private static final int INFO_GAP_Y = -60; private static final int ERRO_GAP_Y = -40; @@ -51,7 +50,7 @@ public class DesignerLogHandler { @Override public void envChanged() { // envchange后需要重新读取webinf里的log4j配置, 重新添加appender - FRLogger.getLogger().addLogAppender(new LogHandler() { + FineLoggerFactory.getLogger().addLogAppender(new LogHandler() { @Override public DesignerLogAppender getHandler() { return new DesignerLogAppender(); @@ -119,20 +118,20 @@ public class DesignerLogHandler { @Override public void actionPerformed(ActionEvent e) { - JPopupMenu showsetPopup = new JPopupMenu(); - int logLevelvalue = ServerConfig.getInstance().getServerLogLevel().intValue(); - if (logLevelvalue <= INFO_INT) { - showsetPopup.add(showInfo); - showsetPopup.add(showError); - showsetPopup.add(showServer); - showsetPopup.show(caption, caption.getWidth() + GAP_X, INFO_GAP_Y); - } else if (logLevelvalue == ERRO_INT) { - showsetPopup.add(showError); - showsetPopup.add(showServer); - showsetPopup.show(caption, caption.getWidth() + GAP_X, ERRO_GAP_Y); + JPopupMenu jPopupMenu = new JPopupMenu(); + int logLevelInt = Log4jConfig.getInstance().getRootLevel().toInt(); + if (logLevelInt <= INFO_INT) { + jPopupMenu.add(showInfo); + jPopupMenu.add(showError); + jPopupMenu.add(showServer); + jPopupMenu.show(caption, caption.getWidth() + GAP_X, INFO_GAP_Y); + } else if (logLevelInt == ERROR_INT) { + jPopupMenu.add(showError); + jPopupMenu.add(showServer); + jPopupMenu.show(caption, caption.getWidth() + GAP_X, ERRO_GAP_Y); } else { - showsetPopup.add(showServer); - showsetPopup.show(caption, caption.getWidth() + GAP_X, SERVER_GAP_Y); + jPopupMenu.add(showServer); + jPopupMenu.show(caption, caption.getWidth() + GAP_X, SERVER_GAP_Y); } } }); @@ -150,10 +149,6 @@ public class DesignerLogHandler { logHandlerArea.printStackTrace(message, level, date); } - public void printRemoteLog(LogRecordTime logRecordTime) { - logHandlerArea.printStackTrace(logRecordTime); - } - private class LogHandlerArea extends JPanel { private static final long serialVersionUID = 8215630927304621660L; @@ -227,9 +222,9 @@ public class DesignerLogHandler { int logLevelvalue = logRecord.getLevel().intValue(); if (logLevelvalue == INFO_INT && showInfo.isSelected()) { printMessage(logRecord.getMessage(), logLevelvalue, date, logRecord.getThrown()); - } else if (logLevelvalue == ERRO_INT && showError.isSelected()) { + } else if (logLevelvalue == ERROR_INT && showError.isSelected()) { printMessage(logRecord.getMessage(), logLevelvalue, date, logRecord.getThrown()); - } else if (logLevelvalue == SERVER_INT && showServer.isSelected()) { + } else if (logLevelvalue == WARN_INT && showServer.isSelected()) { printMessage(logRecord.getMessage(), logLevelvalue, date, logRecord.getThrown()); } @@ -239,9 +234,9 @@ public class DesignerLogHandler { int logLevelvalue = level.intValue(); if (logLevelvalue == INFO_INT && showInfo.isSelected()) { printMessage(message, logLevelvalue, date); - } else if (logLevelvalue == ERRO_INT && showError.isSelected()) { + } else if (logLevelvalue == ERROR_INT && showError.isSelected()) { printMessage(message, logLevelvalue, date); - } else if (logLevelvalue == SERVER_INT && showServer.isSelected()) { + } else if (logLevelvalue == WARN_INT && showServer.isSelected()) { printMessage(message, logLevelvalue, date); } @@ -269,10 +264,10 @@ public class DesignerLogHandler { private void log(String str, int style) { SimpleAttributeSet attrSet = new SimpleAttributeSet(); - if (style == ERRO_INT) { + if (style == ERROR_INT) { StyleConstants.setForeground(attrSet, new Color(247, 148, 29)); StyleConstants.setBold(attrSet, true); - } else if (style == SERVER_INT) { + } else if (style == WARN_INT) { StyleConstants.setForeground(attrSet, Color.red); StyleConstants.setBold(attrSet, true); } else if (style == INFO_INT) { @@ -291,9 +286,9 @@ public class DesignerLogHandler { } private String swithInter(String str, int style) { - if (style == ERRO_INT) { + if (style == ERROR_INT) { str = Inter.getLocText("FR-Designer_Alert") + ":" + str + "\n"; - } else if (style == SERVER_INT) { + } else if (style == WARN_INT) { str = Inter.getLocText("FR-Designer_Seriously") + ":" + str + "\n"; } else { str = Inter.getLocText("FR-Designer_Normal") + ":" + str + "\n"; @@ -305,9 +300,9 @@ public class DesignerLogHandler { LogMessageBar.getInstance().setMessage(message); if (level == DesignerLogHandler.INFO_INT && showInfo.isSelected()) { caption.infoAdd(); - } else if (level == DesignerLogHandler.ERRO_INT && showError.isSelected()) { + } else if (level == DesignerLogHandler.ERROR_INT && showError.isSelected()) { caption.errorAdd(); - } else if (level == DesignerLogHandler.SERVER_INT && showServer.isSelected()) { + } else if (level == DesignerLogHandler.WARN_INT && showServer.isSelected()) { caption.serverAdd(); } } diff --git a/designer-base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java b/designer-base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java index 8a01b6b95..d4450b43e 100644 --- a/designer-base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java +++ b/designer-base/src/com/fr/design/mainframe/templateinfo/TemplateInfoCollector.java @@ -9,7 +9,7 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.SiteCenterToken; import com.fr.env.RemoteEnv; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralUtils; import com.fr.general.IOUtils; import com.fr.general.SiteCenter; @@ -207,7 +207,7 @@ public class TemplateInfoCollector implements Serializable, FileOutputStream out = new FileOutputStream(getInfoFile()); XMLTools.writeOutputStreamXML(this, out); } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage()); + FineLoggerFactory.getLogger().error(ex.getMessage()); } } diff --git a/designer-base/src/com/fr/design/style/background/BackgroundPane.java b/designer-base/src/com/fr/design/style/background/BackgroundPane.java index 7d2c5ba69..1caf13e1d 100644 --- a/designer-base/src/com/fr/design/style/background/BackgroundPane.java +++ b/designer-base/src/com/fr/design/style/background/BackgroundPane.java @@ -17,7 +17,7 @@ import javax.swing.event.EventListenerList; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.dialog.BasicPane; import com.fr.general.Background; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; public class BackgroundPane extends BasicPane { @@ -139,7 +139,7 @@ public class BackgroundPane extends BasicPane { try { return quickPane.update(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return null; } diff --git a/designer-base/src/com/fr/design/style/color/ColorPicker.java b/designer-base/src/com/fr/design/style/color/ColorPicker.java index e91968675..90b859fcc 100644 --- a/designer-base/src/com/fr/design/style/color/ColorPicker.java +++ b/designer-base/src/com/fr/design/style/color/ColorPicker.java @@ -5,7 +5,7 @@ package com.fr.design.style.color; */ import com.fr.base.BaseUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import java.awt.*; @@ -73,7 +73,7 @@ public class ColorPicker extends JDialog implements ActionListener try { Thread.sleep(100); // 等待弹窗关闭 } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } colorPickerPanel.captureScreen(); } diff --git a/designer-base/src/com/fr/design/style/color/ColorSelectConfigManager.java b/designer-base/src/com/fr/design/style/color/ColorSelectConfigManager.java index dd92aa52e..80e1048b7 100644 --- a/designer-base/src/com/fr/design/style/color/ColorSelectConfigManager.java +++ b/designer-base/src/com/fr/design/style/color/ColorSelectConfigManager.java @@ -3,7 +3,7 @@ package com.fr.design.style.color; import com.fr.base.FRContext; import com.fr.file.XMLFileManager; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralContext; import com.fr.stable.EnvChangedListener; import com.fr.stable.xml.XMLPrintWriter; @@ -99,7 +99,7 @@ public class ColorSelectConfigManager extends XMLFileManager implements ColorSel try { FRContext.getCurrentEnv().writeResource(manager); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } diff --git a/designer-base/src/com/fr/design/style/color/CustomChooserPanel.java b/designer-base/src/com/fr/design/style/color/CustomChooserPanel.java index 852c8b2b1..15f11de11 100644 --- a/designer-base/src/com/fr/design/style/color/CustomChooserPanel.java +++ b/designer-base/src/com/fr/design/style/color/CustomChooserPanel.java @@ -28,7 +28,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.islider.UISlider; import com.fr.design.gui.ispinner.UIBasicSpinner; import com.fr.design.gui.itextfield.UITextField; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; /** @@ -241,7 +241,7 @@ class CustomChooserPanel extends AbstractColorChooserPanel implements ColorSelec } } catch (BadLocationException e1) { - FRLogger.getLogger().error(e1.getMessage()); + FineLoggerFactory.getLogger().error(e1.getMessage()); } } } diff --git a/designer-base/src/com/fr/design/utils/DesignUtils.java b/designer-base/src/com/fr/design/utils/DesignUtils.java index 25be2df48..1148d64f4 100644 --- a/designer-base/src/com/fr/design/utils/DesignUtils.java +++ b/designer-base/src/com/fr/design/utils/DesignUtils.java @@ -19,10 +19,10 @@ import com.fr.env.RemoteEnv; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.general.http.HttpClient; +import com.fr.log.FineLoggerFactory; import com.fr.security.JwtUtils; import com.fr.stable.ArrayUtils; import com.fr.stable.CodeUtils; @@ -31,11 +31,8 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.StartServer; -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; @@ -55,7 +52,6 @@ import java.net.URLEncoder; import java.util.Calendar; import java.util.Enumeration; import java.util.Locale; -import java.util.logging.Level; /** @@ -137,7 +133,7 @@ public class DesignUtils { try { serverSocket = new ServerSocket(startPort); } catch (IOException e1) { - FRLogger.getLogger().log(Level.WARNING, "Cannot create server socket on" + port); + FineLoggerFactory.getLogger().error("Cannot create server socket on" + port); } while (true) { try { @@ -248,7 +244,7 @@ public class DesignUtils { try { UIManager.setLookAndFeel(UILookAndFeel.class.getName()); } catch (Exception e) { - FRLogger.getLogger().log(Level.WARNING, "Substance Raven Graphite failed to initialize"); + FineLoggerFactory.getLogger().error("Substance Raven Graphite failed to initialize"); } //获取当前系统语言下设计器用的默认字体 FRFont guiFRFont = getCurrentLocaleFont(); diff --git a/designer-base/src/com/fr/design/utils/DrawRoutines.java b/designer-base/src/com/fr/design/utils/DrawRoutines.java index 79c91f106..d6b3fbb03 100644 --- a/designer-base/src/com/fr/design/utils/DrawRoutines.java +++ b/designer-base/src/com/fr/design/utils/DrawRoutines.java @@ -1,7 +1,7 @@ package com.fr.design.utils; import com.fr.design.utils.ColorRoutines; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import javax.swing.*; import java.awt.*; @@ -205,11 +205,11 @@ public class DrawRoutines { try { grabber.grabPixels(); } catch (InterruptedException e) { - FRLogger.getLogger().error("PixelGrabber interrupted waiting for pixels"); + FineLoggerFactory.getLogger().error("PixelGrabber interrupted waiting for pixels"); } if ((grabber.getStatus() & ImageObserver.ABORT) != 0) { - FRLogger.getLogger().info("Image fetch aborted or errored."); + FineLoggerFactory.getLogger().info("Image fetch aborted or errored."); } else { for (int y = 0; y < h; y++) { for (int x = 0; x < w; x++) { diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index 373b15f48..f004606f4 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -8,10 +8,7 @@ import com.fr.base.Parameter; import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; import com.fr.base.Utils; -import com.fr.base.env.EnvContext; -import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.base.remote.RemoteDeziConstants; -import com.fr.core.env.EnvConstants; import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreUtils; import com.fr.data.core.db.TableProcedure; @@ -38,13 +35,11 @@ import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.general.LogRecordTime; import com.fr.general.LogUtils; -import com.fr.general.http.HttpToolbox; import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.license.function.VT4FR; -import com.fr.log.FineLoggerFactory; import com.fr.regist.License; import com.fr.report.DesignAuthority; import com.fr.share.ShareConstants; @@ -61,7 +56,6 @@ import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLableReader; -import com.fr.third.guava.collect.ImmutableMap; import com.fr.web.ResourceConstants; import com.fr.report.util.AuthorityXMLUtils; @@ -99,41 +93,128 @@ import java.util.TimerTask; import java.util.logging.Level; import java.util.regex.Pattern; -import static com.fr.third.guava.base.Preconditions.checkArgument; - /** * @author null */ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { + private static final int TIME_OUT = 30 * 1000; + private static final int PLAIN_SOCKET_PORT = 80; + private static final int SSL_PORT = 443; + private static final int MAX_PER_ROUTE = 20; + private static final int MAX_TOTAL = 100; + private static final String REMOTE_PLUGIN = "remote_plugin.info"; private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; + private String path; + private String user; + private String password; + private Clock clock = null; + private String userID; + private Timer timer; + private int licNotSupport = 0; + private boolean isRoot = false; + private Timer logTimer = null; + private static ThreadLocal threadLocal = new ThreadLocal<>(); + private boolean isReadTimeOut = false; private String buildFilePath; - private RemoteEnvConfig env; + public RemoteEnv() { + this.clock = new Clock(this); + } public RemoteEnv(String path, String userName, String password) { - env = new RemoteEnvConfig(path, userName, password); + this(); + this.path = path; + this.user = userName; + this.password = password; } + /** + * 返回env配置路径 + */ @Override public String getPath() { - return env.getPath(); + return this.path; } + public void setPath(String s) { + this.path = s; + } + + /** + * 当前设计环境的用户名,用于远程设计 + */ @Override public String getUser() { - return env.getUsername(); + return user; + } + + public void setUser(String user) { + this.user = user; + clearUserID(); } public String getPassword() { - return env.getPassword(); + return password; } - @Override - public String getUserID() { - return EnvContext.currentToken(); + /** + * 修复密码中包含特殊字符,无法登录的问题 + * + * @return encoded password + */ + private String getEncodedPassword() { + try { + return URLEncoder.encode(password, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return password; + } + } + + public void setPassword(String password) { + this.password = password; + clearUserID(); + } + + public Clock getClock() { + return this.clock; + } + + public void setClock(Clock clock) { + this.clock = clock; + } + + private void clearUserID() { + this.userID = null; + } + + public void setThreadLocal(String value) { + synchronized (this) { + threadLocal.set(value); + } + + } + + public String getThreadLocal() { + return threadLocal.get(); + } + + /** + * 所有与服务器端交互前,都要调用这个方法生成UserID + */ + public String getValidUserID() throws EnvException { + // 如果登录之后userID还是null + if (this.userID == null) { + if (!VT4FR.RemoteDesign.support() && licNotSupport <= 0) { + licNotSupport++; + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); + } + throw new EnvException(Inter.getLocText("Env-Invalid_User_and_Password")); + } + + return this.userID; } /** @@ -167,6 +248,15 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + private void doWithTimeOutException() { + boolean isNotNeedTip = ComparatorUtils.equals(getThreadLocal(), "HEART_BEAT") || ComparatorUtils.equals(getThreadLocal(), "LOG_MESSAGE"); + if (!isReadTimeOut && !isNotNeedTip) { + isReadTimeOut = true; + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Data", "read_time_out"})); + isReadTimeOut = false; + } + FRContext.getLogger().info("Connection reset "); + } /** @@ -234,64 +324,126 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { - checkArgument(parentComponent instanceof Component, "parentComponent should be a java.awt.component"); - Component component = parentComponent; - String url = String.format("%s/connection", EnvConstants.toDecisionPath(getPath())); - ImmutableMap params = ImmutableMap.of( - "version", (Object) ProductConstants.DESIGNER_VERSION - ); - ImmutableMap headers = ImmutableMap.of( - EnvConstants.USERNAME, getUser(), - EnvConstants.PWD, getPassword()); - String res = HttpToolbox.post(url, params, headers); - if (res == null) { + refreshHttpSProperty(); + changeEnvPathFromExtra(); + + if (path.startsWith("https") && (!DesignerEnvManager.getEnvManager().isHttps())) { + return false; + } + + InputStream inputStream = RemoteEnvUtils.testConnection(true, this); + inputStream = filterInputStream(inputStream); + String res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); + + if (StringUtils.isEmpty(res)) { if (needMessage) { - JOptionPane.showMessageDialog(component, Inter.getLocText("Datasource-Connection_failed")); + JOptionPane.showMessageDialog( + parentComponent, + Inter.getLocText("Datasource-Connection_failed"), + UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), + JOptionPane.ERROR_MESSAGE + ); } return false; } else if (ComparatorUtils.equals(res, "true")) { + if (!clock.connected && isRegisteServer) { + //服务器中断又重新启动之后,重新向远程服务器注册 + register2Server(); + } return true; - } else { - if (ComparatorUtils.equals(res, EnvConstants.AUTH_ERROR)) { - JOptionPane.showMessageDialog(component, - Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) - , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); - return false; + } else if (ComparatorUtils.equals(res, "invalid username or password.")) { + JOptionPane.showMessageDialog( + parentComponent, + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, + new String[]{",", "", "", "!"} + ), + Inter.getLocText("FR-Server-All_Error"), + JOptionPane.ERROR_MESSAGE); + return false; + } else if (res.contains("RegistEditionException")) { + if (needMessage) { + JOptionPane.showMessageDialog( + parentComponent, + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, + new String[]{",", "!"} + ), + UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), + JOptionPane.ERROR_MESSAGE + ); } else { - if (ComparatorUtils.equals(res, EnvConstants.WAR_ERROR)) { - if (needMessage) { - JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); - } else { - FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); - } - return false; - } else { - if (needMessage) { - JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); - } else { - FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); - } - return false; - } + FRContext.getLogger().info( + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, + new String[]{",", "!"} + ) + ); } + return false; + } else if (ComparatorUtils.equals(res, "war not support remote design.")) { + if (needMessage) { + JOptionPane.showMessageDialog( + parentComponent, + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "NS-war-remote"}, + new String[]{",", "!"} + ), + UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), + JOptionPane.ERROR_MESSAGE + ); + } else { + FRContext.getLogger().info( + Inter.getLocText( + new String[]{"Datasource-Connection_failed", "NS-war-remote"}, + new String[]{",", "!"} + ) + ); + } + return false; + } else { + throw new EnvException(res); } } + private void changeEnvPathFromExtra() { + //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. + DesignerEnvProcessor processor + = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); + if (processor != null) { + this.path = processor.changeEnvPathBeforeConnect(user, password, path); + } + } private void refreshHttpSProperty() { - if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { + if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); System.setProperty(PWD_KEY, envManager.getCertificatePass()); } } + private void register2Server() { + try { + SignIn.signIn(this); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } /** * 心跳访问,用来更新当前用户的访问时间 * * @throws Exception e */ + public void heartBeatConnection() throws Exception { + // 刷新参数 + refreshHttpSProperty(); + // 获取结果 + InputStream inputStream = RemoteEnvUtils.headBeatConnection(this); + // 处理结果 + filterInputStream(inputStream); + } /** * 返回描述该运行环境的名字 @@ -303,6 +455,227 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Inter.getLocText("Env-Remote_Server"); } + /** + * 登录,返回userID + */ + @Override + public void signIn() throws Exception { + if (clock != null && clock.connected) { + return; + } + String remoteVersion = getDesignerVersion(); + if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { + throw new Exception("version not match"); + } + clearUserID(); + startLogTimer(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "r_sign_in"); + para.put("user", user); + para.put("password", getEncodedPassword()); + + simulateRPC(para, true); + + //neil:调用Clock方法,10秒向服务器发送一个字节,确保没掉线 + if (clock == null) { + Clock clock = new Clock(this); + setClock(clock); + } + clock.start(); + + // 远程登录的心跳访问, 防止设计器强制关闭而没有Logout + if (timer != null) { + timer.cancel(); + } + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + try { + RemoteEnv.this.setThreadLocal("HEART_BEAT"); + RemoteEnv.this.heartBeatConnection(); + } catch (Exception e) { + FRContext.getLogger().error("Server may be disconnected.", e); + } + } + }, RemoteDeziConstants.HEARTBEAT_DELAY, RemoteDeziConstants.HEARTBEAT_DELAY); + } + + + private void startLogTimer() { + if (logTimer != null) { + logTimer.cancel(); + } + + logTimer = new Timer(); + logTimer.schedule(new TimerTask() { + @Override + public void run() { + try { + RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); + FRContext.getCurrentEnv().printLogMessage(); + } catch (Exception e) { + FRContext.getLogger().info(e.getMessage()); + } + } + }, 10000, 10000); + } + + private void stopLogTimer() { + if (logTimer != null) { + logTimer.cancel(); + logTimer = null; + } + } + + /** + * 根据userID sign out + * + * @return 成功签出返回true + * @throws Exception e + */ + @Override + public boolean signOut() throws Exception { + if (userID == null) { + return true; + } + stopLogTimer(); + // richer:登出的时候就把定时发送的时钟停掉 + clock.stop(); + // richer:把轮训使用的定时器也去掉 + timer.cancel(); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "r_sign_out"); + para.put("id", userID); + + return simulateRPC(para, false); + } + + protected boolean simulateRPC(HashMap para, boolean isSignIn) throws Exception { + refreshHttpSProperty(); + // execute method取到input stream再转成String + String result = null; + try { + result = stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, isSignIn, this))); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + if (result == null) { + return false; + } + if (result.contains("RegistEditionException")) { + JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); + return false; + } + try { + JSONObject jo = new JSONObject(result); + if (isSignIn) { + if (jo.has("id")) { + userID = jo.getString("id"); + } + if (jo.has("isRoot")) { + isRoot = jo.getBoolean("isRoot"); + } + + if (userID != null) { + return true; + } + } else { + if (jo.has("res")) { + return jo.getBoolean("res"); + } + } + String exception = jo.getString("exp"); + if (exception != null) { + throw new EnvException(exception); + } + } catch (JSONException je) { + return true; + } + + return true; + } + + protected boolean doLockOperation(String[] filePaths, String cmd) throws Exception { + if (filePaths == null || filePaths.length == 0) { + return true; + } + + JSONArray ja = new JSONArray(filePaths); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", cmd); + para.put("pathes", ja.toString()); + + return simulateRPC(para, false); + } + + /** + * 取路径filePath下面文件的lock + *

+ * 处于同一个原子操作,要么拿到所有的锁,要么一个锁也没有拿到 + */ + public boolean getLock(String[] filePathes) throws Exception { + return doLockOperation(filePathes, "design_get_lock"); + } + + /** + * 解锁文件 + * + * @param filePaths 文件路径 + * @return 成功解锁返回true + * @throws Exception e + */ + public boolean releaseLock(String[] filePaths) throws Exception { + return doLockOperation(filePaths, "design_release_lock"); + } + + /** + * 当前Env下,tplPath目录下是否存在模板 + * + * @param reportPath 路径 + * @return 是否存在 + */ + @Override + public boolean isTemplateExist(String reportPath) throws Exception { + refreshHttpSProperty(); + if (reportPath == null) { + return false; + } + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_report_exist"); + para.put("report_path", reportPath); + + InputStream input = filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, false, this)); + return ComparatorUtils.equals(stream2String(input), "true"); + } + + /** + * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 + * + * @param tplPath 路径 + * @throws Exception e + */ + @Override + public void unlockTemplate(String tplPath) throws Exception { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_close_report"); + para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); + + FRContext.getLogger().info(info); + } + public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -360,6 +733,33 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + /** + * 测试数据连接是否能够正确的连接上 + * + * @param database 数据连接 + * @return 如果能正确的连接到数据库则返回true + * @throws Exception 无法正确连接到数据库则抛出此异常 + */ + @Override + public boolean testConnection(Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把database写成xml文件到out + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_test_con"); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + @Override public boolean updateAuthorities(DesignAuthority[] authorities) { refreshHttpSProperty(); @@ -389,6 +789,260 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return authorities; } + /** + * ben:取schema + */ + @Override + public String[] getTableSchema(Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_schema"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return null; + } + return DavXMLUtils.readXMLFileSchema(input); + } + + /** + * b:分别取Table,View,Procedure,实际应用时更有意义 + */ + @Override + public TableProcedure[] getTableProcedure(Connection database, String type, String schema) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_tables"); + para.put("__type__", type); + para.put("__dbschema__", schema); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return new TableProcedure[0]; + } + return DavXMLUtils.readXMLSQLTables(input); + } + + @Override + public List getProcedures(Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { + Map schemaTableProcedureMap = new HashMap<>(); + List sqlTableList = new ArrayList<>(); + TableProcedure[] sqlTableObj; + int len = schemas.length; + if (len > 0) { + for (String schema : schemas) { + sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); + if (sqlTableObj == null) { + sqlTableObj = new TableProcedure[0]; + } + sqlTableList.add(sqlTableObj); + schemaTableProcedureMap.put(schema, sqlTableObj); + } + } else { + sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, null); + if (sqlTableObj == null) { + sqlTableObj = new TableProcedure[0]; + } + sqlTableList.add(sqlTableObj); + schemaTableProcedureMap.put(null, sqlTableObj); + } + DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); + return sqlTableList; + } + + /** + * 在当前路径下新建文件夹 + * + * @param folderPath 文件名 + * @return 成功创建返回true + * @throws Exception e + */ + @Override + public boolean createFolder(String folderPath) throws Exception { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_create_folder"); + para.put("folder_path", folderPath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 新建一个文件 + * + * @param filePath :目标文件相对路径 + * @return 成功新建返回true + * @throws Exception e + */ + @Override + public boolean createFile(String filePath) throws Exception { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_create_file"); + para.put("file_path", filePath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + @Override + public boolean renameFile(String newPath, String oldPath) throws Exception { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_rename_file"); + para.put("newPath", newPath); + para.put("oldPath", oldPath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 判断文件是否存在 + * + * @param filePath :目标文件相对路径 + * @return 文件是否存在 + * @throws Exception e + */ + @Override + public boolean fileExists(String filePath) throws Exception { + refreshHttpSProperty(); + if (filePath == null) { + return false; + } + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_file_exists"); + para.put("file_path", filePath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + /** + * 判断文件是否锁住 + * + * @param filePath 文件路径 + * @return 文件被锁住了,返回true + * @throws Exception e + */ + @Override + public boolean fileLocked(String filePath) throws Exception { + refreshHttpSProperty(); + if (filePath == null) { + return false; + } + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_file_locked"); + para.put("file_path", filePath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } + + + /** + * 注册环境,用于检测是否启动定时器,主要用于本地环境来监测远程 + * + * @param env 用户环境 + */ + @Override + public void registerUserEnv(UserBaseEnv env) { + } + + /** + * 用于检测用户环境 + * ,启动定时器 + */ + @Override + public void startUserCheckTimer() { + } + + + /** + * 停止定时器 + */ + public void stopUserCheckTimer() { + } + + /** + * 删除文件 + * + * @param filePath 文件地址 + * @return 删除成功返回true + */ + @Override + public boolean deleteFile(String filePath) { + refreshHttpSProperty(); + if (filePath == null) { + return false; + } + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "delete_file"); + para.put("file_path", filePath); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return false; + } + /** * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 * @@ -402,8 +1056,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); - para.put("current_user", getUser()); - para.put("current_password", getPassword()); + para.put("current_user", this.user); + para.put("current_password", this.password); para.put("key", key); para.put("value", value); @@ -450,12 +1104,148 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - for (int i = 0; i < toBeRemoveTDName.size(); i++) { - dm.removeTableData(toBeRemoveTDName.get(i)); - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + for (int i = 0; i < toBeRemoveTDName.size(); i++) { + dm.removeTableData(toBeRemoveTDName.get(i)); + } + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + } + + /** + * 列出WEB-INF目录下指定路径的文件夹与文件 + * + * @param rootFilePath 指定目录 + * @return WEB-INF目录下指定路径的文件夹与文件 + * @throws Exception e + */ + @Override + public FileNode[] listFile(String rootFilePath) throws Exception { + return listFile(rootFilePath, false); + } + + /** + * 列出WEB-INF上层目录下指定路径的文件夹与文件 + * + * @param rootFilePath 指定目录 + * @return WEB-INF上层目录下指定路径的文件夹与文件 + * @throws Exception e + */ + @Override + public FileNode[] listReportPathFile(String rootFilePath) throws Exception { + return listFile(rootFilePath, true); + } + + private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { + refreshHttpSProperty(); + InputStream inputStream = RemoteEnvUtils.listFile(rootFilePath, isWebReport, this); + inputStream = filterInputStream(inputStream); + return DavXMLUtils.readXMLFileNodes(inputStream); + } + + + /** + * 列出目标目录下所有cpt文件或文件夹 + * + * @param rootFilePath 指定目录 + * @return 列出目标目录下所有cpt文件或文件夹 + */ + @Override + public FileNode[] listCpt(String rootFilePath) { + return listCpt(rootFilePath, false); + } + + /** + * 列出目标目录下所有cpt文件或文件夹 + * + * @param rootFilePath 指定目录 + * @param recurse 是否递归查找其子目录 + * @return 列出目标目录下所有cpt文件或文件夹 + * @throws Exception e + */ + @Override + public FileNode[] listCpt(String rootFilePath, boolean recurse) { + List fileNodeList = new ArrayList<>(); + try { + listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage(), e); + } + return fileNodeList.toArray(new FileNode[fileNodeList.size()]); + } + + private void listAll(String rootFilePath, List nodeList, String[] fileTypes, boolean recurse) throws Exception { + FileNode[] fns = listFile(rootFilePath); + for (FileNode fileNode : fns) { + if (isAcceptFileType(fileNode, fileTypes)) { + nodeList.add(fileNode); + } else if (fileNode.isDirectory()) { + if (recurse) { + listAll(rootFilePath + File.separator + fileNode.getName(), nodeList, fileTypes, true); + } else { + nodeList.add(fileNode); + } + } + } + } + + private boolean isAcceptFileType(FileNode fileNode, String[] fileTypes) { + for (String fileType : fileTypes) { + if (fileNode.isFileType(fileType)) { + return true; + } + } + return false; + } + + /** + * 获取指定数据集的参数 + * + * @param tableData 数据集 + * @return 数据集的参数 + * @throws Exception 获取参数失败则抛出此异常 + */ + @Override + public Parameter[] getTableDataParameters(TableData tableData) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + //把tableData写成xml文件到out + DavXMLUtils.writeXMLFileTableData(tableData, out); + + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_td_pars"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return new Parameter[0]; + } + return DavXMLUtils.readXMLParameters(input); + } + + + /** + * 获取存储过程中的参数 + * + * @param storeProcedure 存储过程 + * @return 返回存储过程中的所有参数组成的数组 + * @throws Exception 如果获取参数失败则抛出此异常 + */ + @Override + public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_sp_pars"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return new Parameter[0]; } + return DavXMLUtils.readXMLParameters(input); } @Override @@ -531,6 +1321,163 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); } + /** + * Read XML.
+ * The method will be invoked when read data from XML file.
+ * May override the method to read the data that you saved. + */ + @Override + 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.user = tmpVal; + } + if ((tmpVal = reader.getAttrAsString("password", null)) != null) { + this.password = tmpVal; + } + } + } + } + + /** + * Write XML.
+ * The method will be invoked when save data to XML file.
+ * May override the method to save your own data. + * + * @param writer the PrintWriter. + */ + @Override + public void writeXML(XMLPrintWriter writer) { + writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); + } + + + public static class Clock { + + private static final long CONNECT_INTERVAL = 3000L; + private boolean connected = false; + + private RemoteEnv remoteEnv; + + public Clock(RemoteEnv remoteEnv) { + this.remoteEnv = remoteEnv; + } + + /** + * 开始连接 + */ + public void start() { + if (connected) { + return; + } + connected = true; + + new Thread(new Runnable() { + @Override + public void run() { + // richie:连续三次尝试连接都没有响应才判定为丢失连接 + while (connected) { + try { + attemptConnect(); + } catch (Exception ex) { + try { + attemptConnect(); + } catch (Exception ee) { + try { + attemptConnect(); + } catch (Exception exc) { + stop(); + if (exc instanceof NoRouteToHostException) { + //网络问题导致的连接中断 + if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Connect2Server_Again"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) + == JOptionPane.OK_OPTION) { + //调用重新连接服务器的方法 + connectedAgain(); + } + } else { + //服务器关闭引起的连接中断 + if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Re_Connect_to_Server"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) + == JOptionPane.OK_OPTION) { + //调用重新连接服务器的方法 + connectedAgain(); + } + } + } + } + } + } + } + }).start(); + } + + /** + * 服务器连接中断后重新连接 + */ + private void connectedAgain() { + try { + if (!remoteEnv.testServerConnectionWithOutShowMessagePane()) { + JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Datasource-Connection_failed", "check_communication"}, + new String[]{",", "!"})); + DesignerFrameFileDealerPane.getInstance().refresh(); + return; + } + String remoteVersion = remoteEnv.getDesignerVersion(); + if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { + String infor = Inter.getLocText("FR-Server_Version_Tip"); + String moreInfo = Inter.getLocText("FR-Server_Version_Tip_MoreInfo"); + FRContext.getLogger().log(Level.WARNING, infor); + new InformationWarnPane(infor, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); + return; + } + SignIn.signIn(remoteEnv); + HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); + } catch (Exception em) { + FRContext.getLogger().error(em.getMessage(), em); + } + } + + /** + * 停止连接 + */ + public void stop() { + connected = false; + } + + private void attemptConnect() throws Exception { + Thread.sleep(CONNECT_INTERVAL); + Pattern pattern = Pattern.compile("[/:]+"); + String[] strs = pattern.split(remoteEnv.path); + + //host,如:192.168.100.195 + String shost = strs[1]; + //端口,如:8080 + int sport = Integer.parseInt(strs[2]); + + Socket socket = new Socket(shost, sport); + //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 + socket.setOOBInline(false); + socket.sendUrgentData(0xFF); + socket.close(); + } + } + + /** + * 读报表运行环境所需的配置文件,如datasource.xml, config.xml,这些文件都保存在WEB-INF/resources目录下面 + * + * @param resourceName 配置文件的名字,如datasource.xml + * @return 输入流 + * @throws Exception e + */ + @Override + public InputStream readResource(String resourceName) throws Exception { + return readBean(resourceName, ProjectConstants.RESOURCES_NAME); + } + /** * 读取路径下的svg文件 @@ -549,7 +1496,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); InputStream input = filterInputStream( @@ -589,7 +1536,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); // 通过ByteArrayOutputStream将svg写成字节流 @@ -643,7 +1590,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); para.put("class_name", mgr.getClass().getName()); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); // alex:通过ByteArrayOutputStream将mgr写成字节流 @@ -706,6 +1653,38 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return new Bytes2ServerOutputStream(para); } + /** + * 返回数据库表的列名 + * + * @param selectedName 所选择数据库名 + * @param schema 数据库模式,用于存储过程 + * @param tableName 所选择数据库名 + */ + @Override + public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_columns"); + para.put("dsName", selectedName); + para.put("schema", schema); + para.put("tableName", tableName); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + + if (input == null) { + return null; + } + + String columns = stream2String(input); + if (StringUtils.isEmpty(columns)) { + return null; + } + return columns.split("\\."); + } + /** * 返回模板文件路径 */ @@ -714,6 +1693,98 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return getPath().substring(0, getPath().lastIndexOf("/")); } + @Override + public String getProcedureText(String connectionName, String databaseName) throws Exception { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_procedure_text"); + para.put("procedure_name", databaseName); + para.put("connectionName", connectionName); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return StringUtils.EMPTY; + } + return DavXMLUtils.readXMLProcedureText(input); + } + + @Override + public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_sp_parameters"); + para.put("__name__", databaseName); + para.put("__default_value__", parameterDefaultValue); + para.put("connectionName", connectionName); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return new StoreProcedureParameter[0]; + } + return DavXMLUtils.readXMLStoreProcedureParameters(input); + } + + /** + * 获取datasource.xml文件的修改表 + */ + @Override + public ModifiedTable getDataSourceModifiedTables(String type) { + refreshHttpSProperty(); + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "get_datasource_modified_tables"); + para.put("type", type); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + if (input == null) { + return new ModifiedTable(); + } + return DavXMLUtils.readXMLModifiedTables(input); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new ModifiedTable(); + } + + + /** + * 写修改表 + * + * @param modifiedTable 修改表 + * @param type 操作类型,是数据连接还是服务器数据集 + * @return 写入成功返回true + */ + @Override + public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "update_modifytable_to_server"); + para.put("type", type); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + + if (input == null) { + return false; + } + + return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return false; + } + public String[] getProcedureColumns(StoreProcedure storeProcedure, Map parameterMap) throws Exception { refreshHttpSProperty(); String[] columns; @@ -780,11 +1851,102 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl LogRecordTime[] records = LogUtils.readXMLLogRecords(input); } + @Override + public String getUserID() { + return userID; + } + + + /** + * 预览存储过程 + * + * @param storeProcedure 存储过程 + * @param parameterMap 参数map + * @param rowCount 行数 + * @return 返回取到的存储过程 + */ + @Override + public ProcedureDataModel[] previewProcedureDataModel(StoreProcedure storeProcedure, Map parameterMap, int rowCount) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + // 把tableData写成xml文件到out + DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); + + // 把parameterMap转成JSON格式的字符串 + JSONObject jo = new JSONObject(parameterMap); + String jsonParameter = jo.toString(); + + try { + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "list_sp"); + para.put("pars", jsonParameter); + + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return null; + } + + TableData[] tableDatas = DavXMLUtils.readXMLTableDataArray(input); + if (tableDatas == null || tableDatas.length == 0) { + return new ProcedureDataModel[0]; + } + ProcedureDataModel[] procedureDataModels = new ProcedureDataModel[tableDatas.length]; + for (int i = 0; i < tableDatas.length; i++) { + if (tableDatas[i] instanceof EmbeddedTableData) { + procedureDataModels[i] = ((EmbeddedTableData) tableDatas[i]).trans2ProcedureDataModel(); + } + } + return procedureDataModels; + + + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return new ProcedureDataModel[0]; + } + + + @Override + public String getAppName() { + return "WebReport"; + } + + /** + * 是否为Oracle数据连接 + * + * @param database 数据连接 + * @return 是返回true + * @throws Exception e + */ + @Override + public boolean isOracle(Connection database) throws Exception { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + DavXMLUtils.writeXMLFileDatabaseConnection(database, out); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_isOracle"); + InputStream input = postBytes2ServerB(out.toByteArray(), para); + if (input == null) { + return true; + } + return DavXMLUtils.readXMLBoolean(input); + } + @Override public String[] getSupportedTypes() { return FILE_TYPE; } + /** + * 在模板面板中是否支持增加打开所在文件夹、重命名、删除三个工具栏选项 + * + * @return 不支持返回false + */ + @Override + public boolean isSupportLocalFileOperate() { + return false; + } /** * 判断是否有文件夹权限 @@ -799,7 +1961,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put(RemoteDeziConstants.TEMPLATE_PATH, path); InputStream input = filterInputStream( @@ -817,6 +1979,43 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } + /** + * 是否是管理员身份 + * + * @return 是则返回true + */ + @Override + public boolean isRoot() { + return isRoot; + } + + /** + * 是否为压缩包部署 + * + * @return 是则返回true + */ + @Override + public boolean isPackDeploy() { + return false; + } + + @Override + public String getDesignerVersion() { + refreshHttpSProperty(); + HashMap para = new HashMap<>(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_get_designer_version"); + para.put("user", user); + para.put("password", getEncodedPassword()); + + try { + return stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, true, this))); + } catch (Exception e) { + FRContext.getLogger().error(e.getMessage()); + } + return null; + } + @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); @@ -847,6 +2046,15 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return allRoleList; } + @Override + public String getLicName() { + return License.FILE_NAME; + } + + @Override + public void setLicName(String licName) { + //do nth + } /** @@ -927,7 +2135,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 @@ -973,7 +2181,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", reuFile.getName()); @@ -1010,7 +2218,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", fileName); @@ -1030,7 +2238,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.getUserID()); + para.put("current_uid", this.getValidUserID()); para.put("currentUsername", this.getUser()); InputStream input = filterInputStream( @@ -1042,6 +2250,16 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } + @Override + public void doWhenServerShutDown() { + + } + + @Override + public boolean isLocalEnv() { + + return false; + } @Override public boolean hasPluginServiceStarted(String key) { @@ -1049,4 +2267,22 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return true; } + @Override + public JSONArray getPluginStatus() { + refreshHttpSProperty(); + try { + HashMap para = new HashMap<>(); + para.put("op", "plugin"); + para.put("cmd", "get_status"); + para.put("current_uid", this.getValidUserID()); + para.put("currentUsername", this.getUser()); + + InputStream input = filterInputStream( + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + return new JSONArray(stream2String(input)); + } catch (Exception e) { + return JSONArray.create(); + } + } } \ 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 8613ebcc4..5d723f579 100644 --- a/designer-base/src/com/fr/start/BaseDesigner.java +++ b/designer-base/src/com/fr/start/BaseDesigner.java @@ -17,7 +17,7 @@ import com.fr.file.FILE; import com.fr.file.FILEFactory; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.stable.OperatingSystem; import java.awt.*; @@ -94,7 +94,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { } isException = openFile(df, isException, file); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); if (!isException) { showDesignerFrame(args, df, true); } else { @@ -147,7 +147,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { Window.class, boolean.class}); method.invoke(null, window, true); } catch (Throwable t) { - FRLogger.getLogger().error("Full screen mode is not supported"); + FineLoggerFactory.getLogger().error("Full screen mode is not supported"); } } diff --git a/designer-base/src/com/fr/start/StartServer.java b/designer-base/src/com/fr/start/StartServer.java index 27ba970c3..828547fd4 100644 --- a/designer-base/src/com/fr/start/StartServer.java +++ b/designer-base/src/com/fr/start/StartServer.java @@ -1,7 +1,7 @@ package com.fr.start; -import com.fr.base.ServerConfig; import com.fr.base.FRContext; +import com.fr.base.ServerConfig; import com.fr.design.DesignModelAdapter; import com.fr.design.DesignerEnvManager; import com.fr.design.data.datapane.TableDataTreePane; @@ -15,12 +15,12 @@ import com.fr.env.SignIn; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EnvChangedListener; import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.project.ProjectConstants; import com.fr.start.server.TomcatHost; import javax.swing.*; @@ -69,7 +69,7 @@ public class StartServer { TemplateTreePane.getInstance().refreshDockingView(); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); } catch (Exception e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } initDemoServerAndBrowser(); } @@ -98,7 +98,7 @@ public class StartServer { tomcatHost.start(); } } catch (Exception e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } finally { //先访问Demo, 后访问报表, 不需要重置服务器. NEED_LOAD_ENV = false; @@ -126,9 +126,9 @@ public class StartServer { tomcatHost.start(); } } catch (InterruptedException e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (Exception e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } finally { NEED_LOAD_ENV = false; } @@ -169,10 +169,10 @@ public class StartServer { } catch (IOException e) { startBrowserFromCommand(uri, e); } catch (URISyntaxException e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (Exception e) { - FRContext.getLogger().errorWithServerLevel(e.getMessage(), e); - FRContext.getLogger().error("Can not open the browser for URL: " + uri); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + uri); } } @@ -183,10 +183,10 @@ public class StartServer { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + uri); } catch (IOException ee) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer_Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } else { - FRContext.getLogger().errorWithServerLevel(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } diff --git a/designer-chart/src/com/fr/design/chart/report/MapCubeLayerPane.java b/designer-chart/src/com/fr/design/chart/report/MapCubeLayerPane.java index bde3bc3cd..91ec7e872 100644 --- a/designer-chart/src/com/fr/design/chart/report/MapCubeLayerPane.java +++ b/designer-chart/src/com/fr/design/chart/report/MapCubeLayerPane.java @@ -11,7 +11,7 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.UIDialog; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; @@ -275,7 +275,7 @@ public class MapCubeLayerPane extends BasicBeanPane{ @Override protected void done() { - FRLogger.getLogger().info("Map Save End"); + FineLoggerFactory.getLogger().info("Map Save End"); } }; diff --git a/designer-chart/src/com/fr/design/chart/series/PlotSeries/MapGroupExtensionPane.java b/designer-chart/src/com/fr/design/chart/series/PlotSeries/MapGroupExtensionPane.java index 7a4732807..ed2ab0718 100644 --- a/designer-chart/src/com/fr/design/chart/series/PlotSeries/MapGroupExtensionPane.java +++ b/designer-chart/src/com/fr/design/chart/series/PlotSeries/MapGroupExtensionPane.java @@ -22,7 +22,7 @@ import com.fr.design.gui.ibutton.UIButton; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerFrame; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.CoreConstants; import com.fr.stable.StableUtils; @@ -367,7 +367,7 @@ public class MapGroupExtensionPane extends BasicPane implements UIObserver { StableUtils.pathJoin(new String[]{MapSvgXMLHelper.relativeCustomMapPath(),oldName+SvgProvider.EXTENSION})); refresh(); }catch (Exception exp){ - FRLogger.getLogger().error(exp.getMessage()); + FineLoggerFactory.getLogger().error(exp.getMessage()); } } } @@ -399,7 +399,7 @@ public class MapGroupExtensionPane extends BasicPane implements UIObserver { @Override protected void done() { - FRLogger.getLogger().info(Inter.getLocText("FR-Chart-Map_Saved")); // 地图已经保存. + FineLoggerFactory.getLogger().info(Inter.getLocText("FR-Chart-Map_Saved")); // 地图已经保存. } }; diff --git a/designer-chart/src/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java b/designer-chart/src/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java index 64643e341..b56a436f4 100644 --- a/designer-chart/src/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java +++ b/designer-chart/src/com/fr/design/chart/series/PlotSeries/UIGroupExtensionPane.java @@ -19,7 +19,7 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralUtils; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; @@ -477,7 +477,7 @@ public class UIGroupExtensionPane extends BasicPane { try { list.setSelectedIndices(null); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } } diff --git a/designer-chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java b/designer-chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java index 02a50f828..08292b00c 100644 --- a/designer-chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java +++ b/designer-chart/src/com/fr/design/chart/series/SeriesCondition/impl/ChartHyperPoplinkPane.java @@ -13,7 +13,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.chart.ChartHyperEditPane; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import java.awt.*; @@ -71,7 +71,7 @@ public class ChartHyperPoplinkPane extends AbstractHyperLinkPane implemen editingCollection.addNamedChart(name, newChart); editingCollection.addFunctionRecord(newChart); } catch (CloneNotSupportedException e1) { - FRLogger.getLogger().error("Error in Clone"); + FineLoggerFactory.getLogger().error("Error in Clone"); } checkoutChange(); } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/data/CalculateComboBox.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/data/CalculateComboBox.java index 5d48c4106..fbe0008af 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/data/CalculateComboBox.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/data/CalculateComboBox.java @@ -9,7 +9,7 @@ import com.fr.data.util.function.NoneFunction; import com.fr.data.util.function.SumFunction; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; /** @@ -56,10 +56,10 @@ public class CalculateComboBox extends UIComboBox{ return (AbstractDataFunction)CLASS_ARRAY[selectIndex].newInstance(); } } catch (InstantiationException e) { - FRLogger.getLogger().error("Function Error"); + FineLoggerFactory.getLogger().error("Function Error"); return null; } catch (IllegalAccessException e) { - FRLogger.getLogger().error("Function Error"); + FineLoggerFactory.getLogger().error("Function Error"); return null; } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java index e0649cccf..a2cd2ec68 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/data/table/SeriesNameUseFieldNamePane.java @@ -19,7 +19,7 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.data.CalculateComboBox; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.StringUtils; @@ -265,9 +265,9 @@ public class SeriesNameUseFieldNamePane extends FurtherBasicBeanPane{ String tmp = DateUtils.getDate2LStr(toDate); toDate = DateUtils.DATETIMEFORMAT2.parse(tmp); } catch (ParseException e) { - FRLogger.getLogger().error(Inter.getLocText("Cannot_Get_Date")); + FineLoggerFactory.getLogger().error(Inter.getLocText("Cannot_Get_Date")); } return toDate; } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java index c26413b75..5aa9ea49a 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/AbstractChartTypePane.java @@ -26,7 +26,7 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.js.NameJavaScriptGroup; import com.fr.stable.Constants; @@ -351,7 +351,7 @@ public abstract class AbstractChartTypePane extends FurtherBasicBeanPane{ try { chart.switchPlot((Plot)plot.clone()); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error in change plot"); + FineLoggerFactory.getLogger().error("Error in change plot"); } } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java index 7d73ea122..1bb3c9887 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/BarPlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.BarPlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.BarIndependentChart; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; /** @@ -98,7 +98,7 @@ public class BarPlotPane extends AbstractBarPane{ try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ColumnChart"); + FineLoggerFactory.getLogger().error("Error In ColumnChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java index ee70cb71a..0ee3811b5 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/ColumnPlotPane.java @@ -5,7 +5,7 @@ import com.fr.chart.chartattr.BarPlot; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.ColumnIndependentChart; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; /** @@ -95,7 +95,7 @@ public class ColumnPlotPane extends AbstractBarPane{ try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ColumnChart"); + FineLoggerFactory.getLogger().error("Error In ColumnChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java index cd2a78870..ee6ebe18b 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/GisMapPlotPane.java @@ -11,7 +11,7 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import javax.swing.*; @@ -118,7 +118,7 @@ public class GisMapPlotPane extends AbstractChartTypePane{ try { chart.switchPlot((Plot)plot.clone()); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In LineChart"); + FineLoggerFactory.getLogger().error("Error In LineChart"); chart.switchPlot(new GisMapPlot()); } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java index 4274c4b2a..4cbb2661b 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/LinePlotPane.java @@ -5,7 +5,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.LinePlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.charttypes.LineIndependentChart; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; public class LinePlotPane extends AbstractChartTypePane{ @@ -68,7 +68,7 @@ public class LinePlotPane extends AbstractChartTypePane{ try { chart.switchPlot((Plot)plot.clone()); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In LineChart"); + FineLoggerFactory.getLogger().error("Error In LineChart"); chart.switchPlot(new LinePlot()); } } diff --git a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java index daafa70a1..0c5612e20 100644 --- a/designer-chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java +++ b/designer-chart/src/com/fr/design/mainframe/chart/gui/type/MeterPlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.MeterPlot; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.MeterStyle; import com.fr.chart.charttypes.MeterIndependentChart; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; /** @@ -67,7 +67,7 @@ public class MeterPlotPane extends AbstractChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ColumnChart"); + FineLoggerFactory.getLogger().error("Error In ColumnChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/area/VanChartAreaPlotPane.java b/designer-chart/src/com/fr/van/chart/area/VanChartAreaPlotPane.java index 94a3cb9a8..2595f5487 100644 --- a/designer-chart/src/com/fr/van/chart/area/VanChartAreaPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/area/VanChartAreaPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.area; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.area.AreaIndependentVanChart; import com.fr.plugin.chart.area.VanChartAreaPlot; @@ -71,7 +71,7 @@ public class VanChartAreaPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot) newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In AreaChart"); + FineLoggerFactory.getLogger().error("Error In AreaChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/bar/VanChartBarPlotPane.java b/designer-chart/src/com/fr/van/chart/bar/VanChartBarPlotPane.java index d9645ca79..2d2509aa6 100644 --- a/designer-chart/src/com/fr/van/chart/bar/VanChartBarPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/bar/VanChartBarPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.bar; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.bar.BarIndependentVanChart; import com.fr.plugin.chart.column.VanChartColumnPlot; @@ -70,7 +70,7 @@ public class VanChartBarPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ColumnChart"); + FineLoggerFactory.getLogger().error("Error In ColumnChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/bubble/VanChartBubblePlotPane.java b/designer-chart/src/com/fr/van/chart/bubble/VanChartBubblePlotPane.java index 49927fecc..aa7f46047 100644 --- a/designer-chart/src/com/fr/van/chart/bubble/VanChartBubblePlotPane.java +++ b/designer-chart/src/com/fr/van/chart/bubble/VanChartBubblePlotPane.java @@ -6,7 +6,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.ConditionCollection; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.base.VanChartZoom; @@ -82,7 +82,7 @@ public class VanChartBubblePlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In BubbleChart"); + FineLoggerFactory.getLogger().error("Error In BubbleChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/column/VanChartColumnPlotPane.java b/designer-chart/src/com/fr/van/chart/column/VanChartColumnPlotPane.java index c61fc8205..c618fa2c2 100644 --- a/designer-chart/src/com/fr/van/chart/column/VanChartColumnPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/column/VanChartColumnPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.column; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.column.ColumnIndependentVanChart; import com.fr.plugin.chart.column.VanChartColumnPlot; @@ -71,7 +71,7 @@ public class VanChartColumnPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ColumnChart"); + FineLoggerFactory.getLogger().error("Error In ColumnChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/custom/CustomPlotDesignerPaneFactory.java b/designer-chart/src/com/fr/van/chart/custom/CustomPlotDesignerPaneFactory.java index 817e386d1..783a35b87 100644 --- a/designer-chart/src/com/fr/van/chart/custom/CustomPlotDesignerPaneFactory.java +++ b/designer-chart/src/com/fr/van/chart/custom/CustomPlotDesignerPaneFactory.java @@ -5,7 +5,7 @@ import com.fr.design.beans.BasicBeanPane; import com.fr.design.mainframe.chart.gui.ChartDataPane; import com.fr.design.mainframe.chart.gui.data.table.AbstractTableDataContentPane; import com.fr.design.mainframe.chart.gui.data.table.CategoryPlotTableDataContentPane; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.attr.plot.VanChartAxisPlot; import com.fr.plugin.chart.attr.plot.VanChartPlot; @@ -59,7 +59,7 @@ public class CustomPlotDesignerPaneFactory { Constructor > constructor = cl.getConstructor(); return constructor.newInstance(); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return null; @@ -89,7 +89,7 @@ public class CustomPlotDesignerPaneFactory { Constructor constructor = cl.getConstructor(ChartDataPane.class); return constructor.newInstance(parent); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new CategoryPlotTableDataContentPane(parent); @@ -125,7 +125,7 @@ public class CustomPlotDesignerPaneFactory { return constructor.newInstance(plot, parent); } } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartAxisPane(plot,parent); diff --git a/designer-chart/src/com/fr/van/chart/custom/VanChartCustomPlotPane.java b/designer-chart/src/com/fr/van/chart/custom/VanChartCustomPlotPane.java index 8817d1ddc..22f95f637 100644 --- a/designer-chart/src/com/fr/van/chart/custom/VanChartCustomPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/custom/VanChartCustomPlotPane.java @@ -9,7 +9,7 @@ import com.fr.chart.chartglyph.ConditionCollection; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.chart.gui.type.ChartImagePane; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartAttrLine; import com.fr.plugin.chart.base.VanChartTools; @@ -263,7 +263,7 @@ public class VanChartCustomPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot) newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ScatterChart"); + FineLoggerFactory.getLogger().error("Error In ScatterChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/custom/component/VanChartCustomPlotSelectPane.java b/designer-chart/src/com/fr/van/chart/custom/component/VanChartCustomPlotSelectPane.java index bf9c2e88c..8e4212480 100644 --- a/designer-chart/src/com/fr/van/chart/custom/component/VanChartCustomPlotSelectPane.java +++ b/designer-chart/src/com/fr/van/chart/custom/component/VanChartCustomPlotSelectPane.java @@ -4,7 +4,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.design.beans.BasicBeanPane; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.attr.plot.VanChartPlot; import com.fr.plugin.chart.attr.plot.VanChartRectanglePlot; @@ -250,7 +250,7 @@ public class VanChartCustomPlotSelectPane extends BasicBeanPane { } } } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } diff --git a/designer-chart/src/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java b/designer-chart/src/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java index 1dbf5a1e1..7e675c6e6 100644 --- a/designer-chart/src/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java +++ b/designer-chart/src/com/fr/van/chart/custom/component/VanChartHyperLinkPane.java @@ -23,7 +23,7 @@ import com.fr.design.hyperlink.WebHyperlinkPane; import com.fr.design.javascript.JavaScriptImplPane; import com.fr.design.javascript.ParameterJavaScriptPane; import com.fr.design.module.DesignModuleFactory; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.NameObject; import com.fr.js.EmailJavaScript; @@ -81,13 +81,13 @@ public class VanChartHyperLinkPane extends VanChartUIListControlPane { return constructor.newInstance(getHyperLinkEditorMap(), false); } catch (InstantiationException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (IllegalAccessException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (NoSuchMethodException e) { return super.createPaneByCreators(creator); } catch (InvocationTargetException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return null; } diff --git a/designer-chart/src/com/fr/van/chart/designer/PlotFactory.java b/designer-chart/src/com/fr/van/chart/designer/PlotFactory.java index a791a8e34..33b9766d8 100644 --- a/designer-chart/src/com/fr/van/chart/designer/PlotFactory.java +++ b/designer-chart/src/com/fr/van/chart/designer/PlotFactory.java @@ -6,7 +6,7 @@ import com.fr.data.core.FormatField; import com.fr.design.gui.icombobox.UIComboBoxRenderer; import com.fr.design.gui.style.FormatPane; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.area.VanChartAreaPlot; import com.fr.plugin.chart.bubble.VanChartBubblePlot; @@ -198,7 +198,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(Plot.class, VanChartStylePane.class); return constructor.newInstance(plot, stylePane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartPlotLabelPane(plot, stylePane); @@ -218,7 +218,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(VanChartStylePane.class); return constructor.newInstance(stylePane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartPlotLegendPane(stylePane); @@ -238,7 +238,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(Plot.class, VanChartStylePane.class); return constructor.newInstance(plot, stylePane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartPlotTooltipPane(plot, stylePane); @@ -259,7 +259,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); return constructor.newInstance(parent, showOnPane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartLabelContentPane(parent, showOnPane); @@ -280,7 +280,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); return constructor.newInstance(parent, showOnPane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartTooltipContentPane(parent, showOnPane); @@ -301,7 +301,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(Plot.class); return constructor.newInstance(plot); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartPlotRefreshTooltipPane(plot); @@ -321,7 +321,7 @@ public class PlotFactory { Constructor constructor = cl.getConstructor(VanChartStylePane.class, JPanel.class); return constructor.newInstance(parent, showOnPane); } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return new VanChartRefreshTooltipContentPane(parent, showOnPane); diff --git a/designer-chart/src/com/fr/van/chart/designer/component/ChartUIMenuNameableCreator.java b/designer-chart/src/com/fr/van/chart/designer/component/ChartUIMenuNameableCreator.java index c9d781c87..5d7c88091 100644 --- a/designer-chart/src/com/fr/van/chart/designer/component/ChartUIMenuNameableCreator.java +++ b/designer-chart/src/com/fr/van/chart/designer/component/ChartUIMenuNameableCreator.java @@ -2,7 +2,7 @@ package com.fr.van.chart.designer.component; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.imenutable.UIMenuNameableCreator; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import java.lang.reflect.Constructor; import java.util.HashMap; @@ -23,9 +23,9 @@ public class ChartUIMenuNameableCreator extends UIMenuNameableCreator { try { cloneObj = obj.getClass().newInstance(); } catch (InstantiationException e) { - FRLogger.getLogger().error("UIMenuNameableCreator InstantiationException"); + FineLoggerFactory.getLogger().error("UIMenuNameableCreator InstantiationException"); } catch (IllegalAccessException e) { - FRLogger.getLogger().error("UIMenuNameableCreator IllegalAccessException"); + FineLoggerFactory.getLogger().error("UIMenuNameableCreator IllegalAccessException"); } return new ChartUIMenuNameableCreator(hyperLinkEditorMap, name, cloneObj, (Class) this.paneClazz); diff --git a/designer-chart/src/com/fr/van/chart/designer/component/VanChartUIMenuNameableCreator.java b/designer-chart/src/com/fr/van/chart/designer/component/VanChartUIMenuNameableCreator.java index 6b5f0d4de..b7b259647 100644 --- a/designer-chart/src/com/fr/van/chart/designer/component/VanChartUIMenuNameableCreator.java +++ b/designer-chart/src/com/fr/van/chart/designer/component/VanChartUIMenuNameableCreator.java @@ -2,7 +2,7 @@ package com.fr.van.chart.designer.component; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.imenutable.UIMenuNameableCreator; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.stable.FCloneable; /** @@ -20,7 +20,7 @@ public class VanChartUIMenuNameableCreator extends UIMenuNameableCreator { try { cloneObj = ((FCloneable)obj).clone(); } catch (CloneNotSupportedException e){ - FRLogger.getLogger().error("VanChartUIMenuNameableCreator CloneNotSupportedException"); + FineLoggerFactory.getLogger().error("VanChartUIMenuNameableCreator CloneNotSupportedException"); } return new UIMenuNameableCreator(name, cloneObj, this.paneClazz); diff --git a/designer-chart/src/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java b/designer-chart/src/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java index aacb5dd0d..7597ff860 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/axis/VanChartTimeAxisPane.java @@ -16,7 +16,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.general.DateUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.attr.axis.VanChartAxis; import com.fr.plugin.chart.attr.axis.VanChartTimeAxis; @@ -379,7 +379,7 @@ public class VanChartTimeAxisPane extends VanChartBaseAxisPane { String tmp = DateUtils.getDate2LStr(toDate); toDate = DateUtils.DATETIMEFORMAT2.parse(tmp); } catch (ParseException e) { - FRLogger.getLogger().error("cannot get date"); + FineLoggerFactory.getLogger().error("cannot get date"); } return toDate; } diff --git a/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundNameObjectCreator.java b/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundNameObjectCreator.java index f6836df34..65bca91fc 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundNameObjectCreator.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/background/BackgroundNameObjectCreator.java @@ -2,7 +2,7 @@ package com.fr.van.chart.designer.style.background; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.NameObject; import com.fr.plugin.chart.attr.axis.VanChartCustomIntervalBackground; import com.fr.stable.Nameable; @@ -34,13 +34,13 @@ public class BackgroundNameObjectCreator extends ChartNameObjectCreator { return new NameObject(helper.createUnrepeatedName(this.menuName()), vanChartCustomIntervalBackground); } catch (NoSuchMethodException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (IllegalAccessException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InstantiationException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InvocationTargetException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return null; } diff --git a/designer-chart/src/com/fr/van/chart/designer/style/background/ChartNameObjectCreator.java b/designer-chart/src/com/fr/van/chart/designer/style/background/ChartNameObjectCreator.java index d41880c4a..8a5a33ca8 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/background/ChartNameObjectCreator.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/background/ChartNameObjectCreator.java @@ -3,7 +3,7 @@ package com.fr.van.chart.designer.style.background; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.NameObject; import com.fr.plugin.chart.attr.axis.VanChartAlertValue; import com.fr.stable.Nameable; @@ -40,13 +40,13 @@ public class ChartNameObjectCreator extends NameObjectCreator { return new NameObject(helper.createUnrepeatedName(this.menuName()), vanChartAlertValue); } catch (NoSuchMethodException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (IllegalAccessException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InstantiationException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InvocationTargetException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return null; } diff --git a/designer-chart/src/com/fr/van/chart/designer/style/series/StackedAndAxisNameObjectCreator.java b/designer-chart/src/com/fr/van/chart/designer/style/series/StackedAndAxisNameObjectCreator.java index 384ba5b63..ea2f99554 100644 --- a/designer-chart/src/com/fr/van/chart/designer/style/series/StackedAndAxisNameObjectCreator.java +++ b/designer-chart/src/com/fr/van/chart/designer/style/series/StackedAndAxisNameObjectCreator.java @@ -3,7 +3,7 @@ package com.fr.van.chart.designer.style.series; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.design.beans.BasicBeanPane; import com.fr.design.gui.controlpane.UnrepeatedNameHelper; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.NameObject; import com.fr.plugin.chart.base.AttrSeriesStackAndAxis; import com.fr.stable.Nameable; @@ -36,13 +36,13 @@ public class StackedAndAxisNameObjectCreator extends ChartNameObjectCreator { return new NameObject(helper.createUnrepeatedName(this.menuName()), conditionAttr); } catch (NoSuchMethodException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (IllegalAccessException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InstantiationException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (InvocationTargetException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return null; } diff --git a/designer-chart/src/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java b/designer-chart/src/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java index b52940be9..32a7fca7a 100644 --- a/designer-chart/src/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java +++ b/designer-chart/src/com/fr/van/chart/designer/type/AbstractVanChartTypePane.java @@ -12,7 +12,7 @@ import com.fr.design.gui.ilable.MultilineLabel; import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane; import com.fr.design.mainframe.chart.gui.type.ChartImagePane; import com.fr.general.Background; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.js.NameJavaScriptGroup; import com.fr.plugin.chart.attr.plot.VanChartPlot; @@ -168,7 +168,7 @@ public abstract class AbstractVanChartTypePane extends AbstractChartTypePane{ ((VanChartPlot)newPlot).setCategoryNum( ((VanChartPlot)oldPlot).getCategoryNum()); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error in change plot"); + FineLoggerFactory.getLogger().error("Error in change plot"); } } diff --git a/designer-chart/src/com/fr/van/chart/funnel/designer/type/VanChartFunnelTypePane.java b/designer-chart/src/com/fr/van/chart/funnel/designer/type/VanChartFunnelTypePane.java index 19f18adc9..229593433 100644 --- a/designer-chart/src/com/fr/van/chart/funnel/designer/type/VanChartFunnelTypePane.java +++ b/designer-chart/src/com/fr/van/chart/funnel/designer/type/VanChartFunnelTypePane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.funnel.designer.type; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.funnel.FunnelIndependentVanChart; @@ -57,7 +57,7 @@ public class VanChartFunnelTypePane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/gantt/designer/type/VanChartGanttPlotPane.java b/designer-chart/src/com/fr/van/chart/gantt/designer/type/VanChartGanttPlotPane.java index 5e7b6235c..79afbc79e 100644 --- a/designer-chart/src/com/fr/van/chart/gantt/designer/type/VanChartGanttPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/gantt/designer/type/VanChartGanttPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.gantt.designer.type; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.gantt.GanttIndependentVanChart; import com.fr.plugin.chart.gantt.VanChartGanttPlot; @@ -51,7 +51,7 @@ public class VanChartGanttPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/gauge/VanChartGaugePlotPane.java b/designer-chart/src/com/fr/van/chart/gauge/VanChartGaugePlotPane.java index 800075d17..803f8ae4c 100644 --- a/designer-chart/src/com/fr/van/chart/gauge/VanChartGaugePlotPane.java +++ b/designer-chart/src/com/fr/van/chart/gauge/VanChartGaugePlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.gauge; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.gauge.GaugeIndependentVanChart; import com.fr.plugin.chart.gauge.VanChartGaugePlot; @@ -57,7 +57,7 @@ public class VanChartGaugePlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In GaugeChart"); + FineLoggerFactory.getLogger().error("Error In GaugeChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java b/designer-chart/src/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java index cb9531536..307490500 100644 --- a/designer-chart/src/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java +++ b/designer-chart/src/com/fr/van/chart/heatmap/designer/type/VanChartHeatMapTypePane.java @@ -3,7 +3,7 @@ package com.fr.van.chart.heatmap.designer.type; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.heatmap.HeatMapIndependentVanChart; @@ -87,7 +87,7 @@ public class VanChartHeatMapTypePane extends VanChartMapPlotPane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/line/VanChartLinePlotPane.java b/designer-chart/src/com/fr/van/chart/line/VanChartLinePlotPane.java index 71fa52adb..214236be7 100644 --- a/designer-chart/src/com/fr/van/chart/line/VanChartLinePlotPane.java +++ b/designer-chart/src/com/fr/van/chart/line/VanChartLinePlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.line; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.line.LineIndependentVanChart; import com.fr.plugin.chart.line.VanChartLinePlot; @@ -62,7 +62,7 @@ public class VanChartLinePlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In LineChart"); + FineLoggerFactory.getLogger().error("Error In LineChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java b/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java index 3795aec58..78de970b6 100644 --- a/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/map/designer/type/VanChartMapPlotPane.java @@ -5,7 +5,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.design.mainframe.chart.gui.type.ChartImagePane; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.map.MapIndependentVanChart; @@ -104,7 +104,7 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane { VanChartMapPlot mapPlot = (VanChartMapPlot)plot.clone(); sourceChoosePane.populateBean(mapPlot); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -145,7 +145,7 @@ public class VanChartMapPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java b/designer-chart/src/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java index 1378050e4..bbc02df10 100644 --- a/designer-chart/src/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java +++ b/designer-chart/src/com/fr/van/chart/multilayer/VanChartMultiPiePlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.multilayer; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.multilayer.MultiPieIndependentVanChart; @@ -52,7 +52,7 @@ public class VanChartMultiPiePlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In MultiPieChart"); + FineLoggerFactory.getLogger().error("Error In MultiPieChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/pie/VanChartPiePlotPane.java b/designer-chart/src/com/fr/van/chart/pie/VanChartPiePlotPane.java index e36b220ae..47022c6d2 100644 --- a/designer-chart/src/com/fr/van/chart/pie/VanChartPiePlotPane.java +++ b/designer-chart/src/com/fr/van/chart/pie/VanChartPiePlotPane.java @@ -3,7 +3,7 @@ package com.fr.van.chart.pie; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.PiePlot4VanChart; import com.fr.plugin.chart.pie.PieIndependentVanChart; @@ -65,7 +65,7 @@ public class VanChartPiePlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In PieChart"); + FineLoggerFactory.getLogger().error("Error In PieChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/radar/VanChartRadarPlotPane.java b/designer-chart/src/com/fr/van/chart/radar/VanChartRadarPlotPane.java index 88237fb61..89410133a 100644 --- a/designer-chart/src/com/fr/van/chart/radar/VanChartRadarPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/radar/VanChartRadarPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.radar; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.radar.RadarIndependentVanChart; import com.fr.plugin.chart.radar.VanChartRadarPlot; @@ -62,7 +62,7 @@ public class VanChartRadarPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In RadarChart"); + FineLoggerFactory.getLogger().error("Error In RadarChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/scatter/VanChartScatterPlotPane.java b/designer-chart/src/com/fr/van/chart/scatter/VanChartScatterPlotPane.java index 73ac3c72f..3994e9e27 100644 --- a/designer-chart/src/com/fr/van/chart/scatter/VanChartScatterPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/scatter/VanChartScatterPlotPane.java @@ -5,7 +5,7 @@ import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; import com.fr.chart.chartglyph.ConditionAttr; import com.fr.chart.chartglyph.ConditionCollection; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartAttrLine; import com.fr.plugin.chart.base.VanChartTools; @@ -64,7 +64,7 @@ public class VanChartScatterPlotPane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In ScatterChart"); + FineLoggerFactory.getLogger().error("Error In ScatterChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/structure/desinger/type/VanChartStructureTypePane.java b/designer-chart/src/com/fr/van/chart/structure/desinger/type/VanChartStructureTypePane.java index 9e54b6779..0ca2a1421 100644 --- a/designer-chart/src/com/fr/van/chart/structure/desinger/type/VanChartStructureTypePane.java +++ b/designer-chart/src/com/fr/van/chart/structure/desinger/type/VanChartStructureTypePane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.structure.desinger.type; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.structure.StructureIndependentVanChart; @@ -60,7 +60,7 @@ public class VanChartStructureTypePane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/treemap/VanChartTreeMapPlotPane.java b/designer-chart/src/com/fr/van/chart/treemap/VanChartTreeMapPlotPane.java index d5f6301a4..e74e1f001 100644 --- a/designer-chart/src/com/fr/van/chart/treemap/VanChartTreeMapPlotPane.java +++ b/designer-chart/src/com/fr/van/chart/treemap/VanChartTreeMapPlotPane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.treemap; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.treemap.TreeMapIndependentVanChart; import com.fr.plugin.chart.treemap.VanChartTreeMapPlot; @@ -48,7 +48,7 @@ public class VanChartTreeMapPlotPane extends VanChartMultiPiePlotPane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error In treeMapChart"); + FineLoggerFactory.getLogger().error("Error In treeMapChart"); } return cloned; } diff --git a/designer-chart/src/com/fr/van/chart/wordcloud/designer/type/VanChartWordCloudTypePane.java b/designer-chart/src/com/fr/van/chart/wordcloud/designer/type/VanChartWordCloudTypePane.java index 93f5a579a..8b1c8955f 100644 --- a/designer-chart/src/com/fr/van/chart/wordcloud/designer/type/VanChartWordCloudTypePane.java +++ b/designer-chart/src/com/fr/van/chart/wordcloud/designer/type/VanChartWordCloudTypePane.java @@ -2,7 +2,7 @@ package com.fr.van.chart.wordcloud.designer.type; import com.fr.chart.chartattr.Chart; import com.fr.chart.chartattr.Plot; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.plugin.chart.base.VanChartTools; import com.fr.plugin.chart.wordcloud.VanChartWordCloudPlot; @@ -56,7 +56,7 @@ public class VanChartWordCloudTypePane extends AbstractVanChartTypePane { try { cloned = (Plot)newPlot.clone(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return cloned; } diff --git a/designer-form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java b/designer-form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java index 40f2bf472..8973f1d20 100644 --- a/designer-form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java +++ b/designer-form/src/com/fr/design/designer/beans/adapters/layout/FRAbsoluteLayoutAdapter.java @@ -11,7 +11,7 @@ import com.fr.design.utils.ComponentUtils; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import java.awt.*; @@ -82,7 +82,7 @@ public class FRAbsoluteLayoutAdapter extends FRBodyLayoutAdapter { return acceptWidget(x, y); } } else { - FRLogger.getLogger().error("top layout is null!"); + FineLoggerFactory.getLogger().error("top layout is null!"); } return false; diff --git a/designer-form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java b/designer-form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java index 61e9260e3..8c22a9eb0 100644 --- a/designer-form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java +++ b/designer-form/src/com/fr/design/designer/beans/painters/FRAbsoluteLayoutPainter.java @@ -7,7 +7,7 @@ import com.fr.design.designer.creator.XLayoutContainer; import com.fr.design.form.util.XCreatorConstants; import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.FormDesigner; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import java.awt.*; @@ -64,12 +64,12 @@ public class FRAbsoluteLayoutPainter extends AbstractPainter { if (XCreatorUtils.getHotspotContainer((XCreator) currentComp) != null) { currentComp = XCreatorUtils.getHotspotContainer((XCreator) currentComp).getTopLayout(); if (currentComp == null) { - FRLogger.getLogger().info("FRAbsoluteLayoutPainter get currentComp null!"); + FineLoggerFactory.getLogger().info("FRAbsoluteLayoutPainter get currentComp null!"); return; } } else{ - FRLogger.getLogger().info("FRAbsoluteLayoutPainter getHotspotContainer currentComp null!"); + FineLoggerFactory.getLogger().info("FRAbsoluteLayoutPainter getHotspotContainer currentComp null!"); return; } Color bColor = XCreatorConstants.FIT_LAYOUT_HOTSPOT_COLOR; diff --git a/designer-form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java b/designer-form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java index 354846d91..966b14407 100644 --- a/designer-form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java +++ b/designer-form/src/com/fr/design/designer/creator/cardlayout/TabMoveAction.java @@ -4,7 +4,7 @@ import com.fr.design.designer.beans.actions.FormUndoableAction; import com.fr.design.mainframe.FormDesigner; import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.container.cardlayout.WTabFitLayout; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; /** * Created by zhouping on 2017/2/17. @@ -37,7 +37,7 @@ public class TabMoveAction extends FormUndoableAction { xwCardTagLayout.setSwitchingTab(false); }catch (Exception e){ xwCardTagLayout.setSwitchingTab(false); - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } return true; diff --git a/designer-form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java b/designer-form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java index 5c65f5594..96298860c 100644 --- a/designer-form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java +++ b/designer-form/src/com/fr/design/designer/creator/cardlayout/XWTabFitLayout.java @@ -21,7 +21,7 @@ import com.fr.form.ui.container.cardlayout.WCardTagLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.form.ui.container.WAbsoluteLayout.BoundsWidget; import com.fr.general.Background; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.core.PropertyChangeAdapter; @@ -200,7 +200,7 @@ public class XWTabFitLayout extends XWFitLayout { try { xCardSwitchButton = (XCardSwitchButton) ((XWCardMainBorderLayout) this.getTopLayout()).getTitlePart().getTagPart().getComponent(0); }catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return; } diff --git a/designer-form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java b/designer-form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java index 20702ec8f..0fc137df0 100644 --- a/designer-form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java +++ b/designer-form/src/com/fr/design/designer/properties/FRAbsoluteBodyLayoutPropertiesGroupModel.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.widget.editors.LayoutTypeEditor; import com.fr.design.utils.gui.LayoutUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBodyLayoutType; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.FRScreen; import com.fr.general.Inter; @@ -181,7 +181,7 @@ public class FRAbsoluteBodyLayoutPropertiesGroupModel extends FRAbsoluteLayoutPr return true; } catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } } diff --git a/designer-form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java b/designer-form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java index a8b022a97..4da7cf743 100644 --- a/designer-form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java +++ b/designer-form/src/com/fr/design/designer/properties/FRFitLayoutPropertiesGroupModel.java @@ -17,7 +17,7 @@ import com.fr.form.ui.container.WAbsoluteBodyLayout; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import javax.swing.table.DefaultTableCellRenderer; @@ -175,7 +175,7 @@ public class FRFitLayoutPropertiesGroupModel implements GroupModel { FormSelectionUtils.rebuildSelection(xfl, new Widget[]{xfl.toData()})); } }catch (Exception e){ - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } layout.setLayoutType(WBodyLayoutType.parse(state)); diff --git a/designer-form/src/com/fr/design/mainframe/FormDesigner.java b/designer-form/src/com/fr/design/mainframe/FormDesigner.java index 9fa639171..1b659cd4d 100644 --- a/designer-form/src/com/fr/design/mainframe/FormDesigner.java +++ b/designer-form/src/com/fr/design/mainframe/FormDesigner.java @@ -43,7 +43,7 @@ import com.fr.form.ui.WidgetValue; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WFitLayout; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.CoreGraphHelper; @@ -1291,7 +1291,7 @@ public class FormDesigner extends TargetComponent

implements TreeSelection try { Thread.sleep(1500); } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } pane.setLayout(new BorderLayout()); diff --git a/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java b/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java index 86a7536e2..5aa874bd2 100644 --- a/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java +++ b/designer-form/src/com/fr/design/mainframe/FormSelectionUtils.java @@ -17,7 +17,7 @@ import com.fr.design.utils.ComponentUtils; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WTitleLayout; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import java.awt.Component; @@ -199,7 +199,7 @@ public class FormSelectionUtils { designer.getSelectionModel().getSelection().addSelectedCreator(copiedXCreator); } } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } diff --git a/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java b/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java index 5c8f873d5..b83603a71 100644 --- a/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java +++ b/designer-form/src/com/fr/design/mainframe/FormWidgetDetailPane.java @@ -10,9 +10,10 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.form.share.ShareLoader; import com.fr.form.ui.ElCaseBindInfo; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.SiteCenter; +import com.fr.log.FineLoggerFactory; import com.fr.share.ShareConstants; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; @@ -322,12 +323,12 @@ public class FormWidgetDetailPane extends FormDockView{ Desktop.getDesktop().browse(new URI(url)); } catch (IOException exp) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer_Set_default_browser")); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (URISyntaxException exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); } catch (Exception exp) { - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); - FRContext.getLogger().error("Can not open the browser for URL: " + url); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error("Can not open the browser for URL: " + url); } } }); @@ -399,7 +400,7 @@ public class FormWidgetDetailPane extends FormDockView{ } } catch (IOException e) { JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Share_Module_Error")); - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } @@ -408,7 +409,7 @@ public class FormWidgetDetailPane extends FormDockView{ try { ShareLoader.getLoader().refreshModule(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } diff --git a/designer-form/src/com/fr/design/mainframe/JForm.java b/designer-form/src/com/fr/design/mainframe/JForm.java index 30dff7934..757da397e 100644 --- a/designer-form/src/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/com/fr/design/mainframe/JForm.java @@ -53,7 +53,7 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.container.WBorderLayout; import com.fr.form.ui.container.WLayout; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.stable.ArrayUtils; import com.fr.stable.Constants; @@ -735,7 +735,7 @@ public class JForm extends JTemplate implements BaseJForm { try { Thread.sleep(1500); } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } JPanel pane = new JPanel(); pane.setLayout(new BorderLayout()); diff --git a/designer-form/src/com/fr/design/mainframe/actions/EmbeddedFormExportExportAction.java b/designer-form/src/com/fr/design/mainframe/actions/EmbeddedFormExportExportAction.java index 08b6be6b8..2d8698f35 100644 --- a/designer-form/src/com/fr/design/mainframe/actions/EmbeddedFormExportExportAction.java +++ b/designer-form/src/com/fr/design/mainframe/actions/EmbeddedFormExportExportAction.java @@ -1,13 +1,5 @@ package com.fr.design.mainframe.actions; -import java.awt.event.ActionEvent; -import java.io.FileOutputStream; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.JOptionPane; -import javax.swing.SwingWorker; - import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.base.Parameter; @@ -25,11 +17,18 @@ import com.fr.file.FILEChooserPane; import com.fr.file.filter.ChooseFileFilter; import com.fr.form.main.Form; import com.fr.form.main.FormEmbeddedTableDataExporter; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; +import com.fr.log.FineLoggerFactory; import com.fr.stable.ArrayUtils; import com.fr.stable.project.ProjectConstants; +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.io.FileOutputStream; +import java.util.HashMap; +import java.util.Map; + /** * Export Embedded. */ @@ -84,7 +83,7 @@ public class EmbeddedFormExportExportAction extends JTemplateAction{ try { file.mkfile(); } catch (Exception e1) { - FRLogger.getLogger().error("Error In Make New File"); + FineLoggerFactory.getLogger().error("Error In Make New File"); } fileChooserPane = null; FRContext.getLogger().info("\"" + file.getName() + "\"" + Inter.getLocText("FR-Designer_Prepare_Export") + "!"); @@ -141,7 +140,7 @@ public class EmbeddedFormExportExportAction extends JTemplateAction{ Inter.getLocText("FR-Designer_Exported_successfully") + "\n" + filePath); } catch (Exception exp) { this.setProgress(100); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Export_failed") + "\n" + filePath); } return null; diff --git a/designer-form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java b/designer-form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java index 387c6f782..c45de9795 100644 --- a/designer-form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java +++ b/designer-form/src/com/fr/design/widget/ui/designer/layout/FRAbsoluteBodyLayoutDefinePane.java @@ -23,7 +23,7 @@ import com.fr.form.ui.LayoutBorderStyle; import com.fr.form.ui.container.WAbsoluteBodyLayout; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBodyLayoutType; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.report.core.ReportUtils; @@ -185,7 +185,7 @@ public class FRAbsoluteBodyLayoutDefinePane extends FRAbsoluteLayoutDefinePane { formDesigner.getSelectionModel().setSelectedCreator(xfl); return true; } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } } diff --git a/designer-form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java b/designer-form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java index 5eb67b136..41c24f940 100644 --- a/designer-form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java +++ b/designer-form/src/com/fr/design/widget/ui/designer/layout/FRFitLayoutDefinePane.java @@ -32,7 +32,7 @@ import com.fr.form.ui.container.WAbsoluteBodyLayout; import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WBodyLayoutType; import com.fr.form.ui.container.WFitLayout; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.report.core.ReportUtils; @@ -194,7 +194,7 @@ public class FRFitLayoutDefinePane extends AbstractDataModify { FormSelectionUtils.rebuildSelection(xWFitLayout, new Widget[]{wAbsoluteBodyLayout})); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } //todo 验证下 diff --git a/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java index 5ba9688b4..526a80152 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java @@ -15,7 +15,7 @@ import com.fr.design.parameter.ParameterInputPane; import com.fr.file.FILE; import com.fr.file.FILEChooserPane; import com.fr.file.filter.ChooseFileFilter; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.io.exporter.AppExporter; import com.fr.io.exporter.CSVExporter; @@ -24,6 +24,7 @@ import com.fr.io.exporter.ExcelExporter; import com.fr.io.exporter.Exporter; import com.fr.io.exporter.PDFExporterProcessor; import com.fr.io.exporter.WordExporter; +import com.fr.log.FineLoggerFactory; import com.fr.main.TemplateWorkBook; import com.fr.main.impl.WorkBook; import com.fr.page.PageSetProvider; @@ -34,8 +35,7 @@ import com.fr.report.worksheet.WorkSheet; import com.fr.stable.ActorConstants; import com.fr.stable.ActorFactory; -import javax.swing.JOptionPane; -import javax.swing.SwingWorker; +import javax.swing.*; import java.awt.event.ActionEvent; import java.io.OutputStream; import java.util.Map; @@ -98,7 +98,7 @@ public abstract class AbstractExportAction extends JWorkBookAction { try { file.mkfile(); } catch (Exception e1) { - FRLogger.getLogger().error("Error In Make New File"); + FineLoggerFactory.getLogger().error("Error In Make New File"); } fileChooserPane = null; FRContext.getLogger().info("\"" + file.getName() + "\"" + Inter.getLocText("FR-Designer_Prepare_Export") + "!"); @@ -132,7 +132,7 @@ public abstract class AbstractExportAction extends JWorkBookAction { Inter.getLocText("FR-Designer_Exported_successfully") + "\n" + filePath); } catch (Exception exp) { this.setProgress(100); - FRContext.getLogger().errorWithServerLevel(exp.getMessage(), exp); + FineLoggerFactory.getLogger().error(exp.getMessage(), exp); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText("FR-Designer_Export_failed") + "\n" + filePath); } return null; diff --git a/designer-realize/src/com/fr/design/actions/insert/flot/ChartFloatAction.java b/designer-realize/src/com/fr/design/actions/insert/flot/ChartFloatAction.java index 3e6790fa6..d4cee179f 100644 --- a/designer-realize/src/com/fr/design/actions/insert/flot/ChartFloatAction.java +++ b/designer-realize/src/com/fr/design/actions/insert/flot/ChartFloatAction.java @@ -15,7 +15,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.ElementCasePane; import com.fr.design.menu.MenuKeySet; import com.fr.design.module.DesignModuleFactory; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.grid.Grid; import com.fr.grid.selection.FloatSelection; @@ -123,7 +123,7 @@ public class ChartFloatAction extends ElementCaseAction { reportPane.setSelection(new FloatSelection(newFloatElement.getName())); reportPane.fireSelectionChangeListener(); } catch (CloneNotSupportedException e) { - FRLogger.getLogger().error("Error in Float"); + FineLoggerFactory.getLogger().error("Error in Float"); } } }); diff --git a/designer-realize/src/com/fr/design/mainframe/CellWidgetPropertyPane.java b/designer-realize/src/com/fr/design/mainframe/CellWidgetPropertyPane.java index 38d3c3905..9d311c310 100644 --- a/designer-realize/src/com/fr/design/mainframe/CellWidgetPropertyPane.java +++ b/designer-realize/src/com/fr/design/mainframe/CellWidgetPropertyPane.java @@ -7,7 +7,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.widget.WidgetPane; import com.fr.form.ui.NoneWidget; import com.fr.form.ui.Widget; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.Selection; @@ -149,7 +149,7 @@ public class CellWidgetPropertyPane extends BasicPane { newWidget.setWidgetPrivilegeControl((WidgetPrivilegeControl) oldWidget.getWidgetPrivilegeControl().clone()); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return newWidget; } diff --git a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java index 25622d179..fe4841962 100644 --- a/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java +++ b/designer-realize/src/com/fr/design/mainframe/ElementCasePane.java @@ -81,7 +81,7 @@ import com.fr.design.selection.Selectedable; import com.fr.design.selection.SelectionEvent; import com.fr.design.selection.SelectionListener; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.grid.Grid; import com.fr.grid.GridColumn; @@ -421,10 +421,10 @@ public abstract class ElementCasePane extends Tar c = clazz.getConstructor(ElementCase.class); editor = (CellEditor) c.newInstance(this); } catch (Exception e1) { - FRLogger.getLogger().error(e1.getMessage(), e1); + FineLoggerFactory.getLogger().error(e1.getMessage(), e1); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } grid.setDefaultCellEditor(provider.targetObjectClass(), editor); } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java index cb2bbc437..324006f93 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/ActionModel.java @@ -2,7 +2,7 @@ package com.fr.design.mainframe.alphafine.cell.model; import com.fr.design.actions.UpdateAction; import com.fr.design.mainframe.alphafine.CellType; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.json.JSONException; import com.fr.json.JSONObject; @@ -58,7 +58,7 @@ public class ActionModel extends AlphaCellModel { modelObject.put("className", getAction().getClass().getName()).put("searchCount", getSearchCount()); object.put("result", modelObject).put("cellType", getType().getTypeValue()); } catch (JSONException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return object; } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/DocumentModel.java b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/DocumentModel.java index a42e9ed97..4cb7cd16d 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/DocumentModel.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/DocumentModel.java @@ -2,7 +2,7 @@ package com.fr.design.mainframe.alphafine.cell.model; import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.CellType; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.json.JSONException; import com.fr.json.JSONObject; @@ -47,7 +47,7 @@ public class DocumentModel extends AlphaCellModel { modelObject.put("title", getName()).put("summary", getContent()).put("did", getDocumentId()).put("searchCount", getSearchCount()); object.put("result", modelObject).put("cellType", getType().getTypeValue()); } catch (JSONException e) { - FRLogger.getLogger().error("DocumentModel: " + e.getMessage()); + FineLoggerFactory.getLogger().error("DocumentModel: " + e.getMessage()); } return object; } @@ -62,9 +62,9 @@ public class DocumentModel extends AlphaCellModel { try { Desktop.getDesktop().browse(new URI(getDocumentUrl())); } catch (IOException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (URISyntaxException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/FileModel.java b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/FileModel.java index e18ed9afe..70d55b872 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/FileModel.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/FileModel.java @@ -5,7 +5,7 @@ import com.fr.design.mainframe.alphafine.AlphaFineHelper; import com.fr.design.mainframe.alphafine.CellType; import com.fr.file.FileNodeFILE; import com.fr.file.filetree.FileNode; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.json.JSONException; import com.fr.json.JSONObject; @@ -42,7 +42,7 @@ public class FileModel extends AlphaCellModel { modelObject.put("filePath", getFilePath()).put("searchCount", getSearchCount()); object.put("result", modelObject).put("cellType", getType().getTypeValue()); } catch (JSONException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return object; } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java index 44c6ae660..f8782c10a 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/cell/model/PluginModel.java @@ -5,7 +5,7 @@ import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.CellType; import com.fr.env.RemoteEnv; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.stable.StringUtils; @@ -93,7 +93,7 @@ public class PluginModel extends AlphaCellModel { modelObject.put("name", getName()).put("description", getContent()).put("pic", getImageUrl()).put("version", getVersion()).put("jartime", getJartime()).put("id", getId()).put("pluginid", getPluginId()).put("type", getType().getTypeValue()).put("price", getPrice()).put("link", getLink()).put("searchCount", getSearchCount()); object.put("result", modelObject).put("cellType", getType().getTypeValue()); } catch (JSONException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return object; diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java b/designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java index 59237baad..33dd2893e 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/component/AlphaFineDialog.java @@ -32,7 +32,7 @@ import com.fr.design.mainframe.alphafine.search.manager.impl.RecommendSearchMana import com.fr.form.main.Form; import com.fr.form.main.FormIO; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.http.HttpClient; import com.fr.io.TemplateWorkBookIO; @@ -509,7 +509,7 @@ public class AlphaFineDialog extends UIDialog { try { form = FormIO.readForm(FRContext.getCurrentEnv(), fileName); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return FormIO.exportFormAsImage(form); } @@ -521,9 +521,9 @@ public class AlphaFineDialog extends UIDialog { try { rightSearchResultPane.add(new FilePreviewPane(get())); } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (ExecutionException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } validate(); repaint(); @@ -541,7 +541,7 @@ public class AlphaFineDialog extends UIDialog { try { workBook = (WorkBook) TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), fileName); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } BufferedImage bufferedImage = new ImageExporter().exportToImage(workBook); return bufferedImage; @@ -556,9 +556,9 @@ public class AlphaFineDialog extends UIDialog { validate(); repaint(); } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (ExecutionException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } @@ -593,7 +593,7 @@ public class AlphaFineDialog extends UIDialog { try { bufferedImage = ImageIO.read(getClass().getResource("/com/fr/design/mainframe/alphafine/images/default_product.png")); } catch (IOException e1) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } return bufferedImage; @@ -609,9 +609,9 @@ public class AlphaFineDialog extends UIDialog { repaint(); } } catch (InterruptedException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } catch (ExecutionException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } @@ -695,7 +695,7 @@ public class AlphaFineDialog extends UIDialog { Thread.sleep(10); doSearch(searchTextField.getText().toLowerCase()); } catch (InterruptedException e1) { - FRLogger.getLogger().error(e1.getMessage()); + FineLoggerFactory.getLogger().error(e1.getMessage()); } } @@ -788,7 +788,7 @@ public class AlphaFineDialog extends UIDialog { try { object.put("uuid", uuid).put("activityKey", activityKey).put("username", username).put("createTime", createTime).put("key", key).put("resultKind", resultKind).put("resultValue", resultValue); } catch (JSONException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } final HashMap para = new HashMap<>(); String date = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()); @@ -797,7 +797,7 @@ public class AlphaFineDialog extends UIDialog { HttpClient httpClient = new HttpClient(AlphaFineConstants.CLOUD_SERVER_URL, para, true); httpClient.asGet(); if (!httpClient.isServerAlive()) { - FRLogger.getLogger().error("Failed to sent data to server!"); + FineLoggerFactory.getLogger().error("Failed to sent data to server!"); } } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java index d4611256c..2fa777f03 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/DocumentSearchManager.java @@ -8,7 +8,7 @@ import com.fr.design.mainframe.alphafine.cell.model.DocumentModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; @@ -88,7 +88,7 @@ public class DocumentSearchManager implements AlphaFineSearchProvider { } } } catch (JSONException e) { - FRLogger.getLogger().error("document search error: " + e.getMessage()); + FineLoggerFactory.getLogger().error("document search error: " + e.getMessage()); } } return lessModelList; diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java index 8cc578683..33c592073 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/FileSearchManager.java @@ -12,7 +12,7 @@ import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.json.JSONObject; import com.fr.stable.StringUtils; @@ -175,7 +175,7 @@ public class FileSearchManager implements AlphaFineSearchProvider { isr.close(); reader.close(); } catch (Exception e) { - FRLogger.getLogger().error("file read error: " + e.getMessage()); + FineLoggerFactory.getLogger().error("file read error: " + e.getMessage()); } } diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java index 17cd01f58..ab3ce080d 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java @@ -9,7 +9,7 @@ import com.fr.design.mainframe.alphafine.cell.model.PluginModel; import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; @@ -57,7 +57,7 @@ public class PluginSearchManager implements AlphaFineSearchProvider { try { imageUrl = isFromCloud ? AlphaFineConstants.PLUGIN_IMAGE_URL + URLEncoder.encode(object.optString("pic").toString().substring(AlphaFineConstants.PLUGIN_IMAGE_URL.length()), "utf8") : object.optString("pic"); } catch (UnsupportedEncodingException e) { - FRLogger.getLogger().error("plugin icon error: " + e.getMessage()); + FineLoggerFactory.getLogger().error("plugin icon error: " + e.getMessage()); } String version = null; String jartime = null; @@ -133,9 +133,9 @@ public class PluginSearchManager implements AlphaFineSearchProvider { } } } catch (JSONException e) { - FRLogger.getLogger().error("plugin search json error :" + e.getMessage()); + FineLoggerFactory.getLogger().error("plugin search json error :" + e.getMessage()); } catch (UnsupportedEncodingException e) { - FRLogger.getLogger().error("plugin search encode error :" + e.getMessage()); + FineLoggerFactory.getLogger().error("plugin search encode error :" + e.getMessage()); } } return this.lessModelList; diff --git a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java index 9bc485287..2dc1ee9c0 100644 --- a/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java +++ b/designer-realize/src/com/fr/design/mainframe/alphafine/search/manager/impl/RecommendSearchManager.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.alphafine.cell.model.AlphaCellModel; import com.fr.design.mainframe.alphafine.cell.model.MoreModel; import com.fr.design.mainframe.alphafine.model.SearchResult; import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvider; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.http.HttpClient; import com.fr.json.JSONArray; @@ -67,7 +67,7 @@ public class RecommendSearchManager implements AlphaFineSearchProvider { } } } catch (JSONException e) { - FRLogger.getLogger().error("recommend search error! :" + e.getMessage()); + FineLoggerFactory.getLogger().error("recommend search error! :" + e.getMessage()); } Iterator modelIterator = recommendModelList.iterator(); while (modelIterator.hasNext()) { diff --git a/designer-realize/src/com/fr/design/mainframe/bbs/BBSDialog.java b/designer-realize/src/com/fr/design/mainframe/bbs/BBSDialog.java index b0667d4c6..ef4633f5a 100644 --- a/designer-realize/src/com/fr/design/mainframe/bbs/BBSDialog.java +++ b/designer-realize/src/com/fr/design/mainframe/bbs/BBSDialog.java @@ -4,7 +4,7 @@ import com.fr.design.dialog.UIDialog; import com.fr.design.extra.PluginWebBridge; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.SiteCenter; import javafx.application.Platform; @@ -63,7 +63,7 @@ public class BBSDialog extends UIDialog { } }); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } diff --git a/designer-realize/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java b/designer-realize/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java index 7acc4a2d7..6c0c8e694 100644 --- a/designer-realize/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java +++ b/designer-realize/src/com/fr/design/mainframe/bbs/BBSLoginDialog.java @@ -11,6 +11,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.*; import com.fr.general.http.HttpClient; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; @@ -280,7 +281,7 @@ public class BBSLoginDialog extends UIDialog { username = URLEncoder.encode(username, EncodeConstants.ENCODING_GBK); password = URLEncoder.encode(password, EncodeConstants.ENCODING_GBK); } catch (UnsupportedEncodingException e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } String url = SiteCenter.getInstance().acquireUrlByKind("bbs.login") + "&username=" + username + "&password=" + password; String loginSuccessFlag = SiteCenter.getInstance().acquireUrlByKind("bbs"); @@ -293,7 +294,7 @@ public class BBSLoginDialog extends UIDialog { return true; } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } } } diff --git a/designer-realize/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java b/designer-realize/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java index e2a3b30ca..8e5471571 100644 --- a/designer-realize/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java +++ b/designer-realize/src/com/fr/design/mainframe/errorinfo/ErrorInfoUploader.java @@ -3,7 +3,6 @@ package com.fr.design.mainframe.errorinfo; import com.fr.base.FRContext; import com.fr.design.mainframe.SiteCenterToken; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.SiteCenter; @@ -11,8 +10,8 @@ import com.fr.general.http.HttpClient; import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.license.function.VT4FR; +import com.fr.log.FineLoggerFactory; import com.fr.log.LogHandler; -import com.fr.stable.CodeUtils; import com.fr.stable.EnvChangedListener; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; @@ -21,8 +20,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.HashMap; /** @@ -41,7 +38,7 @@ public class ErrorInfoUploader { GeneralContext.addEnvChangedListener(new EnvChangedListener() { @Override public void envChanged() { - FRLogger.getLogger().addLogAppender(new LogHandler() { + FineLoggerFactory.getLogger().addLogAppender(new LogHandler() { @Override public ErrorInfoLogAppender getHandler() { return new ErrorInfoLogAppender(); @@ -53,7 +50,7 @@ public class ErrorInfoUploader { } private ErrorInfoUploader() { - FRLogger.getLogger().addLogAppender(new LogHandler() { + FineLoggerFactory.getLogger().addLogAppender(new LogHandler() { @Override public ErrorInfoLogAppender getHandler() { return new ErrorInfoLogAppender(); diff --git a/designer-realize/src/com/fr/design/module/DesignerModule.java b/designer-realize/src/com/fr/design/module/DesignerModule.java index 0427eee31..5b95d034f 100644 --- a/designer-realize/src/com/fr/design/module/DesignerModule.java +++ b/designer-realize/src/com/fr/design/module/DesignerModule.java @@ -49,7 +49,7 @@ import com.fr.design.parameter.WorkBookParameterReader; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.file.FILE; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.ModuleContext; import com.fr.general.xml.GeneralXMLTools; @@ -168,7 +168,7 @@ public class DesignerModule extends DesignModule { try { ActionFactory.registerCellEditor(provider.targetObjectClass(), provider.quickEditor().newInstance()); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } @@ -445,7 +445,7 @@ public class DesignerModule extends DesignModule { ServerPreferenceConfig.getInstance().putStyle(namelist.get(i), Style.DEFAULT_STYLE); } } catch (Exception ex) { - FRLogger.getLogger().error(ex.getMessage()); + FineLoggerFactory.getLogger().error(ex.getMessage()); } jd.dispose(); new StyleListAction().actionPerformed(e);// 弹窗 diff --git a/designer-realize/src/com/fr/design/present/CellWriteAttrPane.java b/designer-realize/src/com/fr/design/present/CellWriteAttrPane.java index 3ef36b121..f2754c555 100644 --- a/designer-realize/src/com/fr/design/present/CellWriteAttrPane.java +++ b/designer-realize/src/com/fr/design/present/CellWriteAttrPane.java @@ -10,7 +10,7 @@ import com.fr.design.mainframe.ElementCasePane; import com.fr.design.widget.WidgetPane; import com.fr.form.ui.NoneWidget; import com.fr.form.ui.Widget; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.grid.selection.CellSelection; import com.fr.grid.selection.Selection; @@ -111,7 +111,7 @@ public class CellWriteAttrPane extends BasicPane { newWidget.setWidgetPrivilegeControl((WidgetPrivilegeControl) oldWidget.getWidgetPrivilegeControl().clone()); } } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return newWidget; } diff --git a/designer-realize/src/com/fr/design/widget/WidgetEventPane.java b/designer-realize/src/com/fr/design/widget/WidgetEventPane.java index 4e149ac2e..34b42baf9 100644 --- a/designer-realize/src/com/fr/design/widget/WidgetEventPane.java +++ b/designer-realize/src/com/fr/design/widget/WidgetEventPane.java @@ -18,7 +18,7 @@ import com.fr.design.mainframe.ElementCasePane; import com.fr.design.mainframe.JTemplate; import com.fr.form.event.Listener; import com.fr.form.ui.Widget; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.NameObject; import com.fr.grid.GridUtils; diff --git a/designer-realize/src/com/fr/design/write/submit/SubmitVisitorListPane.java b/designer-realize/src/com/fr/design/write/submit/SubmitVisitorListPane.java index 3dfea6c15..e26e3549c 100644 --- a/designer-realize/src/com/fr/design/write/submit/SubmitVisitorListPane.java +++ b/designer-realize/src/com/fr/design/write/submit/SubmitVisitorListPane.java @@ -14,7 +14,7 @@ import com.fr.design.mainframe.ElementCasePane; import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogger; +import com.fr.log.FineLoggerFactory; import com.fr.general.Inter; import com.fr.general.NameObject; import com.fr.report.write.BuiltInSQLSubmiter; @@ -137,7 +137,7 @@ public class SubmitVisitorListPane extends ObjectJControlPane { try { editing = (BuiltInSQLSubmiterProvider) editing.clone(); } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } editing.setDBManipulation(dbManipulation); From dc478aadeaa105874397cc85339f4a46f55cffaa Mon Sep 17 00:00:00 2001 From: hzzz Date: Thu, 31 May 2018 17:43:46 +0800 Subject: [PATCH 26/29] add dependency --- designer-base/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-base/pom.xml b/designer-base/pom.xml index 520ce6f2f..8d6e8bffb 100644 --- a/designer-base/pom.xml +++ b/designer-base/pom.xml @@ -8,6 +8,13 @@ design 10.0-FEATURE-SNAPSHOT + + + io.socket + socket.io-client + 0.7.0 + + com.fr.report designer-base 10.0-FEATURE-SNAPSHOT From 97fc573e7179539e0e6f4d2ec4f74f2556322dba Mon Sep 17 00:00:00 2001 From: hzzz Date: Thu, 31 May 2018 19:25:05 +0800 Subject: [PATCH 27/29] fix --- .../fr/design/mainframe/DesignerFrame.java | 16 +- designer-base/src/com/fr/env/RemoteEnv.java | 1456 ++--------------- 2 files changed, 104 insertions(+), 1368 deletions(-) diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index d8096aab2..98f7de5f9 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -35,6 +35,7 @@ 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; @@ -43,8 +44,6 @@ import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.general.GeneralContext; import com.fr.general.Inter; -import com.fr.general.env.EnvContext; -import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.manage.PluginFilter; @@ -83,6 +82,9 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import static com.fr.core.env.EnvEvents.AFTER_SIGN_OUT; +import static com.fr.core.env.EnvEvents.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); @@ -351,7 +353,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); this.setIconImages(image); } catch (IOException e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); this.setIconImage(BaseUtils.readImage("/com/fr/base/images/oem/logo.png")); } } @@ -965,11 +967,11 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta Env currentEnv = FRContext.getCurrentEnv(); try { - EnvContext.fireBeforeSignOut(); + EventDispatcher.fire(BEFORE_SIGN_OUT); currentEnv.signOut(); - EnvContext.fireAfterSignOut(); + EventDispatcher.fire(AFTER_SIGN_OUT); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } this.setVisible(false); this.dispose(); @@ -1025,7 +1027,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta } } } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } event.dropComplete(true); diff --git a/designer-base/src/com/fr/env/RemoteEnv.java b/designer-base/src/com/fr/env/RemoteEnv.java index f004606f4..a9124b9e9 100644 --- a/designer-base/src/com/fr/env/RemoteEnv.java +++ b/designer-base/src/com/fr/env/RemoteEnv.java @@ -1,47 +1,34 @@ package com.fr.env; -import com.fr.base.AbstractEnv; +import com.fr.base.env.old.AbstractEnv; import com.fr.base.EnvException; -import com.fr.base.FRContext; -import com.fr.base.ModifiedTable; -import com.fr.base.Parameter; -import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; -import com.fr.base.Utils; +import com.fr.base.env.EnvContext; +import com.fr.base.env.resource.RemoteEnvConfig; import com.fr.base.remote.RemoteDeziConstants; +import com.fr.core.env.EnvConstants; import com.fr.data.TableDataSource; -import com.fr.data.core.DataCoreUtils; -import com.fr.data.core.db.TableProcedure; -import com.fr.data.impl.Connection; import com.fr.data.impl.EmbeddedTableData; -import com.fr.data.impl.storeproc.ProcedureDataModel; import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.dav.DavXMLUtils; -import com.fr.dav.UserBaseEnv; import com.fr.design.DesignerEnvManager; -import com.fr.design.ExtraDesignClassManager; -import com.fr.design.dialog.InformationWarnPane; -import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.file.CacheManager; import com.fr.file.ConnectionConfig; import com.fr.file.TableDataConfig; -import com.fr.file.filetree.FileNode; import com.fr.general.CommonIOUtils; import com.fr.general.ComparatorUtils; import com.fr.general.IOUtils; import com.fr.general.Inter; import com.fr.general.LogRecordTime; import com.fr.general.LogUtils; +import com.fr.general.http.HttpToolbox; import com.fr.io.utils.ResourceIOUtils; import com.fr.json.JSONArray; -import com.fr.json.JSONException; import com.fr.json.JSONObject; -import com.fr.license.function.VT4FR; -import com.fr.regist.License; +import com.fr.log.FineLoggerFactory; import com.fr.report.DesignAuthority; +import com.fr.report.util.AuthorityXMLUtils; import com.fr.share.ShareConstants; import com.fr.stable.ArrayUtils; import com.fr.stable.EncodeConstants; @@ -53,14 +40,11 @@ import com.fr.stable.StringUtils; import com.fr.stable.SvgProvider; import com.fr.stable.file.XMLFileManagerProvider; import com.fr.stable.project.ProjectConstants; -import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLTools; -import com.fr.stable.xml.XMLableReader; +import com.fr.third.guava.collect.ImmutableMap; import com.fr.web.ResourceConstants; -import com.fr.report.util.AuthorityXMLUtils; import javax.swing.JOptionPane; -import javax.swing.UIManager; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; @@ -80,141 +64,46 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; -import java.net.NoRouteToHostException; -import java.net.Socket; -import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import java.util.logging.Level; -import java.util.regex.Pattern; + +import static com.fr.third.guava.base.Preconditions.checkArgument; /** * @author null */ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurable { - private static final int TIME_OUT = 30 * 1000; - private static final int PLAIN_SOCKET_PORT = 80; - private static final int SSL_PORT = 443; - private static final int MAX_PER_ROUTE = 20; - private static final int MAX_TOTAL = 100; - private static final String REMOTE_PLUGIN = "remote_plugin.info"; private static final String CERT_KEY = "javax.net.ssl.trustStore"; private static final String PWD_KEY = "javax.net.ssl.trustStorePassword"; private static final String HTTPS_PREFIX = "https:"; private final static String[] FILE_TYPE = {"cptx", "cpt", "frm", "form", "cht", "chart"}; - private String path; - private String user; - private String password; - private Clock clock = null; - private String userID; - private Timer timer; - private int licNotSupport = 0; - private boolean isRoot = false; - private Timer logTimer = null; - private static ThreadLocal threadLocal = new ThreadLocal<>(); - private boolean isReadTimeOut = false; private String buildFilePath; + private RemoteEnvConfig env; - public RemoteEnv() { - this.clock = new Clock(this); - } public RemoteEnv(String path, String userName, String password) { - this(); - this.path = path; - this.user = userName; - this.password = password; + env = new RemoteEnvConfig(path, userName, password); } - /** - * 返回env配置路径 - */ @Override public String getPath() { - return this.path; - } - - public void setPath(String s) { - this.path = s; + return env.getPath(); } - /** - * 当前设计环境的用户名,用于远程设计 - */ @Override public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - clearUserID(); + return env.getUsername(); } public String getPassword() { - return password; - } - - /** - * 修复密码中包含特殊字符,无法登录的问题 - * - * @return encoded password - */ - private String getEncodedPassword() { - try { - return URLEncoder.encode(password, "UTF-8"); - } catch (UnsupportedEncodingException e) { - return password; - } - } - - public void setPassword(String password) { - this.password = password; - clearUserID(); + return env.getPassword(); } - public Clock getClock() { - return this.clock; - } - - public void setClock(Clock clock) { - this.clock = clock; - } - - private void clearUserID() { - this.userID = null; - } - - public void setThreadLocal(String value) { - synchronized (this) { - threadLocal.set(value); - } - - } - - public String getThreadLocal() { - return threadLocal.get(); - } - - /** - * 所有与服务器端交互前,都要调用这个方法生成UserID - */ - public String getValidUserID() throws EnvException { - // 如果登录之后userID还是null - if (this.userID == null) { - if (!VT4FR.RemoteDesign.support() && licNotSupport <= 0) { - licNotSupport++; - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - } - throw new EnvException(Inter.getLocText("Env-Invalid_User_and_Password")); - } - - return this.userID; + @Override + public String getUserID() { + return EnvContext.currentToken(); } /** @@ -248,15 +137,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - private void doWithTimeOutException() { - boolean isNotNeedTip = ComparatorUtils.equals(getThreadLocal(), "HEART_BEAT") || ComparatorUtils.equals(getThreadLocal(), "LOG_MESSAGE"); - if (!isReadTimeOut && !isNotNeedTip) { - isReadTimeOut = true; - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Data", "read_time_out"})); - isReadTimeOut = false; - } - FRContext.getLogger().info("Connection reset "); - } /** @@ -285,7 +165,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { result = CommonIOUtils.inputStream2String(in, EncodeConstants.ENCODING_UTF_8); } catch (UnsupportedEncodingException e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } return result; } @@ -324,126 +204,64 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl private boolean testConnection(boolean needMessage, boolean isRegisteServer, Component parentComponent) throws Exception { - refreshHttpSProperty(); - changeEnvPathFromExtra(); - - if (path.startsWith("https") && (!DesignerEnvManager.getEnvManager().isHttps())) { - return false; - } - - InputStream inputStream = RemoteEnvUtils.testConnection(true, this); - inputStream = filterInputStream(inputStream); - String res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); - - if (StringUtils.isEmpty(res)) { + checkArgument(parentComponent instanceof Component, "parentComponent should be a java.awt.component"); + Component component = parentComponent; + String url = String.format("%s/connection", EnvConstants.toDecisionPath(getPath())); + ImmutableMap params = ImmutableMap.of( + "version", (Object) ProductConstants.DESIGNER_VERSION + ); + ImmutableMap headers = ImmutableMap.of( + EnvConstants.USERNAME, getUser(), + EnvConstants.PWD, getPassword()); + String res = HttpToolbox.post(url, params, headers); + if (res == null) { if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText("Datasource-Connection_failed"), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE - ); + JOptionPane.showMessageDialog(component, Inter.getLocText("Datasource-Connection_failed")); } return false; } else if (ComparatorUtils.equals(res, "true")) { - if (!clock.connected && isRegisteServer) { - //服务器中断又重新启动之后,重新向远程服务器注册 - register2Server(); - } return true; - } else if (ComparatorUtils.equals(res, "invalid username or password.")) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText( - new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, - new String[]{",", "", "", "!"} - ), - Inter.getLocText("FR-Server-All_Error"), - JOptionPane.ERROR_MESSAGE); - return false; - } else if (res.contains("RegistEditionException")) { - if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText( - new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, - new String[]{",", "!"} - ), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE - ); - } else { - FRContext.getLogger().info( - Inter.getLocText( - new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, - new String[]{",", "!"} - ) - ); - } - return false; - } else if (ComparatorUtils.equals(res, "war not support remote design.")) { - if (needMessage) { - JOptionPane.showMessageDialog( - parentComponent, - Inter.getLocText( - new String[]{"Datasource-Connection_failed", "NS-war-remote"}, - new String[]{",", "!"} - ), - UIManager.getString("OptionPane.messageDialogTitle", parentComponent.getLocale()), - JOptionPane.ERROR_MESSAGE - ); + } else { + if (ComparatorUtils.equals(res, EnvConstants.AUTH_ERROR)) { + JOptionPane.showMessageDialog(component, + Inter.getLocText(new String[]{"Datasource-Connection_failed", "Registration-User_Name", "Password", "Error"}, new String[]{",", "", "", "!"}) + , Inter.getLocText("FR-Server-All_Error"), JOptionPane.ERROR_MESSAGE); + return false; } else { - FRContext.getLogger().info( - Inter.getLocText( - new String[]{"Datasource-Connection_failed", "NS-war-remote"}, - new String[]{",", "!"} - ) - ); + if (ComparatorUtils.equals(res, EnvConstants.WAR_ERROR)) { + if (needMessage) { + JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + } else { + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "NS-war-remote"}, new String[]{",", "!"})); + } + return false; + } else { + if (needMessage) { + JOptionPane.showMessageDialog(component, Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + } else { + FineLoggerFactory.getLogger().info(Inter.getLocText(new String[]{"Datasource-Connection_failed", "Version-does-not-support"}, new String[]{",", "!"})); + } + return false; + } } - return false; - } else { - throw new EnvException(res); } } - private void changeEnvPathFromExtra() { - //在env连接之前, 加载一下不依赖env的插件. 看看需不需要改变参数. - DesignerEnvProcessor processor - = ExtraDesignClassManager.getInstance().getSingle(DesignerEnvProcessor.XML_TAG); - if (processor != null) { - this.path = processor.changeEnvPathBeforeConnect(user, password, path); - } - } private void refreshHttpSProperty() { - if (path.startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { + if (getPath().startsWith(HTTPS_PREFIX) && System.getProperty(CERT_KEY) == null) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); System.setProperty(CERT_KEY, envManager.getCertificatePath()); System.setProperty(PWD_KEY, envManager.getCertificatePass()); } } - private void register2Server() { - try { - SignIn.signIn(this); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - } /** * 心跳访问,用来更新当前用户的访问时间 * * @throws Exception e */ - public void heartBeatConnection() throws Exception { - // 刷新参数 - refreshHttpSProperty(); - // 获取结果 - InputStream inputStream = RemoteEnvUtils.headBeatConnection(this); - // 处理结果 - filterInputStream(inputStream); - } /** * 返回描述该运行环境的名字 @@ -455,227 +273,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return Inter.getLocText("Env-Remote_Server"); } - /** - * 登录,返回userID - */ - @Override - public void signIn() throws Exception { - if (clock != null && clock.connected) { - return; - } - String remoteVersion = getDesignerVersion(); - if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { - throw new Exception("version not match"); - } - clearUserID(); - startLogTimer(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "r_sign_in"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - simulateRPC(para, true); - - //neil:调用Clock方法,10秒向服务器发送一个字节,确保没掉线 - if (clock == null) { - Clock clock = new Clock(this); - setClock(clock); - } - clock.start(); - - // 远程登录的心跳访问, 防止设计器强制关闭而没有Logout - if (timer != null) { - timer.cancel(); - } - timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - try { - RemoteEnv.this.setThreadLocal("HEART_BEAT"); - RemoteEnv.this.heartBeatConnection(); - } catch (Exception e) { - FRContext.getLogger().error("Server may be disconnected.", e); - } - } - }, RemoteDeziConstants.HEARTBEAT_DELAY, RemoteDeziConstants.HEARTBEAT_DELAY); - } - - - private void startLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - } - - logTimer = new Timer(); - logTimer.schedule(new TimerTask() { - @Override - public void run() { - try { - RemoteEnv.this.setThreadLocal("LOG_MESSAGE"); - FRContext.getCurrentEnv().printLogMessage(); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - } - } - }, 10000, 10000); - } - - private void stopLogTimer() { - if (logTimer != null) { - logTimer.cancel(); - logTimer = null; - } - } - - /** - * 根据userID sign out - * - * @return 成功签出返回true - * @throws Exception e - */ - @Override - public boolean signOut() throws Exception { - if (userID == null) { - return true; - } - stopLogTimer(); - // richer:登出的时候就把定时发送的时钟停掉 - clock.stop(); - // richer:把轮训使用的定时器也去掉 - timer.cancel(); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "r_sign_out"); - para.put("id", userID); - - return simulateRPC(para, false); - } - - protected boolean simulateRPC(HashMap para, boolean isSignIn) throws Exception { - refreshHttpSProperty(); - // execute method取到input stream再转成String - String result = null; - try { - result = stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, isSignIn, this))); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - if (result == null) { - return false; - } - if (result.contains("RegistEditionException")) { - JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Lic_does_not_Support_Remote")); - return false; - } - try { - JSONObject jo = new JSONObject(result); - if (isSignIn) { - if (jo.has("id")) { - userID = jo.getString("id"); - } - if (jo.has("isRoot")) { - isRoot = jo.getBoolean("isRoot"); - } - - if (userID != null) { - return true; - } - } else { - if (jo.has("res")) { - return jo.getBoolean("res"); - } - } - String exception = jo.getString("exp"); - if (exception != null) { - throw new EnvException(exception); - } - } catch (JSONException je) { - return true; - } - - return true; - } - - protected boolean doLockOperation(String[] filePaths, String cmd) throws Exception { - if (filePaths == null || filePaths.length == 0) { - return true; - } - - JSONArray ja = new JSONArray(filePaths); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", cmd); - para.put("pathes", ja.toString()); - - return simulateRPC(para, false); - } - - /** - * 取路径filePath下面文件的lock - *

- * 处于同一个原子操作,要么拿到所有的锁,要么一个锁也没有拿到 - */ - public boolean getLock(String[] filePathes) throws Exception { - return doLockOperation(filePathes, "design_get_lock"); - } - - /** - * 解锁文件 - * - * @param filePaths 文件路径 - * @return 成功解锁返回true - * @throws Exception e - */ - public boolean releaseLock(String[] filePaths) throws Exception { - return doLockOperation(filePaths, "design_release_lock"); - } - - /** - * 当前Env下,tplPath目录下是否存在模板 - * - * @param reportPath 路径 - * @return 是否存在 - */ - @Override - public boolean isTemplateExist(String reportPath) throws Exception { - refreshHttpSProperty(); - if (reportPath == null) { - return false; - } - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_report_exist"); - para.put("report_path", reportPath); - - InputStream input = filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, false, this)); - return ComparatorUtils.equals(stream2String(input), "true"); - } - - /** - * 解锁当前模板,用于远程设计。当远程设计某张模板 时,在解锁之前改模板处于锁定状态 - * - * @param tplPath 路径 - * @throws Exception e - */ - @Override - public void unlockTemplate(String tplPath) throws Exception { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_close_report"); - para.put(RemoteDeziConstants.TEMPLATE_PATH, tplPath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - String info = Utils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8); - - FRContext.getLogger().info(info); - } - public class Bytes2ServerOutputStream extends OutputStream { private ByteArrayOutputStream out = new ByteArrayOutputStream(); private HashMap nameValuePairs; @@ -705,7 +302,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { return postBytes2Server(out.toByteArray(), nameValuePairs); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); return false; } } @@ -733,33 +330,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - /** - * 测试数据连接是否能够正确的连接上 - * - * @param database 数据连接 - * @return 如果能正确的连接到数据库则返回true - * @throws Exception 无法正确连接到数据库则抛出此异常 - */ - @Override - public boolean testConnection(Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把database写成xml文件到out - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_test_con"); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - @Override public boolean updateAuthorities(DesignAuthority[] authorities) { refreshHttpSProperty(); @@ -769,7 +339,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl inputStream = filterInputStream(inputStream); res = IOUtils.inputStream2String(inputStream, EncodeConstants.ENCODING_UTF_8); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return StringUtils.isNotEmpty(res) && Boolean.valueOf(res); } @@ -784,265 +354,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl authorities = AuthorityXMLUtils.readDesignAuthoritiesXML(inputStream); return authorities; } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return authorities; } - /** - * ben:取schema - */ - @Override - public String[] getTableSchema(Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_schema"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - return DavXMLUtils.readXMLFileSchema(input); - } - - /** - * b:分别取Table,View,Procedure,实际应用时更有意义 - */ - @Override - public TableProcedure[] getTableProcedure(Connection database, String type, String schema) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_tables"); - para.put("__type__", type); - para.put("__dbschema__", schema); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new TableProcedure[0]; - } - return DavXMLUtils.readXMLSQLTables(input); - } - - @Override - public List getProcedures(Connection datasource, String[] schemas, boolean isOracle, boolean isOracleSysSpace) throws Exception { - Map schemaTableProcedureMap = new HashMap<>(); - List sqlTableList = new ArrayList<>(); - TableProcedure[] sqlTableObj; - int len = schemas.length; - if (len > 0) { - for (String schema : schemas) { - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, schema); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableList.add(sqlTableObj); - schemaTableProcedureMap.put(schema, sqlTableObj); - } - } else { - sqlTableObj = this.getTableProcedure(datasource, TableProcedure.PROCEDURE, null); - if (sqlTableObj == null) { - sqlTableObj = new TableProcedure[0]; - } - sqlTableList.add(sqlTableObj); - schemaTableProcedureMap.put(null, sqlTableObj); - } - DataCoreUtils.putProcedureMap(datasource, schemaTableProcedureMap); - return sqlTableList; - } - - /** - * 在当前路径下新建文件夹 - * - * @param folderPath 文件名 - * @return 成功创建返回true - * @throws Exception e - */ - @Override - public boolean createFolder(String folderPath) throws Exception { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_folder"); - para.put("folder_path", folderPath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 新建一个文件 - * - * @param filePath :目标文件相对路径 - * @return 成功新建返回true - * @throws Exception e - */ - @Override - public boolean createFile(String filePath) throws Exception { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_create_file"); - para.put("file_path", filePath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - @Override - public boolean renameFile(String newPath, String oldPath) throws Exception { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_rename_file"); - para.put("newPath", newPath); - para.put("oldPath", oldPath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否存在 - * - * @param filePath :目标文件相对路径 - * @return 文件是否存在 - * @throws Exception e - */ - @Override - public boolean fileExists(String filePath) throws Exception { - refreshHttpSProperty(); - if (filePath == null) { - return false; - } - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_exists"); - para.put("file_path", filePath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - /** - * 判断文件是否锁住 - * - * @param filePath 文件路径 - * @return 文件被锁住了,返回true - * @throws Exception e - */ - @Override - public boolean fileLocked(String filePath) throws Exception { - refreshHttpSProperty(); - if (filePath == null) { - return false; - } - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_file_locked"); - para.put("file_path", filePath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } - - - /** - * 注册环境,用于检测是否启动定时器,主要用于本地环境来监测远程 - * - * @param env 用户环境 - */ - @Override - public void registerUserEnv(UserBaseEnv env) { - } - - /** - * 用于检测用户环境 - * ,启动定时器 - */ - @Override - public void startUserCheckTimer() { - } - - - /** - * 停止定时器 - */ - public void stopUserCheckTimer() { - } - - /** - * 删除文件 - * - * @param filePath 文件地址 - * @return 删除成功返回true - */ - @Override - public boolean deleteFile(String filePath) { - refreshHttpSProperty(); - if (filePath == null) { - return false; - } - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "delete_file"); - para.put("file_path", filePath); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return false; - } - /** * 远程设计器设计时,假如开了权限就不可预览了。这边放一个全局的map来开后门 * @@ -1056,8 +372,8 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "write_privilege_map"); - para.put("current_user", this.user); - para.put("current_password", this.password); + para.put("current_user", getUser()); + para.put("current_password", getPassword()); para.put("key", key); para.put("value", value); @@ -1089,163 +405,27 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("currentPwd", this.getPassword()); InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - JSONArray ja = new JSONArray(stream2String(input)); - ArrayList toBeRemoveTDName = new ArrayList<>(); - for (int i = 0; i < ja.length(); i++) { - String toBeRemoveConnName = (String) ((JSONObject) ja.get(i)).get("name"); - ConnectionConfig.getInstance().removeConnection(toBeRemoveConnName); - Iterator it = dm.getTableDatas().keySet().iterator(); - while (it.hasNext()) { - String tdName = (String) it.next(); - TableData td = dm.getTableData(tdName); - td.registerNoPrivilege(toBeRemoveTDName, toBeRemoveConnName, tdName); - } - } - - for (int i = 0; i < toBeRemoveTDName.size(); i++) { - dm.removeTableData(toBeRemoveTDName.get(i)); - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - } - - /** - * 列出WEB-INF目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF目录下指定路径的文件夹与文件 - * @throws Exception e - */ - @Override - public FileNode[] listFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, false); - } - - /** - * 列出WEB-INF上层目录下指定路径的文件夹与文件 - * - * @param rootFilePath 指定目录 - * @return WEB-INF上层目录下指定路径的文件夹与文件 - * @throws Exception e - */ - @Override - public FileNode[] listReportPathFile(String rootFilePath) throws Exception { - return listFile(rootFilePath, true); - } - - private FileNode[] listFile(String rootFilePath, boolean isWebReport) throws Exception { - refreshHttpSProperty(); - InputStream inputStream = RemoteEnvUtils.listFile(rootFilePath, isWebReport, this); - inputStream = filterInputStream(inputStream); - return DavXMLUtils.readXMLFileNodes(inputStream); - } - - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @return 列出目标目录下所有cpt文件或文件夹 - */ - @Override - public FileNode[] listCpt(String rootFilePath) { - return listCpt(rootFilePath, false); - } - - /** - * 列出目标目录下所有cpt文件或文件夹 - * - * @param rootFilePath 指定目录 - * @param recurse 是否递归查找其子目录 - * @return 列出目标目录下所有cpt文件或文件夹 - * @throws Exception e - */ - @Override - public FileNode[] listCpt(String rootFilePath, boolean recurse) { - List fileNodeList = new ArrayList<>(); - try { - listAll(rootFilePath, fileNodeList, new String[]{"cpt"}, recurse); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - return fileNodeList.toArray(new FileNode[fileNodeList.size()]); - } - - private void listAll(String rootFilePath, List nodeList, String[] fileTypes, boolean recurse) throws Exception { - FileNode[] fns = listFile(rootFilePath); - for (FileNode fileNode : fns) { - if (isAcceptFileType(fileNode, fileTypes)) { - nodeList.add(fileNode); - } else if (fileNode.isDirectory()) { - if (recurse) { - listAll(rootFilePath + File.separator + fileNode.getName(), nodeList, fileTypes, true); - } else { - nodeList.add(fileNode); - } - } - } - } - - private boolean isAcceptFileType(FileNode fileNode, String[] fileTypes) { - for (String fileType : fileTypes) { - if (fileNode.isFileType(fileType)) { - return true; - } - } - return false; - } - - /** - * 获取指定数据集的参数 - * - * @param tableData 数据集 - * @return 数据集的参数 - * @throws Exception 获取参数失败则抛出此异常 - */ - @Override - public Parameter[] getTableDataParameters(TableData tableData) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - //把tableData写成xml文件到out - DavXMLUtils.writeXMLFileTableData(tableData, out); - - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_td_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return new Parameter[0]; - } - return DavXMLUtils.readXMLParameters(input); - } - - - /** - * 获取存储过程中的参数 - * - * @param storeProcedure 存储过程 - * @return 返回存储过程中的所有参数组成的数组 - * @throws Exception 如果获取参数失败则抛出此异常 - */ - @Override - public Parameter[] getStoreProcedureParameters(StoreProcedure storeProcedure) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_sp_pars"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); + RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) + ); + JSONArray ja = new JSONArray(stream2String(input)); + ArrayList toBeRemoveTDName = new ArrayList<>(); + for (int i = 0; i < ja.length(); i++) { + String toBeRemoveConnName = (String) ((JSONObject) ja.get(i)).get("name"); + ConnectionConfig.getInstance().removeConnection(toBeRemoveConnName); + Iterator it = dm.getTableDatas().keySet().iterator(); + while (it.hasNext()) { + String tdName = (String) it.next(); + TableData td = dm.getTableData(tdName); + td.registerNoPrivilege(toBeRemoveTDName, toBeRemoveConnName, tdName); + } + } - if (input == null) { - return new Parameter[0]; + for (int i = 0; i < toBeRemoveTDName.size(); i++) { + dm.removeTableData(toBeRemoveTDName.get(i)); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage()); } - return DavXMLUtils.readXMLParameters(input); } @Override @@ -1321,163 +501,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return filterInputStream(RemoteEnvUtils.simulateRPCByHttpPost(bytes, para, false, this)); } - /** - * Read XML.
- * The method will be invoked when read data from XML file.
- * May override the method to read the data that you saved. - */ - @Override - 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.user = tmpVal; - } - if ((tmpVal = reader.getAttrAsString("password", null)) != null) { - this.password = tmpVal; - } - } - } - } - - /** - * Write XML.
- * The method will be invoked when save data to XML file.
- * May override the method to save your own data. - * - * @param writer the PrintWriter. - */ - @Override - public void writeXML(XMLPrintWriter writer) { - writer.startTAG("DIR").attr("path", this.path).attr("user", this.user).attr("password", this.password).end(); - } - - - public static class Clock { - - private static final long CONNECT_INTERVAL = 3000L; - private boolean connected = false; - - private RemoteEnv remoteEnv; - - public Clock(RemoteEnv remoteEnv) { - this.remoteEnv = remoteEnv; - } - - /** - * 开始连接 - */ - public void start() { - if (connected) { - return; - } - connected = true; - - new Thread(new Runnable() { - @Override - public void run() { - // richie:连续三次尝试连接都没有响应才判定为丢失连接 - while (connected) { - try { - attemptConnect(); - } catch (Exception ex) { - try { - attemptConnect(); - } catch (Exception ee) { - try { - attemptConnect(); - } catch (Exception exc) { - stop(); - if (exc instanceof NoRouteToHostException) { - //网络问题导致的连接中断 - if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Connect2Server_Again"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) - == JOptionPane.OK_OPTION) { - //调用重新连接服务器的方法 - connectedAgain(); - } - } else { - //服务器关闭引起的连接中断 - if (JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Remote_Re_Connect_to_Server"), UIManager.getString("OptionPane.titleText"), JOptionPane.YES_NO_OPTION) - == JOptionPane.OK_OPTION) { - //调用重新连接服务器的方法 - connectedAgain(); - } - } - } - } - } - } - } - }).start(); - } - - /** - * 服务器连接中断后重新连接 - */ - private void connectedAgain() { - try { - if (!remoteEnv.testServerConnectionWithOutShowMessagePane()) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"Datasource-Connection_failed", "check_communication"}, - new String[]{",", "!"})); - DesignerFrameFileDealerPane.getInstance().refresh(); - return; - } - String remoteVersion = remoteEnv.getDesignerVersion(); - if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { - String infor = Inter.getLocText("FR-Server_Version_Tip"); - String moreInfo = Inter.getLocText("FR-Server_Version_Tip_MoreInfo"); - FRContext.getLogger().log(Level.WARNING, infor); - new InformationWarnPane(infor, moreInfo, Inter.getLocText("FR-Designer_Tooltips")).show(); - return; - } - SignIn.signIn(remoteEnv); - HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); - } catch (Exception em) { - FRContext.getLogger().error(em.getMessage(), em); - } - } - - /** - * 停止连接 - */ - public void stop() { - connected = false; - } - - private void attemptConnect() throws Exception { - Thread.sleep(CONNECT_INTERVAL); - Pattern pattern = Pattern.compile("[/:]+"); - String[] strs = pattern.split(remoteEnv.path); - - //host,如:192.168.100.195 - String shost = strs[1]; - //端口,如:8080 - int sport = Integer.parseInt(strs[2]); - - Socket socket = new Socket(shost, sport); - //OOBBINLINE:是否支持发送一个字节的TCP紧急数据,false表示服务器不用处理这个数据 - socket.setOOBInline(false); - socket.sendUrgentData(0xFF); - socket.close(); - } - } - - /** - * 读报表运行环境所需的配置文件,如datasource.xml, config.xml,这些文件都保存在WEB-INF/resources目录下面 - * - * @param resourceName 配置文件的名字,如datasource.xml - * @return 输入流 - * @throws Exception e - */ - @Override - public InputStream readResource(String resourceName) throws Exception { - return readBean(resourceName, ProjectConstants.RESOURCES_NAME); - } - /** * 读取路径下的svg文件 @@ -1496,7 +519,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "fr_remote_design"); para.put("cmd", "design_read_svgfile"); para.put("resourcePath", path); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); InputStream input = filterInputStream( @@ -1514,7 +537,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl fileArray.add(file); } } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return fileArray.toArray(new String[0]); @@ -1536,7 +559,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("op", "svgrelate"); para.put("cmd", "design_save_svg"); para.put("filePath", svgFile.getFilePath()); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); // 通过ByteArrayOutputStream将svg写成字节流 @@ -1550,11 +573,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl try { xformer.transform(source, result); } catch (TransformerException ex) { - FRContext.getLogger().error(ex.getMessage()); + FineLoggerFactory.getLogger().error(ex.getMessage()); } } catch (TransformerConfigurationException ex) { - FRContext.getLogger().error(ex.getMessage()); + FineLoggerFactory.getLogger().error(ex.getMessage()); return false; } @@ -1567,7 +590,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return false; } } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } @@ -1590,7 +613,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl para.put("cmd", "design_save_resource"); para.put("resource", mgr.fileName()); para.put("class_name", mgr.getClass().getName()); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); // alex:通过ByteArrayOutputStream将mgr写成字节流 @@ -1608,7 +631,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return false; } } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } @@ -1653,38 +676,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return new Bytes2ServerOutputStream(para); } - /** - * 返回数据库表的列名 - * - * @param selectedName 所选择数据库名 - * @param schema 数据库模式,用于存储过程 - * @param tableName 所选择数据库名 - */ - @Override - public String[] getColumns(String selectedName, String schema, String tableName) throws Exception { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_columns"); - para.put("dsName", selectedName); - para.put("schema", schema); - para.put("tableName", tableName); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - - if (input == null) { - return null; - } - - String columns = stream2String(input); - if (StringUtils.isEmpty(columns)) { - return null; - } - return columns.split("\\."); - } - /** * 返回模板文件路径 */ @@ -1693,98 +684,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return getPath().substring(0, getPath().lastIndexOf("/")); } - @Override - public String getProcedureText(String connectionName, String databaseName) throws Exception { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_procedure_text"); - para.put("procedure_name", databaseName); - para.put("connectionName", connectionName); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return StringUtils.EMPTY; - } - return DavXMLUtils.readXMLProcedureText(input); - } - - @Override - public StoreProcedureParameter[] getStoreProcedureDeclarationParameters(String connectionName, String databaseName, String parameterDefaultValue) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_sp_parameters"); - para.put("__name__", databaseName); - para.put("__default_value__", parameterDefaultValue); - para.put("connectionName", connectionName); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return new StoreProcedureParameter[0]; - } - return DavXMLUtils.readXMLStoreProcedureParameters(input); - } - - /** - * 获取datasource.xml文件的修改表 - */ - @Override - public ModifiedTable getDataSourceModifiedTables(String type) { - refreshHttpSProperty(); - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "get_datasource_modified_tables"); - para.put("type", type); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - if (input == null) { - return new ModifiedTable(); - } - return DavXMLUtils.readXMLModifiedTables(input); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new ModifiedTable(); - } - - - /** - * 写修改表 - * - * @param modifiedTable 修改表 - * @param type 操作类型,是数据连接还是服务器数据集 - * @return 写入成功返回true - */ - @Override - public boolean writeDataSourceModifiedTables(ModifiedTable modifiedTable, String type) { - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLModifiedTables(modifiedTable, out); - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "update_modifytable_to_server"); - para.put("type", type); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - - if (input == null) { - return false; - } - - return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return false; - } - public String[] getProcedureColumns(StoreProcedure storeProcedure, Map parameterMap) throws Exception { refreshHttpSProperty(); String[] columns; @@ -1803,7 +702,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl columns = DavXMLUtils.readXMLSPColumns(input); return columns; } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return new String[0]; @@ -1826,7 +725,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl columns = DavXMLUtils.readXMLSPColumns(input); return columns; } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return new String[0]; @@ -1851,102 +750,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl LogRecordTime[] records = LogUtils.readXMLLogRecords(input); } - @Override - public String getUserID() { - return userID; - } - - - /** - * 预览存储过程 - * - * @param storeProcedure 存储过程 - * @param parameterMap 参数map - * @param rowCount 行数 - * @return 返回取到的存储过程 - */ - @Override - public ProcedureDataModel[] previewProcedureDataModel(StoreProcedure storeProcedure, Map parameterMap, int rowCount) { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - - // 把tableData写成xml文件到out - DavXMLUtils.writeXMLFileStoreProcedureAndSource(storeProcedure, out); - - // 把parameterMap转成JSON格式的字符串 - JSONObject jo = new JSONObject(parameterMap); - String jsonParameter = jo.toString(); - - try { - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "list_sp"); - para.put("pars", jsonParameter); - - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return null; - } - - TableData[] tableDatas = DavXMLUtils.readXMLTableDataArray(input); - if (tableDatas == null || tableDatas.length == 0) { - return new ProcedureDataModel[0]; - } - ProcedureDataModel[] procedureDataModels = new ProcedureDataModel[tableDatas.length]; - for (int i = 0; i < tableDatas.length; i++) { - if (tableDatas[i] instanceof EmbeddedTableData) { - procedureDataModels[i] = ((EmbeddedTableData) tableDatas[i]).trans2ProcedureDataModel(); - } - } - return procedureDataModels; - - - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return new ProcedureDataModel[0]; - } - - - @Override - public String getAppName() { - return "WebReport"; - } - - /** - * 是否为Oracle数据连接 - * - * @param database 数据连接 - * @return 是返回true - * @throws Exception e - */ - @Override - public boolean isOracle(Connection database) throws Exception { - ByteArrayOutputStream out = new ByteArrayOutputStream(); - DavXMLUtils.writeXMLFileDatabaseConnection(database, out); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_isOracle"); - InputStream input = postBytes2ServerB(out.toByteArray(), para); - if (input == null) { - return true; - } - return DavXMLUtils.readXMLBoolean(input); - } - @Override public String[] getSupportedTypes() { return FILE_TYPE; } - /** - * 在模板面板中是否支持增加打开所在文件夹、重命名、删除三个工具栏选项 - * - * @return 不支持返回false - */ - @Override - public boolean isSupportLocalFileOperate() { - return false; - } /** * 判断是否有文件夹权限 @@ -1961,7 +769,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fs_remote_design"); para.put("cmd", "design_filefolder_allow"); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put(RemoteDeziConstants.TEMPLATE_PATH, path); InputStream input = filterInputStream( @@ -1973,49 +781,12 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } return Boolean.valueOf(IOUtils.inputStream2String(input, EncodeConstants.ENCODING_UTF_8)); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); return false; } } - /** - * 是否是管理员身份 - * - * @return 是则返回true - */ - @Override - public boolean isRoot() { - return isRoot; - } - - /** - * 是否为压缩包部署 - * - * @return 是则返回true - */ - @Override - public boolean isPackDeploy() { - return false; - } - - @Override - public String getDesignerVersion() { - refreshHttpSProperty(); - HashMap para = new HashMap<>(); - para.put("op", "fr_remote_design"); - para.put("cmd", "design_get_designer_version"); - para.put("user", user); - para.put("password", getEncodedPassword()); - - try { - return stream2String(filterInputStream(RemoteEnvUtils.simulateRPCByHttpGet(para, true, this))); - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); - } - return null; - } - @Override public InputStream getDataSourceInputStream(String filePath) throws Exception { return readBean(filePath, "datasource"); @@ -2041,20 +812,11 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl allRoleList.add(roleName); } } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } return allRoleList; } - @Override - public String getLicName() { - return License.FILE_NAME; - } - - @Override - public void setLicName(String licName) { - //do nth - } /** @@ -2135,7 +897,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_read_reufile"); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); //拿到服务端传过来的整个共享文件夹的压缩文件的文件流 @@ -2156,7 +918,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl }); } catch (Exception e) { - FRContext.getLogger().error(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage()); } finally { if (zipFilePath != null) { @@ -2181,7 +943,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_install_reufile"); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", reuFile.getName()); @@ -2218,7 +980,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_remove_reufile"); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); para.put("reuFileName", fileName); @@ -2238,7 +1000,7 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl HashMap para = new HashMap<>(); para.put("op", "fr_remote_design"); para.put("cmd", "design_get_share_path"); - para.put("current_uid", this.getValidUserID()); + para.put("current_uid", this.getUserID()); para.put("currentUsername", this.getUser()); InputStream input = filterInputStream( @@ -2250,16 +1012,6 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl } } - @Override - public void doWhenServerShutDown() { - - } - - @Override - public boolean isLocalEnv() { - - return false; - } @Override public boolean hasPluginServiceStarted(String key) { @@ -2267,22 +1019,4 @@ public class RemoteEnv extends AbstractEnv implements DesignAuthorityConfigurabl return true; } - @Override - public JSONArray getPluginStatus() { - refreshHttpSProperty(); - try { - HashMap para = new HashMap<>(); - para.put("op", "plugin"); - para.put("cmd", "get_status"); - para.put("current_uid", this.getValidUserID()); - para.put("currentUsername", this.getUser()); - - InputStream input = filterInputStream( - RemoteEnvUtils.simulateRPCByHttpGet(para, false, this) - ); - return new JSONArray(stream2String(input)); - } catch (Exception e) { - return JSONArray.create(); - } - } } \ No newline at end of file From 7fb2911df8e9ee17dee53888855c7131695e596c Mon Sep 17 00:00:00 2001 From: hzzz Date: Thu, 31 May 2018 19:34:21 +0800 Subject: [PATCH 28/29] fix --- .../design/actions/file/SwitchExistEnv.java | 60 ++++++++----------- .../loghandler/DesignerLogHandler.java | 5 ++ 2 files changed, 31 insertions(+), 34 deletions(-) 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 d58c6cc7f..278dfe5cc 100644 --- a/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java +++ b/designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java @@ -1,14 +1,13 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; -import com.fr.base.Env; -import com.fr.base.FRContext; -import com.fr.dav.LocalEnv; +import com.fr.base.env.resource.LocalEnvConfig; +import com.fr.base.env.resource.RemoteEnvConfig; +import com.fr.core.env.EnvConfig; 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.dialog.InformationWarnPane; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; @@ -18,21 +17,17 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; 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; import com.fr.log.FineLoggerFactory; import com.fr.stable.EnvChangedListener; -import com.fr.stable.ProductConstants; -import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.JOptionPane; import java.awt.event.ActionEvent; import java.util.HashMap; import java.util.Iterator; import java.util.Map; - public class SwitchExistEnv extends MenuDef { public SwitchExistEnv() { @@ -41,18 +36,20 @@ public class SwitchExistEnv extends MenuDef { this.setHasScrollSubMenu(true); initMenuDef(); JTemplate t = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if(t != null) { - GeneralContext.addEnvWillChangedListener(t.getFullPathName(), new EnvChangedListener() { - public void envChanged() { - SwitchExistEnv.this.clearShortCuts(); - initMenuDef(); - } - }); + if (t != null) { + GeneralContext.addEnvWillChangedListener( + t.getFullPathName(), + new EnvChangedListener() { + public void envChanged() { + SwitchExistEnv.this.clearShortCuts(); + initMenuDef(); + } + }); } } private void initMenuDef() { - //ButtonGroup group = new ButtonGroup(); + // ButtonGroup group = new ButtonGroup(); Iterator nameIt = DesignerEnvManager.getEnvManager().getEnvNameIterator(); while (nameIt.hasNext()) { String name = nameIt.next(); @@ -65,15 +62,14 @@ public class SwitchExistEnv extends MenuDef { public static class GetExistEnvAction extends UpdateAction implements ResponseDataSourceChange { public GetExistEnvAction() { - } public GetExistEnvAction(String envName) { this.setName(envName); - Env env = DesignerEnvManager.getEnvManager().getEnv(envName); - if (env instanceof LocalEnv) { + EnvConfig env = DesignerEnvManager.getEnvManager().getEnv(envName); + if (env instanceof LocalEnvConfig) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); - } else if (env instanceof RemoteEnv) { + } else if (env instanceof RemoteEnvConfig) { this.setSmallIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); } } @@ -101,28 +97,24 @@ public class SwitchExistEnv extends MenuDef { */ public void actionPerformed(ActionEvent e) { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); - Env selectedEnv = envManager.getEnv(this.getName()); + EnvConfig selectedEnv = envManager.getEnv(this.getName()); try { if (selectedEnv instanceof RemoteEnv && !((RemoteEnv) selectedEnv).testServerConnection()) { - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); - return; - } - String remoteVersion = selectedEnv.getDesignerVersion(); - 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"); - FineLoggerFactory.getLogger().error(infor); - new InformationWarnPane(infor, moreInfo, Inter.getLocText("Tooltips")).show(); + JOptionPane.showMessageDialog( + DesignerContext.getDesignerFrame(), + Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); return; } SignIn.signIn(selectedEnv); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea(); fireDSChanged(); } catch (Exception em) { - FRContext.getLogger().error(em.getMessage(), em); - JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); + FineLoggerFactory.getLogger().error(em.getMessage(), em); + JOptionPane.showMessageDialog( + DesignerContext.getDesignerFrame(), + Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); TemplatePane.getInstance().editItems(); } } } -} \ No newline at end of file +} diff --git a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java index ebc69aef5..846583538 100644 --- a/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java +++ b/designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java @@ -9,6 +9,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; +import com.fr.general.LogRecordTime; import com.fr.general.log.Log4jConfig; import com.fr.log.FineLoggerFactory; import com.fr.log.LogHandler; @@ -341,4 +342,8 @@ public class DesignerLogHandler { }; } + + public void printRemoteLog(LogRecordTime logRecordTime) { + logHandlerArea.printStackTrace(logRecordTime); + } } \ No newline at end of file From eeff4a204ad7f758de7fa2a153052e003cb46b1e Mon Sep 17 00:00:00 2001 From: neil <459208047@qq.com> Date: Fri, 1 Jun 2018 11:09:35 +0800 Subject: [PATCH 29/29] =?UTF-8?q?REPORT-8484=20&=20REPORT-8476=20=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=E5=99=A8=E6=9C=89=E5=87=A0=E7=8E=87=E5=90=AF=E5=8A=A8?= =?UTF-8?q?404.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer-base/src/com/fr/start/StartServer.java | 13 ++++++++----- designer-realize/src/com/fr/start/Designer.java | 7 +++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/designer-base/src/com/fr/start/StartServer.java b/designer-base/src/com/fr/start/StartServer.java index 828547fd4..7ab65e549 100644 --- a/designer-base/src/com/fr/start/StartServer.java +++ b/designer-base/src/com/fr/start/StartServer.java @@ -23,8 +23,11 @@ import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.start.server.TomcatHost; -import javax.swing.*; -import java.awt.*; +import javax.swing.BorderFactory; +import javax.swing.JOptionPane; +import java.awt.BorderLayout; +import java.awt.Desktop; +import java.awt.Font; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -121,9 +124,9 @@ public class StartServer { tomcatHost.addAndStartLocalEnvHomeWebApp(); } - } - if (!tomcatHost.isStarted()) { - tomcatHost.start(); + if (!tomcatHost.isStarted()) { + tomcatHost.start(); + } } } catch (InterruptedException e) { FineLoggerFactory.getLogger().error(e.getMessage()); diff --git a/designer-realize/src/com/fr/start/Designer.java b/designer-realize/src/com/fr/start/Designer.java index 7ee3e6f35..ae382d2fa 100644 --- a/designer-realize/src/com/fr/start/Designer.java +++ b/designer-realize/src/com/fr/start/Designer.java @@ -3,6 +3,7 @@ package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.Env; import com.fr.base.FRContext; +import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; @@ -89,8 +90,10 @@ public class Designer extends BaseDesigner { //传递启动参数 designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); designerRoot.start(); - // 预启动一下 - StartServer.start(); + if (FRContext.getCurrentEnv() instanceof LocalEnv) { + // 预启动一下 + StartServer.start(); + } } public Designer(String[] args) {