Browse Source

env..

master
hzzz 7 years ago
parent
commit
d247e8b74a
  1. 37
      designer-base/src/com/fr/design/DesignerEnvManager.java
  2. 11
      designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java
  3. 2
      designer-base/src/com/fr/design/file/HistoryTemplateListPane.java
  4. 10
      designer-base/src/com/fr/design/file/TemplateTreePane.java
  5. 113
      designer-base/src/com/fr/design/mainframe/DesignerFrame.java
  6. 42
      designer-base/src/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
  7. 684
      designer-base/src/com/fr/design/mainframe/TemplatePane.java
  8. 23
      designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java
  9. 53
      designer-base/src/com/fr/design/utils/DesignUtils.java
  10. 522
      designer-base/src/com/fr/env/EnvListPane.java
  11. 462
      designer-base/src/com/fr/env/RemoteEnv.java

37
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 int MAX_SHOW_NUM = 10;
private static final String VERSION_80 = "80"; private static final String VERSION_80 = "80";
private static final int CACHINGTEMPLATE_LIMIT = 5;
private static DesignerEnvManager designerEnvManager; // gui. private static DesignerEnvManager designerEnvManager; // gui.
private String activationKey = null; private String activationKey = null;
@ -99,6 +100,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
private int language; private int language;
//2014-8-26默认显示全部, 因为以前的版本, 虽然是false, 实际上是显示所有表, 因此这边要兼容 //2014-8-26默认显示全部, 因为以前的版本, 虽然是false, 实际上是显示所有表, 因此这边要兼容
private boolean useOracleSystemSpace = true; private boolean useOracleSystemSpace = true;
private int cachingTemplateLimit = CACHINGTEMPLATE_LIMIT;
private boolean autoBackUp = true; private boolean autoBackUp = true;
private int undoLimit = 5; private int undoLimit = 5;
private short pageLengthUnit = Constants.UNIT_MM; private short pageLengthUnit = Constants.UNIT_MM;
@ -146,6 +148,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
private boolean isHttps = false; private boolean isHttps = false;
private static List<SwingWorker> mapWorkerList = new ArrayList<SwingWorker>(); private static List<SwingWorker> mapWorkerList = new ArrayList<SwingWorker>();
private boolean imageCompress = false;//图片压缩
/** /**
* DesignerEnvManager. * DesignerEnvManager.
@ -244,7 +247,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
// 写文件的LogLocation // 写文件的LogLocation
String logLocation = DesignerEnvManager.getEnvManager().getLogLocation(); String logLocation = DesignerEnvManager.getEnvManager().getLogLocation();
if (logLocation != null) { //Mac下8.0,9.0 选项-日志设置为空时在根目录下检测文件存在会抛无权限,这里应该设个默认值比较好吧
if (StringUtils.isNotEmpty(logLocation)) {
try { try {
Calendar calender = GregorianCalendar.getInstance(); Calendar calender = GregorianCalendar.getInstance();
calender.setTimeInMillis(System.currentTimeMillis()); calender.setTimeInMillis(System.currentTimeMillis());
@ -631,6 +635,21 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
this.useOracleSystemSpace = displayOracleSystem; 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.setMaxNumberOrPreviewRow(reader.getAttrAsInt("maxNumberOrPreviewRow", 200));
this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true)); this.setOracleSystemSpace(reader.getAttrAsBoolean("useOracleSystemSpace", true));
this.setCachingTemplateLimit(reader.getAttrAsInt("cachingTemplateLimit", CACHINGTEMPLATE_LIMIT));
this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true)); this.setJoinProductImprove(reader.getAttrAsBoolean("joinProductImprove", true));
this.setImageCompress(reader.getAttrAsBoolean("imageCompress", true));
this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true)); this.setAutoBackUp(reader.getAttrAsBoolean("autoBackUp", true));
this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false)); this.setTemplateTreePaneExpanded(reader.getAttrAsBoolean("templateTreePaneExpanded", false));
// peter:读取webinfLocation // peter:读取webinfLocation
@ -1614,9 +1635,15 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
if (!this.isOracleSystemSpace()) { if (!this.isOracleSystemSpace()) {
writer.attr("useOracleSystemSpace", this.isOracleSystemSpace()); writer.attr("useOracleSystemSpace", this.isOracleSystemSpace());
} }
if (this.getCachingTemplateLimit() >= 0) {
writer.attr("cachingTemplateLimit", this.getCachingTemplateLimit());
}
if (!this.isJoinProductImprove()) { if (!this.isJoinProductImprove()) {
writer.attr("joinProductImprove", this.isJoinProductImprove()); writer.attr("joinProductImprove", this.isJoinProductImprove());
} }
if (!this.isImageCompress()) {
writer.attr("imageCompress", this.isImageCompress());
}
if (!this.isAutoBackUp()) { if (!this.isAutoBackUp()) {
writer.attr("autoBackUp", this.isAutoBackUp()); writer.attr("autoBackUp", this.isAutoBackUp());
} }
@ -1790,4 +1817,12 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
public void setAlphaFineConfigManager(AlphaFineConfigManager alphaFineConfigManager) { public void setAlphaFineConfigManager(AlphaFineConfigManager alphaFineConfigManager) {
this.alphaFineConfigManager = alphaFineConfigManager; this.alphaFineConfigManager = alphaFineConfigManager;
} }
public boolean isImageCompress() {
return imageCompress;
}
public void setImageCompress(boolean imageCompress) {
this.imageCompress = imageCompress;
}
} }

11
designer-base/src/com/fr/design/actions/file/SwitchExistEnv.java

@ -36,6 +36,9 @@ import java.util.logging.Level;
public class SwitchExistEnv extends MenuDef { public class SwitchExistEnv extends MenuDef {
// 标志开始切换环境
private static boolean isSwitching = false;
public SwitchExistEnv() { public SwitchExistEnv() {
this.setMenuKeySet(KeySetUtils.SWITCH_ENV); this.setMenuKeySet(KeySetUtils.SWITCH_ENV);
this.setName(getMenuKeySet().getMenuName()); this.setName(getMenuKeySet().getMenuName());
@ -101,6 +104,7 @@ public class SwitchExistEnv extends MenuDef {
* @param e 事件 * @param e 事件
*/ */
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
isSwitching = true;
DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); DesignerEnvManager envManager = DesignerEnvManager.getEnvManager();
Env selectedEnv = envManager.getEnv(this.getName()); Env selectedEnv = envManager.getEnv(this.getName());
try { try {
@ -117,13 +121,18 @@ public class SwitchExistEnv extends MenuDef {
return; return;
} }
SignIn.signIn(selectedEnv); SignIn.signIn(selectedEnv);
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshToolArea();
fireDSChanged(); fireDSChanged();
} catch (Exception em) { } catch (Exception em) {
FRContext.getLogger().error(em.getMessage(), em); FRContext.getLogger().error(em.getMessage(), em);
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"}));
TemplatePane.getInstance().editItems(); TemplatePane.getInstance().editItems();
} finally {
isSwitching = false;
}
} }
} }
public static boolean isSwitching() {
return isSwitching;
} }
} }

