Browse Source

Merge pull request #1483 in BA/design from ~MOMEAK/design9.0:feature/9.0 to feature/9.0

* commit 'b77d5e65a77353c96647751a6c9f5b3dd8ee4ace':
  REPORT-5794 DesignerFrame和HistoryTemplateListPane的改动, release里有, feature里没有, 合代码冲突了, 需要手动patch
  REPORT-5794 DesignerFrame和HistoryTemplateListPane的改动, release里有, feature里没有, 合代码冲突了, 需要手动patch
master
superman 7 years ago
parent
commit
b877d4fa27
  1. 13
      designer_base/src/com/fr/design/file/HistoryTemplateListPane.java
  2. 282
      designer_base/src/com/fr/design/mainframe/DesignerFrame.java

13
designer_base/src/com/fr/design/file/HistoryTemplateListPane.java

@ -9,6 +9,7 @@ import java.util.logging.Level;
import javax.swing.*; import javax.swing.*;
import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.design.constants.UIConstants; import com.fr.design.constants.UIConstants;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
@ -25,7 +26,6 @@ import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilist.UIList; import com.fr.design.gui.ilist.UIList;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.JVirtualTemplate;
import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignModuleFactory;
import com.fr.file.filetree.FileNode; import com.fr.file.filetree.FileNode;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
@ -36,7 +36,7 @@ import com.fr.stable.Constants;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import com.fr.design.utils.gui.GUIPaintUtils; import com.fr.design.utils.gui.GUIPaintUtils;
public class HistoryTemplateListPane extends JPanel implements FileOperations { public class HistoryTemplateListPane extends JPanel implements FileOperations, CallbackEvent {
//最大保存内存中面板数,为0时关闭优化内存 //最大保存内存中面板数,为0时关闭优化内存
private static final int DEAD_LINE = 5; private static final int DEAD_LINE = 5;
private static final int LIST_BORDER = 4; private static final int LIST_BORDER = 4;
@ -105,6 +105,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
/** /**
* 关闭选择的文件 * 关闭选择的文件
*
* @param selected 选择的 * @param selected 选择的
*/ */
public void closeSelectedReport(JTemplate<?, ?> selected) { public void closeSelectedReport(JTemplate<?, ?> selected) {
@ -129,6 +130,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
/** /**
* 临时关闭选择的文件 * 临时关闭选择的文件
*
* @param selected 选择的 * @param selected 选择的
*/ */
public void closeVirtualSelectedReport(JTemplate<?, ?> selected) { public void closeVirtualSelectedReport(JTemplate<?, ?> selected) {
@ -235,6 +237,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
/** /**
* 判断是否打开过该模板 * 判断是否打开过该模板
*
* @param filename 文件名 * @param filename 文件名
* @return 文件位置 * @return 文件位置
*/ */
@ -250,6 +253,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
/** /**
* 是否是当前编辑的文件 * 是否是当前编辑的文件
*
* @param filename 文件名 * @param filename 文件名
* @return 是则返回TRUE * @return 是则返回TRUE
*/ */
@ -258,6 +262,10 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
return ComparatorUtils.equals(filename, editingFileName); return ComparatorUtils.equals(filename, editingFileName);
} }
@Override
public void callback() {
getCurrentEditingTemplate().repaint();
}
private class HistoryListCellRender extends DefaultListCellRenderer { private class HistoryListCellRender extends DefaultListCellRenderer {
@ -388,6 +396,7 @@ public class HistoryTemplateListPane extends JPanel implements FileOperations {
/** /**
* 路径 * 路径
*
* @return 路径 * @return 路径
*/ */
public String getSelectedTemplatePath() { public String getSelectedTemplatePath() {

282
designer_base/src/com/fr/design/mainframe/DesignerFrame.java

@ -22,7 +22,6 @@ import com.fr.design.gui.imenu.UIMenuHighLight;
import com.fr.design.gui.iscrollbar.UIScrollBar; import com.fr.design.gui.iscrollbar.UIScrollBar;
import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.hold.DefaultTitlePlace;
import com.fr.design.mainframe.loghandler.LogMessageBar; 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;
@ -37,6 +36,7 @@ import com.fr.general.ComparatorUtils;
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.env.EnvContext;
import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginContext;
import com.fr.plugin.injectable.PluginModule; import com.fr.plugin.injectable.PluginModule;
import com.fr.plugin.manage.PluginFilter; import com.fr.plugin.manage.PluginFilter;
@ -65,15 +65,13 @@ import java.util.List;
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 {
public static final String DESIGNER_FRAME_NAME = "designer_frame";
public static final Dimension MIN_SIZE = new Dimension(100, 100);
private static final long serialVersionUID = -8732559571067484460L; private static final long serialVersionUID = -8732559571067484460L;
private static final int LEFT_ALIGN_GAP = -5; private static final int LEFT_ALIGN_GAP = -5;
private static final int MENU_HEIGHT = 26; private static final int MENU_HEIGHT = 26;
private static final Integer SECOND_LAYER = new Integer(100); private static final Integer SECOND_LAYER = new Integer(100);
private static final Integer TOP_LAYER = new Integer((200)); private static final Integer TOP_LAYER = new Integer((200));
public static final String DESIGNER_FRAME_NAME = "designer_frame";
public static final Dimension MIN_SIZE = new Dimension(100, 100);
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 ToolBarMenuDock ad;
@ -140,81 +138,45 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
} }
}; };
/** private MouseListener closeMouseListener = new MouseAdapter() {
* 注册app. public void mousePressed(MouseEvent e) {
* closeMode = UIConstants.CLOSE_PRESS_AUTHORITY;
* @param app closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
* 注册app. closeButton.repaint();
*/
public static void registApp(App<?> app) {
if (app != null) {
appList.add(app);
}
}
public static void removeApp(App<?> app) {
if (app != null) {
appList.remove(app);
}
}
protected DesktopCardPane getCenterTemplateCardPane() {
return centerTemplateCardPane;
} }
/** public void mouseExited(MouseEvent e) {
* 初始menuPane的方法 方便OEM时修改该组件 closeMode = UIConstants.CLOSE_OF_AUTHORITY;
*/ closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
protected void initMenuPane(){ closeButton.repaint();
menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
menuPane.add(initNorthEastPane(ad), BorderLayout.EAST);
basePane.add(menuPane, BorderLayout.NORTH);
this.resetToolkitByPlus(null);
} }
/** public void mouseMoved(MouseEvent e) {
* @param ad closeMode = UIConstants.CLOSE_OVER_AUTHORITY;
* @return closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
*/ closeButton.repaint();
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(northEastPane, ad);
DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv());
} }
}, new PluginFilter() {
@Override
public boolean accept(PluginContext context) {
return context.contain(PluginModule.ExtraDesign); public void mouseReleased(MouseEvent e) {
if (BaseUtils.isAuthorityEditing()) {
BaseUtils.setAuthorityEditing(false);
WestRegionContainerPane.getInstance().replaceDownPane(
TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()));
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane();
DesignerContext.getDesignerFrame().resetToolkitByPlus(
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getToolBarMenuDockPlus());
needToAddAuhtorityPaint();
refreshDottedLine();
fireAuthorityStateToNomal();
} }
});
refreshNorthEastPane(northEastPane, ad);
return northEastPane;
} }
private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) { public void mouseEntered(MouseEvent e) {
closeMode = UIConstants.CLOSE_OVER_AUTHORITY;
northEastPane.removeAll(); closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING); closeButton.repaint();
if (processor == null) {
processor = new DefaultTitlePlace();
}
processor.hold(northEastPane, LogMessageBar.getInstance(), ad.createBBSLoginPane());
if (DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) {
northEastPane.add(ad.createAlphafinePane(), BorderLayout.CENTER);
}
} }
};
public DesignerFrame(ToolBarMenuDock ad) { public DesignerFrame(ToolBarMenuDock ad) {
@ -255,11 +217,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
basePane.add(centerPane, BorderLayout.CENTER); basePane.add(centerPane, BorderLayout.CENTER);
laoyoutWestPane(); laoyoutWestPane();
// JPanel eastRegionPane = new JPanel(new BorderLayout());
// eastRegionPane.add(EastRegionContainerPane.getInstance(), BorderLayout.CENTER);
// eastRegionPane.add(JSliderPane.getInstance(), BorderLayout.SOUTH);
// basePane.add(eastRegionPane, BorderLayout.EAST);
basePane.add(EastRegionContainerPane.getInstance(), BorderLayout.EAST); basePane.add(EastRegionContainerPane.getInstance(), BorderLayout.EAST);
basePane.setBounds(0, 0, contentWidth, contentHeight); basePane.setBounds(0, 0, contentWidth, contentHeight);
@ -269,7 +226,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
modWindowBounds(); modWindowBounds();
// p:检查所有按钮的可见性和是否可以编辑性. // p:检查所有按钮的可见性和是否可以编辑性.
checkToolbarMenuEnable(); checkToolbarMenuEnable();
@ -292,6 +248,83 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
initMenuPane(); initMenuPane();
} }
/**
* 注册app.
*
* @param app 注册app.
*/
public static void registApp(App<?> app) {
if (app != null) {
appList.add(app);
}
}
public static void removeApp(App<?> app) {
if (app != null) {
appList.remove(app);
}
}
protected DesktopCardPane getCenterTemplateCardPane() {
return centerTemplateCardPane;
}
/**
* 初始menuPane的方法 方便OEM时修改该组件
*/
protected void initMenuPane() {
menuPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
menuPane.add(new UIMenuHighLight(), BorderLayout.SOUTH);
menuPane.add(initNorthEastPane(ad), BorderLayout.EAST);
basePane.add(menuPane, BorderLayout.NORTH);
this.resetToolkitByPlus(null);
}
/**
* @param ad
* @return
*/
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(northEastPane, ad);
DesignUtils.refreshDesignerFrame(FRContext.getCurrentEnv());
}
}, new PluginFilter() {
@Override
public boolean accept(PluginContext context) {
return context.contain(PluginModule.ExtraDesign);
}
});
refreshNorthEastPane(northEastPane, ad);
return northEastPane;
}
private void refreshNorthEastPane(JPanel northEastPane, ToolBarMenuDock ad) {
northEastPane.removeAll();
northEastPane.setLayout(new FlowLayout(FlowLayout.RIGHT, 0, 0));
northEastPane.add(LogMessageBar.getInstance());
TitlePlaceProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TitlePlaceProcessor.MARK_STRING);
if (processor != null) {
processor.hold(northEastPane, LogMessageBar.getInstance(), ad.createBBSLoginPane());
}
northEastPane.add(ad.createAlphaFinePane());
if (!DesignerEnvManager.getEnvManager().getAlphaFineConfigManager().isEnabled()) {
ad.createAlphaFinePane().setVisible(false);
}
northEastPane.add(ad.createBBSLoginPane());
}
public void initTitleIcon() { public void initTitleIcon() {
try { try {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -402,46 +435,6 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
addDottedLine(); addDottedLine();
} }
private MouseListener closeMouseListener = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
closeMode = UIConstants.CLOSE_PRESS_AUTHORITY;
closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
closeButton.repaint();
}
public void mouseExited(MouseEvent e) {
closeMode = UIConstants.CLOSE_OF_AUTHORITY;
closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
closeButton.repaint();
}
public void mouseMoved(MouseEvent e) {
closeMode = UIConstants.CLOSE_OVER_AUTHORITY;
closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
closeButton.repaint();
}
public void mouseReleased(MouseEvent e) {
if (BaseUtils.isAuthorityEditing()) {
BaseUtils.setAuthorityEditing(false);
WestRegionContainerPane.getInstance().replaceDownPane(
TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()));
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().refreshEastPropertiesPane();
DesignerContext.getDesignerFrame().resetToolkitByPlus(
HistoryTemplateListPane.getInstance().getCurrentEditingTemplate().getToolBarMenuDockPlus());
needToAddAuhtorityPaint();
refreshDottedLine();
fireAuthorityStateToNomal();
}
}
public void mouseEntered(MouseEvent e) {
closeMode = UIConstants.CLOSE_OVER_AUTHORITY;
closeButton.setBackground(UIConstants.NORMAL_BACKGROUND);
closeButton.repaint();
}
};
/** /**
* 刷新CloseButton * 刷新CloseButton
*/ */
@ -531,10 +524,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 检查 * 检查
* *
* @param flag * @param flag 组件是否可见
* 组件是否可见 * @param al 组件名称
* @param al
* 组件名称
*/ */
public void checkCombineUp(boolean flag, ArrayList<String> al) { public void checkCombineUp(boolean flag, ArrayList<String> al) {
combineUp.checkComponentsByNames(flag, al); combineUp.checkComponentsByNames(flag, al);
@ -551,8 +542,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 重置相关的工具条. * 重置相关的工具条.
* *
* @param plus * @param plus 工具条中相关信息
* 工具条中相关信息
*/ */
public void resetToolkitByPlus(ToolBarMenuDockPlus plus) { public void resetToolkitByPlus(ToolBarMenuDockPlus plus) {
if (plus == null) { if (plus == null) {
@ -741,8 +731,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 添加 模板, 并激活. * 添加 模板, 并激活.
* *
* @param jt * @param jt 添加的模板.
* 添加的模板.
*/ */
public void addAndActivateJTemplate(JTemplate<?, ?> jt) { public void addAndActivateJTemplate(JTemplate<?, ?> jt) {
if (jt == null || jt.getEditingFILE() == null) { if (jt == null || jt.getEditingFILE() == null) {
@ -758,8 +747,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 激活已经存在的模板 * 激活已经存在的模板
* *
* @param jt * @param jt 模板
* 模板
*/ */
public void activateJTemplate(JTemplate<?, ?> jt) { public void activateJTemplate(JTemplate<?, ?> jt) {
if (jt == null || jt.getEditingFILE() == null) { if (jt == null || jt.getEditingFILE() == null) {
@ -773,8 +761,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 对象侦听 * 对象侦听
* *
* @param e * @param e 事件
* 事件
*/ */
public void targetModified(TargetModifiedEvent e) { public void targetModified(TargetModifiedEvent e) {
this.checkToolbarMenuEnable(); this.checkToolbarMenuEnable();
@ -783,8 +770,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 模板关闭时 处理. * 模板关闭时 处理.
* *
* @param jt * @param jt 模板
* 模板
*/ */
public void templateClosed(JTemplate<?, ?> jt) { public void templateClosed(JTemplate<?, ?> jt) {
} }
@ -792,8 +778,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 模板打开时 处理. * 模板打开时 处理.
* *
* @param jt * @param jt 模板
* 模板
*/ */
public void templateOpened(JTemplate<?, ?> jt) { public void templateOpened(JTemplate<?, ?> jt) {
} }
@ -801,8 +786,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 模板保存时 处理. * 模板保存时 处理.
* *
* @param jt * @param jt 模板
* 模板
*/ */
public void templateSaved(JTemplate<?, ?> jt) { public void templateSaved(JTemplate<?, ?> jt) {
this.checkToolbarMenuEnable(); this.checkToolbarMenuEnable();
@ -811,8 +795,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 打开模板文件,如果是已经打开的就激活此模板所对应的JInternalFrame * 打开模板文件,如果是已经打开的就激活此模板所对应的JInternalFrame
* *
* @param tplFile * @param tplFile 文件
* 文件
*/ */
public void openTemplate(FILE tplFile) { public void openTemplate(FILE tplFile) {
// 测试连接,如果连接失败,则提示 // 测试连接,如果连接失败,则提示
@ -849,12 +832,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 是否不合版本的设计器 * 是否不合版本的设计器
* *
* @param jt * @param jt 当前模板
* 当前模板
*
* @return 是否不合版本 * @return 是否不合版本
*
*
* @date 2014-10-14-下午6:30:37 * @date 2014-10-14-下午6:30:37
*/ */
private boolean inValidDesigner(JTemplate jt) { private boolean inValidDesigner(JTemplate jt) {
@ -864,10 +843,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 打开指定的文件 * 打开指定的文件
* *
* @param tplFile * @param tplFile 指定的文件
* 指定的文件
*
*
* @date 2014-10-14-下午6:31:05 * @date 2014-10-14-下午6:31:05
*/ */
private void openFile(FILE tplFile) { private void openFile(FILE tplFile) {
@ -913,12 +889,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
/** /**
* 激活指定的模板 * 激活指定的模板
* *
* @param tplFile * @param tplFile 模板文件
* 模板文件 * @param jt 当前报表
* @param jt
* 当前报表
*
*
* @date 2014-10-14-下午6:31:23 * @date 2014-10-14-下午6:31:23
*/ */
private void activeTemplate(FILE tplFile, JTemplate jt) { private void activeTemplate(FILE tplFile, JTemplate jt) {
@ -931,7 +903,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (tplFile instanceof FileFILE) { if (tplFile instanceof FileFILE) {
fullName = tplFile.getPath(); fullName = tplFile.getPath();
} }
fullName = fullName.replaceAll("/", "\\\\"); fullName = OperatingSystem.isWindows() ? fullName.replaceAll("/", "\\\\") : fullName.replaceAll("\\\\", "/");
int index = HistoryTemplateListPane.getInstance().contains(fullName); int index = HistoryTemplateListPane.getInstance().contains(fullName);
List<JTemplate<?, ?>> historyList = HistoryTemplateListPane.getInstance().getHistoryList(); List<JTemplate<?, ?>> historyList = HistoryTemplateListPane.getInstance().getHistoryList();
if (index != -1) { if (index != -1) {
@ -939,7 +911,8 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
} else { } else {
this.addAndActivateJTemplate(jt); this.addAndActivateJTemplate(jt);
} }
//REPORT-5084:激活后刷新一下右側面板
jt.refreshEastPropertiesPane();
} }
/** /**
@ -976,8 +949,9 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
Env currentEnv = FRContext.getCurrentEnv(); Env currentEnv = FRContext.getCurrentEnv();
try { try {
EnvContext.fireBeforeSignOut();
currentEnv.signOut(); currentEnv.signOut();
GeneralContext.fireEnvSignOutListener(); EnvContext.fireAfterSignOut();
} catch (Exception e) { } catch (Exception e) {
FRContext.getLogger().error(e.getMessage(), e); FRContext.getLogger().error(e.getMessage(), e);
} }

Loading…
Cancel
Save