2
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 { public class HistoryTemplateListPane extends JPanel implements FileOperations, CallbackEvent {
//最大保存内存中面板数,为0时关闭优化内存 //最大保存内存中面板数,为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 static final int LIST_BORDER = 4;
private List<JTemplate<?, ?>> historyList; private List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate; private JTemplate<?, ?> editingTemplate;

10
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.*;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*; import java.awt.*;
import java.awt.event.KeyEvent; import java.awt.event.*;
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.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -143,7 +139,7 @@ public class TemplateTreePane extends JPanel implements FileOperations {
public void openContainerFolder() { public void openContainerFolder() {
FileNode fn = TemplateTreePane.this.reportletsTree.getSelectedFileNode(); FileNode fn = TemplateTreePane.this.reportletsTree.getSelectedFileNode();
LocalEnv localEnv = (LocalEnv) FRContext.getCurrentEnv(); 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)); filePath = filePath.substring(0, filePath.lastIndexOf(CoreConstants.SEPARATOR));
try { try {
Desktop.getDesktop().open(new File(filePath)); Desktop.getDesktop().open(new File(filePath));
@ -319,8 +315,6 @@ public class TemplateTreePane extends JPanel implements FileOperations {
if (fileUtils.hasTrash()) { if (fileUtils.hasTrash()) {
try { try {
fileUtils.moveToTrash(new File[]{new File(StableUtils.pathJoin(nodeFile.getEnvPath(), nodeFile.getPath()))}); fileUtils.moveToTrash(new File[]{new File(StableUtils.pathJoin(nodeFile.getEnvPath(), nodeFile.getPath()))});
//todo 走下这个流程,否则集群下其它节点无法同步删除
FRContext.getCurrentEnv().deleteFile(nodeFile.getPath());
} catch (IOException e) { } catch (IOException e) {
FRLogger.getLogger().info(e.getMessage()); FRLogger.getLogger().info(e.getMessage());
FRContext.getCurrentEnv().deleteFile(nodeFile.getPath()); FRContext.getCurrentEnv().deleteFile(nodeFile.getPath());

113
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.BaseUtils;
import com.fr.base.Env; import com.fr.base.Env;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignState; import com.fr.design.DesignState;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager; 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.constants.UIConstants;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.event.DesignerOpenedListener;
import com.fr.design.event.TargetModifiedEvent; import com.fr.design.event.TargetModifiedEvent;
import com.fr.design.event.TargetModifiedListener; 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.TitlePlaceProcessor;
import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.imenu.UIMenuHighLight; import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.design.gui.iscrollbar.UIScrollBar; 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.ToolBarMenuDock;
import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus;
import com.fr.design.menu.MenuManager; import com.fr.design.menu.MenuManager;
import com.fr.design.menu.ShortCut;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.gui.GUICoreUtils; import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.file.FILE; import com.fr.file.FILE;
@ -54,14 +64,27 @@ import javax.swing.border.MatteBorder;
import java.awt.*; import java.awt.*;
import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable; import java.awt.datatransfer.Transferable;
import java.awt.dnd.*; import java.awt.dnd.DnDConstants;
import java.awt.event.*; 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.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.logging.Level; import java.util.logging.Level;
public class DesignerFrame extends JFrame implements JTemplateActionListener, TargetModifiedListener { 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 final Integer TOP_LAYER = new Integer((200));
private static java.util.List<App<?>> appList = new java.util.ArrayList<App<?>>(); private static java.util.List<App<?>> appList = new java.util.ArrayList<App<?>>();
private ToolBarMenuDock ad; private List<DesignerOpenedListener> designerOpenedListenerList = new ArrayList<>();
//顶部日志+登陆按钮
private static final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
private static ToolBarMenuDock ad;
private DesktopCardPane centerTemplateCardPane; private DesktopCardPane centerTemplateCardPane;
@ -158,8 +186,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
} }
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
if (BaseUtils.isAuthorityEditing()) { if (DesignerMode.isAuthorityEditing()) {
BaseUtils.setAuthorityEditing(false); DesignerMode.setMode(DesignerMode.NORMARL);
WestRegionContainerPane.getInstance().replaceDownPane( WestRegionContainerPane.getInstance().replaceDownPane(
TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter())); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()));
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane(); HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane();
@ -235,7 +263,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
this.addComponentListener(new ComponentAdapter() { this.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
reCalculateFrameSize(); reCalculateFrameSize();
if (BaseUtils.isAuthorityEditing()) { if (DesignerMode.isAuthorityEditing()) {
doResize(); 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() { protected DesktopCardPane getCenterTemplateCardPane() {
return centerTemplateCardPane; return centerTemplateCardPane;
} }
@ -276,41 +320,39 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
protected void initMenuPane() { protected void initMenuPane() {
menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH); menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
menuPane.add(initNorthEastPane(ad), BorderLayout.EAST); menuPane.add(initNorthEastPane(), BorderLayout.EAST);
basePane.add(menuPane, BorderLayout.NORTH); basePane.add(menuPane, BorderLayout.NORTH);
this.resetToolkitByPlus(null); this.resetToolkitByPlus(null);
} }
/** /**
* @param ad
* @return * @return
*/ */
protected JPanel initNorthEastPane(final ToolBarMenuDock ad) { protected JPanel initNorthEastPane() {
//hugh: private修改为protected方便oem的时候修改右上的组件构成 //hugh: private修改为protected方便oem的时候修改右上的组件构成
//顶部日志+登陆按钮
final JPanel northEastPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
//优先级为-1,保证最后全面刷新一次 //优先级为-1,保证最后全面刷新一次
GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) { GeneralContext.listenPluginRunningChanged(new PluginEventListener(-1) {
@Override @Override
public void on(PluginEvent event) { public void on(PluginEvent event) {
refreshNorthEastPane(northEastPane, ad); refreshNorthEastPane();
DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv()); DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv());
} }
}, new PluginFilter() { }, new PluginFilter() {
@Override @Override
public boolean accept(PluginContext context) { public boolean accept(PluginContext context) {
return !SwitchExistEnv.isSwitching()
return context.contain(PluginModule.ExtraDesign); && context.contain(PluginModule.ExtraDesign);
} }
}); });
refreshNorthEastPane(northEastPane, ad); refreshNorthEastPane();
return northEastPane; return northEastPane;
} }
private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { public static void refreshNorthEastPane() {
northEastPane.removeAll(); northEastPane.removeAll();
northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0)); northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
northEastPane.add(LogMessageBar.getInstance()); northEastPane.add(LogMessageBar.getInstance());
@ -415,7 +457,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
* 刷新 * 刷新
*/ */
public void refreshDottedLine() { public void refreshDottedLine() {
if (BaseUtils.isAuthorityEditing()) { if (DesignerMode.isAuthorityEditing()) {
populateAuthorityArea(); populateAuthorityArea();
populateCloseButton(); populateCloseButton();
addDottedLine(); addDottedLine();
@ -474,7 +516,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
for (int i = 0; i < fixButtons.length; i++) { for (int i = 0; i < fixButtons.length; i++) {
combineUp.add(fixButtons[i]); combineUp.add(fixButtons[i]);
} }
if (!BaseUtils.isAuthorityEditing()) { if (!DesignerMode.isAuthorityEditing()) {
combineUp.addSeparator(new Dimension(2, 16)); combineUp.addSeparator(new Dimension(2, 16));
if (toolbar4Form != null) { if (toolbar4Form != null) {
for (int i = 0; i < toolbar4Form.length; i++) { for (int i = 0; i < toolbar4Form.length; i++) {
@ -585,7 +627,16 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/ */
public void needToAddAuhtorityPaint() { public void needToAddAuhtorityPaint() {
newWorkBookPane.setButtonGray(BaseUtils.isAuthorityEditing()); newWorkBookPane.setButtonGray(DesignerMode.isAuthorityEditing());
// 进入或退出权限编辑模式,通知插件
Set<ShortCut> 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 环境 * @param env 环境
*/ */
public void refreshEnv(Env env) { public void refreshEnv(Env env) {
this.setTitle(); this.setTitle();
DesignerFrameFileDealerPane.getInstance().refreshDockingView(); DesignerFrameFileDealerPane.getInstance().refreshDockingView();
TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter());
TemplateTreePane.getInstance().refreshDockingView(); TemplateTreePane.getInstance().refreshDockingView();
DesignTableDataManager.clearGlobalDs(); DesignTableDataManager.clearGlobalDs();
EastRegionContainerPane.getInstance().refreshDownPane(); 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 添加的模板. * @param jt 添加的模板.
*/ */
public void addAndActivateJTemplate(JTemplate<?, ?> jt) { public void addAndActivateJTemplate(JTemplate<?, ?> jt) {
//释放模板对象
ActionFactory.editorRelease();
if (jt == null || jt.getEditingFILE() == null) { if (jt == null || jt.getEditingFILE() == null) {
return; return;
} }
@ -750,6 +806,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
* @param jt 模板 * @param jt 模板
*/ */
public void activateJTemplate(JTemplate<?, ?> jt) { public void activateJTemplate(JTemplate<?, ?> jt) {
//释放模板对象
ActionFactory.editorRelease();
if (jt == null || jt.getEditingFILE() == null) { if (jt == null || jt.getEditingFILE() == null) {
return; return;
} }
@ -855,13 +913,16 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
String fileExtention = fileName.substring(indexOfLastDot + 1); String fileExtention = fileName.substring(indexOfLastDot + 1);
for (int i = 0, len = appList.size(); i < len; i++) { for (int i = 0, len = appList.size(); i < len; i++) {
App<?> app = appList.get(i); App<?> app = appList.get(i);
String[] defaultAppExtentions = app.defaultExtensions(); String[] defaultAppExtentions = app.defaultExtentions();
boolean opened = false; boolean opened = false;
for (int j = 0; j < defaultAppExtentions.length; j++) { for (int j = 0; j < defaultAppExtentions.length; j++) {
if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) {
// 不要catch JTemplate jt = null;
JTemplate jt = app.openTemplate(tplFile); try {
jt = app.openTemplate(tplFile);
} catch (Exception e) {
FRLogger.getLogger().error(e.getMessage(), e);
}
if (jt == null) { if (jt == null) {
return; return;
} }
@ -908,8 +969,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
} else { } else {
this.addAndActivateJTemplate(jt); this.addAndActivateJTemplate(jt);
} }
//REPORT-5084:激活后刷新一下右側面板
jt.refreshEastPropertiesPane();
} }
/** /**

42
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.BaseUtils;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.ExtraDesignClassManager; 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.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.data.tabledata.ResponseDataSourceChange; 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.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.imenu.UIMenuHighLight; 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.file.filetree.FileNode;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.io.utils.ResourceIOUtils;
import com.fr.stable.CoreConstants; import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
@ -42,6 +46,7 @@ import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -52,6 +57,11 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
private CardLayout card; private CardLayout card;
private JPanel cardPane; private JPanel cardPane;
private java.util.List<FileToolbarStateChangeListener> otherToobarStateChangeListeners= new ArrayList<>();
public FileOperations getSelectedOperation() {
return selectedOperation;
}
private FileOperations selectedOperation; private FileOperations selectedOperation;
private UIToolbar toolBar; private UIToolbar toolBar;
@ -110,7 +120,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt); HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt);
//处理自动新建的模板 //处理自动新建的模板
MutilTempalteTabPane.getInstance().doWithtemTemplate(); MutilTempalteTabPane.getInstance().doWithtemTemplate();
if (BaseUtils.isAuthorityEditing()) { if (DesignerMode.isAuthorityEditing()) {
RolesAlreadyEditedPane.getInstance().refreshDockingView(); RolesAlreadyEditedPane.getInstance().refreshDockingView();
} }
@ -161,6 +171,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
/** /**
* 响应数据集改变 * 响应数据集改变
*
* @param map 改变名字的数据集 * @param map 改变名字的数据集
*/ */
public void fireDSChanged(Map<String, String> map) { public void fireDSChanged(Map<String, String> map) {
@ -212,6 +223,21 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) {
selectedOperation.refresh(); selectedOperation.refresh();
stateChange(); 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();
} }
} }
@ -329,6 +355,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
delFileAction.setEnabled(true); delFileAction.setEnabled(true);
} }
otherStateChange();
} }
/** /**
@ -383,8 +410,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
return; return;
} }
final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, reportPath), false)); final FileNodeFILE nodeFile = new FileNodeFILE(new FileNode(StableUtils.pathJoin(new String[]{ProjectConstants.REPORTLETS_NAME, reportPath}), false));
final String path = nodeFile.getPath(); final String path = StableUtils.pathJoin(new String[]{nodeFile.getEnvPath(), nodeFile.getPath()});
oldName = nodeFile.getName(); oldName = nodeFile.getName();
suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length()); suffix = oldName.substring(oldName.lastIndexOf(CoreConstants.DOT), oldName.length());
oldName = oldName.replaceAll(suffix, ""); oldName = oldName.replaceAll(suffix, "");
@ -477,9 +504,8 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
String newPath = path.replace(nodeFile.getName(), userInput + suffix); String newPath = path.replace(nodeFile.getName(), userInput + suffix);
renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix); renameTemplateInMemory(nodeFile, userInput + suffix, oldName + suffix);
DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\")); DesignerEnvManager.getEnvManager().replaceRecentOpenedFilePath(oldPath, newPath.replaceAll("/", "\\\\"));
File newFile = new File(newPath);
//模版重命名 new File(path).renameTo(newFile);
ResourceIOUtils.renameTo(path, newPath);
selectedOperation.refresh(); selectedOperation.refresh();
DesignerContext.getDesignerFrame().setTitle(); DesignerContext.getDesignerFrame().setTitle();
jd.dispose(); jd.dispose();

684
designer-base/src/com/fr/design/mainframe/TemplatePane.java

@ -1,278 +1,598 @@
package com.fr.design.mainframe; package com.fr.design.mainframe;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.Env; import com.fr.base.FRContext;
import com.fr.dav.LocalEnv; import com.fr.base.vcs.DesignerMode;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.BasicDialog; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.actions.UpdateAction;
import com.fr.design.dialog.InformationWarnPane; 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.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.TemplateTreePane; import com.fr.design.file.TemplateTreePane;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.env.EnvListPane; import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.env.RemoteEnv; import com.fr.design.gui.itextfield.UITextField;
import com.fr.env.SignIn; 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.ComparatorUtils;
import com.fr.general.GeneralContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.stable.EnvChangedListener; import com.fr.stable.CoreConstants;
import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.MouseEvent; import java.awt.event.KeyAdapter;
import java.awt.event.MouseListener; 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 DesignerFrameFileDealerPane extends JPanel implements FileToolbarStateChangeListener, ResponseDataSourceChange {
public class TemplatePane extends JPanel implements MouseListener { private static final String FILE = "file";
private static final long NUM = 1L; private static DesignerFrameFileDealerPane THIS;
private static int NUM200 = 200;
public static TemplatePane getInstance() { private CardLayout card;
return HOLDER.singleton; private JPanel cardPane;
} private java.util.List<FileToolbarStateChangeListener> otherToobarStateChangeListeners= new ArrayList<>();
private static class HOLDER { public FileOperations getSelectedOperation() {
private static TemplatePane singleton = new TemplatePane(); return selectedOperation;
} }
private static final long serialVersionUID = 2108412478281713143L; private FileOperations selectedOperation;
public static final int HEIGHT = 23;// 最好和日志的高度统一 用同一个变量 private UIToolbar toolBar;
private static javax.swing.Icon leftIcon = BaseUtils.readIcon("/com/fr/design/images/docking/left.png");
; private OpenReportAction openReportAction = new OpenReportAction();
private static javax.swing.Icon rightIcon = BaseUtils.readIcon("/com/fr/design/images/docking/right.png"); private RefreshTreeAction refreshTreeAction = new RefreshTreeAction();
; private OpenFolderAction openFolderAction = new OpenFolderAction();
private boolean isExpanded = false; private RenameAction renameAction = new RenameAction();
private UIButton editButton; private DelFileAction delFileAction = new DelFileAction();
private UILabel envLabel;
private TemplatePane() { /**
super(); * 刷新
this.initComponents(); */
this.setFocusable(true); public void refresh() {
this.addMouseListener(this); selectedOperation.refresh();
isExpanded = DesignerEnvManager.getEnvManager().isTemplateTreePaneExpanded();
// TemplateTreePane.getInstance().setVisible(isExpanded);
TemplateTreePane.getInstance().setVisible(true);
} }
private void initComponents() { public static final DesignerFrameFileDealerPane getInstance() {
GeneralContext.addEnvChangedListener(new EnvChangedListener() { if (THIS == null) {
public void envChanged() { THIS = new DesignerFrameFileDealerPane();
setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); }
return THIS;
} }
});
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 private DesignerFrameFileDealerPane() {
public Point getToolTipLocation(MouseEvent event) { setLayout(new BorderLayout());
return new Point(25, 2); 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();
} }
};
editButton.setOpaque(false);
editButton.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 10)); public final void setCurrentEditingTemplate(JTemplate<?, ?> jt) {
editButton.setMargin(null); DesignModelAdapter.setCurrentModelAdapter(jt == null ? null : jt.getModel());
editButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); fireDSChanged();
editButton.setToolTipText(Inter.getLocText("Env-Configure_Workspace")); TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter());
this.add(new UILabel(" "), BorderLayout.WEST); HistoryTemplateListPane.getInstance().setCurrentEditingTemplate(jt);
this.add(editButton, BorderLayout.EAST); //处理自动新建的模板
editButton.addActionListener(new ActionListener() { MutilTempalteTabPane.getInstance().doWithtemTemplate();
public void actionPerformed(ActionEvent evt) { if (DesignerMode.isAuthorityEditing()) {
editItems(); RolesAlreadyEditedPane.getInstance().refreshDockingView();
} }
});
envLabel = new UILabel(); jt.setComposite();
envLabel.setForeground(new Color(102, 102, 102)); jt.refreshToolArea();
setJLabel(DesignerEnvManager.getEnvManager().getCurEnvName()); jt.fireJTemplateOpened();
this.add(envLabel, BorderLayout.CENTER); jt.requestFocus();
jt.revert();
FRContext.getLogger().info("\"" + jt.getEditingFILE().getName() + "\"" + Inter.getLocText("LOG-Has_Been_Openned") + "!");
} }
/** /**
* 是否可扩展 * 刷新菜单
* @return 同上
*/ */
public boolean IsExpanded() { public void refreshDockingView() {
return this.isExpanded; ToolBarDef toolbarDef = new ToolBarDef();
toolbarDef.addShortCut(openReportAction, refreshTreeAction);
if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) {
toolbarDef.addShortCut(openFolderAction, renameAction);
}
toolbarDef.addShortCut(delFileAction);
Set<ShortCut> 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(); this.repaint();
} }
private boolean envListOkAction(EnvListPane envListPane) { /**
String selectedName = envListPane.updateEnvManager(); * 响应数据集改变
DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); */
Env selectedEnv = envManager.getEnv(selectedName); public void fireDSChanged() {
GeneralContext.fireEnvWillChangeListener(); fireDSChanged(new HashMap<String, String>());
try { }
//如果是远程的还要先测试下,如果失败就不切换
if (selectedEnv instanceof RemoteEnv) { /**
if (!((RemoteEnv) selectedEnv).testServerConnection()) { * 响应数据集改变
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"})); *
return false; * @param map 改变名字的数据集
} else { */
String remoteVersion = selectedEnv.getDesignerVersion(); public void fireDSChanged(Map<String, String> map) {
if (StringUtils.isBlank(remoteVersion) || ComparatorUtils.compare(remoteVersion, ProductConstants.DESIGNER_VERSION) < 0) { DesignTableDataManager.fireDSChanged(map);
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;
} }
/*
* 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();
} }
SignIn.signIn(selectedEnv);
JTemplate template = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate();
if (template != null) {
template.refreshToolArea();
} }
setJLabel(selectedName);
} catch (Exception e) { private class OpenFolderAction extends UpdateAction {
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Inter.getLocText(new String[]{"M-SwitchWorkspace", "Failed"}));
return false; 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"));
} }
TemplateTreePane.getInstance().refreshDockingView();
DesignModelAdapter<?, ?> model = DesignModelAdapter.getCurrentModelAdapter(); @Override
if (model != null) { public void actionPerformed(ActionEvent evt) {
model.envChanged(); selectedOperation.openContainerFolder();
} }
return true;
} }
/** /*
* 编辑items * 刷新ReportletsTree
*/ */
public void editItems() { private class RefreshTreeAction extends UpdateAction {
final EnvListPane envListPane = new EnvListPane();
final BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame()));
envListPane.populateEnvManager(envLabel.getText()); public RefreshTreeAction() {
envListDialog.addDialogActionListener(new DialogActionAdapter() { this.setName(Inter.getLocText("FR-Designer_Refresh"));
public void doOk() { this.setSmallIcon(UIConstants.REFRESH_ICON);
envListOkAction(envListPane);
} }
public void doCancel() { @Override
envListDialog.setVisible(false); public void actionPerformed(ActionEvent evt) {
selectedOperation.refresh();
stateChange();
} }
});
envListDialog.setVisible(true);
} }
private void setJLabel(String name) { public void addToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) {
if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof LocalEnv) { this.otherToobarStateChangeListeners.add(toobarStateChangeListener);
envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/localconnect.png")); }
} else if (DesignerEnvManager.getEnvManager().getEnv(name) instanceof RemoteEnv) { public void removeToobarStateChangeListener(FileToolbarStateChangeListener toobarStateChangeListener) {
envLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/data/bind/distanceconnect.png")); this.otherToobarStateChangeListeners.remove(toobarStateChangeListener);
}
private void otherStateChange() {
for (FileToolbarStateChangeListener toobarStateChangeListener : otherToobarStateChangeListeners) {
toobarStateChangeListener.stateChange();
} }
envLabel.setText(name);
envLabel.repaint();
} }
@Override /*
public Dimension getPreferredSize() { * 重命名文件
return new Dimension(250, HEIGHT); */
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 @Override
public void paintComponent(Graphics g) { public void actionPerformed(ActionEvent evt) {
super.paintComponent(g); new RenameDialog();
paintBackgroundIcon(g); 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 @Override
public void mouseClicked(MouseEvent e) { public void actionPerformed(ActionEvent evt) {
selectedOperation.deleteFile();
}
} }
/** /*
* 鼠标按下 * 加锁
* @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 @Override
public void mousePressed(MouseEvent e) { public void actionPerformed(ActionEvent evt) {
if (e.getX() < NUM200) { selectedOperation.lockFile();
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 @Override
public void mouseReleased(MouseEvent e) { public void actionPerformed(ActionEvent evt) {
selectedOperation.unLockFile();
}
} }
/** /**
* 鼠标进入 * 按钮状态改变
* @param e 事件
*/ */
@Override @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() { private int seletedTemplateNums() {
final EnvListPane envListPane = new EnvListPane(); TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree();
envListPane.populateEnvManager(envLabel.getText()); if (fileTree.getSelectionPaths() == null) {
BasicDialog envListDialog = envListPane.showWindow(SwingUtilities.getWindowAncestor(DesignerContext.getDesignerFrame())); return 0;
envListDialog.addDialogActionListener(new DialogActionAdapter() { }
public void doOk() {
if (!envListOkAction(envListPane)) { return fileTree.getSelectedTemplatePaths().length;
System.exit(0); }
// 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));
} }
public void doCancel() { // 增加enter以及esc快捷键的支持
System.exit(0); 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();
}
} }
}); });
envListDialog.setVisible(true);
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);
}
}
}
/**
* @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;
} }
} }

23
designer-base/src/com/fr/design/mainframe/loghandler/DesignerLogHandler.java

@ -1,7 +1,7 @@
package com.fr.design.mainframe.loghandler; package com.fr.design.mainframe.loghandler;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.ServerConfig; import com.fr.base.ConfigManager;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.imenu.UIMenuItem; 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.FRLogger;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.LogRecordTime;
import com.fr.log.LogHandler; import com.fr.log.LogHandler;
import com.fr.stable.EnvChangedListener; import com.fr.stable.EnvChangedListener;
import com.fr.stable.xml.LogRecordTimeProvider; 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.BadLocationException;
import javax.swing.text.DefaultEditorKit; import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document; import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet; import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants; 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.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
@ -119,7 +130,7 @@ public class DesignerLogHandler {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
JPopupMenu showsetPopup = new JPopupMenu(); JPopupMenu showsetPopup = new JPopupMenu();
int logLevelvalue = ServerConfig.getInstance().getServerLogLevel().intValue(); int logLevelvalue = ConfigManager.getProviderInstance().getServerLogLevel().intValue();
if (logLevelvalue <= INFO_INT) { if (logLevelvalue <= INFO_INT) {
showsetPopup.add(showInfo); showsetPopup.add(showInfo);
showsetPopup.add(showError); showsetPopup.add(showError);
@ -149,6 +160,10 @@ public class DesignerLogHandler {
logHandlerArea.printStackTrace(message, level, date); logHandlerArea.printStackTrace(message, level, date);
} }
public void printRemoteLog(LogRecordTime logRecordTime) {
logHandlerArea.printStackTrace(logRecordTime);
}
private class LogHandlerArea extends JPanel { private class LogHandlerArea extends JPanel {
private static final long serialVersionUID = 8215630927304621660L; private static final long serialVersionUID = 8215630927304621660L;

53
designer-base/src/com/fr/design/utils/DesignUtils.java

@ -1,12 +1,6 @@
package com.fr.design.utils; package com.fr.design.utils;
import com.fr.base.BaseUtils; import com.fr.base.*;
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.base.remote.RemoteDeziConstants;
import com.fr.dav.DavXMLUtils; import com.fr.dav.DavXMLUtils;
import com.fr.dav.LocalEnv; import com.fr.dav.LocalEnv;
@ -15,39 +9,18 @@ import com.fr.design.ExtraDesignClassManager;
import com.fr.design.fun.DesignerEnvProcessor; import com.fr.design.fun.DesignerEnvProcessor;
import com.fr.design.gui.UILookAndFeel; import com.fr.design.gui.UILookAndFeel;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.DesignerFrame;
import com.fr.env.RemoteEnv; import com.fr.env.RemoteEnv;
import com.fr.file.FileFILE; import com.fr.file.FileFILE;
import com.fr.general.ComparatorUtils; import com.fr.general.*;
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.general.http.HttpClient;
import com.fr.stable.ArrayUtils; import com.fr.stable.*;
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 com.fr.start.StartServer;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.io.BufferedReader; import java.io.*;
import java.io.BufferedWriter; import java.net.*;
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.Calendar;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Locale; import java.util.Locale;
@ -209,7 +182,7 @@ public class DesignUtils {
// 更新CurrentEnv于FRContext & DesignerEnvManager // 更新CurrentEnv于FRContext & DesignerEnvManager
FRContext.setCurrentEnv(env); FRContext.setCurrentEnv(env);
DesignerFrame.refreshNorthEastPane();
refreshDesignerFrame(env); refreshDesignerFrame(env);
// 当换了运行环境,重置服务器,让它下次预览时重启 // 当换了运行环境,重置服务器,让它下次预览时重启
if (env instanceof LocalEnv && !ComparatorUtils.equals(env.getPath(), oldEnvPath)) { if (env instanceof LocalEnv && !ComparatorUtils.equals(env.getPath(), oldEnvPath)) {
@ -309,20 +282,13 @@ public class DesignUtils {
|| ComparatorUtils.equals(defaultLocale, Locale.KOREA); || ComparatorUtils.equals(defaultLocale, Locale.KOREA);
} }
/**
* 访问服务器环境-空参数
*/
public static void visitEnvServer() {
visitEnvServerByParameters(StringUtils.EMPTY, new String[] {}, new String[] {});
}
/** /**
* 访问服务器环境 * 访问服务器环境
* *
* @param names 参数名字 * @param names 参数名字
* @param values 参数值 * @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)); int len = Math.min(ArrayUtils.getLength(names), ArrayUtils.getLength(values));
String[] segs = new String[len]; String[] segs = new String[len];
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
@ -353,8 +319,7 @@ public class DesignUtils {
} else { } else {
try { try {
String web = GeneralContext.getCurrentAppNameOfEnv(); String web = GeneralContext.getCurrentAppNameOfEnv();
String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() String url = "http://localhost:" + DesignerEnvManager.getEnvManager().getJettyServerPort() + "/" + web + "/" + ConfigManager.getProviderInstance().getServletMapping()
+ "/" + web + "/" + ServerConfig.getInstance().getServletName() + baseRoute
+ postfixOfUri; + postfixOfUri;
StartServer.browserURLWithLocalEnv(url); StartServer.browserURLWithLocalEnv(url);
} catch (Throwable e) { } catch (Throwable e) {

522
designer-base/src/com/fr/env/EnvListPane.java vendored

@ -1,33 +1,73 @@
package com.fr.env; 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.Env;
import com.fr.base.FRContext;
import com.fr.general.NameObject;
import com.fr.dav.LocalEnv; import com.fr.dav.LocalEnv;
import com.fr.design.DesignerEnvManager; 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.JListControlPane;
import com.fr.design.gui.controlpane.NameObjectCreator; import com.fr.design.gui.controlpane.NameObjectCreator;
import com.fr.design.gui.controlpane.NameableCreator; 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.ComparatorUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.NameObject;
import com.fr.stable.Nameable; import com.fr.stable.Nameable;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.core.PropertyChangeAdapter; 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 class EnvListPane extends JListControlPane {
public EnvListPane() { public EnvListPane() {
super(); super();
addEditingListner(new PropertyChangeAdapter() { addEditingListner(new PropertyChangeAdapter() {
@Override
public void propertyChange() { public void propertyChange() {
String tempName = getEditingName(); String tempName = getEditingName();
String[] allListNames = nameableList.getAllNames(); String[] allListNames = nameableList.getAllNames();
@ -46,6 +86,7 @@ public class EnvListPane extends JListControlPane {
nameableList.stopEditing(); nameableList.stopEditing();
JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(EnvListPane.this), Inter.getLocText(waning, sign)); JOptionPane.showMessageDialog(SwingUtilities.getWindowAncestor(EnvListPane.this), Inter.getLocText(waning, sign));
setWarnigText(editingIndex); setWarnigText(editingIndex);
return;
} }
} }
}); });
@ -56,7 +97,6 @@ public class EnvListPane extends JListControlPane {
* *
* @return 返回添加按钮的NameableCreator * @return 返回添加按钮的NameableCreator
*/ */
@Override
public NameableCreator[] createNameableCreators() { public NameableCreator[] createNameableCreators() {
NameableCreator local = new NameObjectCreator(Inter.getLocText("Env-Local_Directory"), "com/fr/design/images/data/bind/localconnect.png", NameableCreator local = new NameObjectCreator(Inter.getLocText("Env-Local_Directory"), "com/fr/design/images/data/bind/localconnect.png",
LocalEnv.class, LocalEnvPane.class); LocalEnv.class, LocalEnvPane.class);
@ -78,13 +118,14 @@ public class EnvListPane extends JListControlPane {
public void populateEnvManager(String selectedEnv) { public void populateEnvManager(String selectedEnv) {
DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); DesignerEnvManager mgr = DesignerEnvManager.getEnvManager();
Iterator<String> nameIt = mgr.getEnvNameIterator(); Iterator<String> nameIt = mgr.getEnvNameIterator();
List<NameObject> nameObjectList = new ArrayList<>(); List<NameObject> nameObjectList = new ArrayList<NameObject>();
nameIt.hasNext();
while (nameIt.hasNext()) { while (nameIt.hasNext()) {
String name = nameIt.next(); String name = nameIt.next();
nameObjectList.add(new NameObject(name, mgr.getEnv(name))); 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)) { if (StringUtils.isBlank(selectedEnv)) {
selectedEnv = mgr.getCurEnvName(); selectedEnv = mgr.getCurEnvName();
@ -102,10 +143,457 @@ public class EnvListPane extends JListControlPane {
DesignerEnvManager mgr = DesignerEnvManager.getEnvManager(); DesignerEnvManager mgr = DesignerEnvManager.getEnvManager();
mgr.clearAllEnv(); mgr.clearAllEnv();
Nameable[] res = this.update(); Nameable[] res = this.update();
for (Nameable re : res) { NameObject[] envNameObjectArray = new NameObject[res.length];
NameObject nameObject = (NameObject) re; 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()); mgr.putEnv(nameObject.getName(), (Env) nameObject.getObject());
} }
return this.getSelectedName(); return this.getSelectedName();
} }
public static class LocalEnvPane extends BasicBeanPane<LocalEnv> {
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<RemoteEnv> {
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());
}
} }

462
designer-base/src/com/fr/env/RemoteEnv.java vendored

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save