package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; import com.fr.design.actions.file.newReport.NewWorkBookAction; import com.fr.design.actions.server.ServerConfigManagerAction; import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.constants.UIConstants; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.fun.MenuHandler; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIPreviewButton; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.itoolbar.UILargeToolbar; import com.fr.design.mainframe.*; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; import com.fr.design.module.DesignerModule; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLTools; import javax.swing.*; import javax.swing.border.MatteBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.ArrayList; public class Designer extends BaseDesigner { private static final int TOOLBARPANEVGAP = -4; private static final int PREVIEW_DOWN_X_GAP = 92; private static final int GAP = 7; private static final String OLD_ENV_FOLDER_71 = ".FineReport71"; private static final String OLD_ENV_FOLDER_70 = ".FineReport70"; private UserInfoPane userInfoPane; private UIButton saveButton; private UIButton undo; private UIButton redo; private UIPreviewButton run; /** * 设计器启动的Main方法 * * @param args 参数 */ public static void main(String[] args) { new Designer(args); } public Designer(String[] args) { super(args); } @Override protected String module2Start() { return DesignerModule.class.getName(); } @Override /** * 创建新建文件的快捷方式数组。 * @return 返回快捷方式的数组 */ public ShortCut[] createNewFileShortCuts() { ArrayList shortCuts = new ArrayList(); shortCuts.add(new NewWorkBookAction()); shortCuts.add(new NewPolyReportAction()); try { if (DesignModuleFactory.getNewFormAction() != null) { shortCuts.add((ShortCut) DesignModuleFactory.getNewFormAction().newInstance()); } } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } return shortCuts.toArray(new ShortCut[shortCuts.size()]); } @Override protected MenuDef createServerMenuDef(ToolBarMenuDockPlus plus) { MenuDef menuDef = super.createServerMenuDef(plus); if (FRContext.getCurrentEnv() == null) { return menuDef; } if (!BaseUtils.isAuthorityEditing()) { menuDef.addShortCut(SeparatorDef.DEFAULT); if (FRContext.getCurrentEnv().isRoot()) { menuDef.addShortCut(new ServerConfigManagerAction(), new StyleListAction(), new WidgetManagerAction()); if (ActionFactory.getChartPreStyleAction() != null) { menuDef.addShortCut(ActionFactory.getChartPreStyleAction()); } } insertMenu(menuDef, MenuHandler.SERVER); } return menuDef; } @Override /** * 创建设计器上几个比较大的图标:新建cpt,保存,前进,后退,运行。 * @return 返回大图标对应的工具栏 */ public UILargeToolbar createLargeToolbar() { UILargeToolbar largeToolbar = super.createLargeToolbar(); largeToolbar.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 4)); largeToolbar.add(new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = 1; return dim; } }); createRunButton(largeToolbar); largeToolbar.add(run); largeToolbar.add(new JPanel() { public Dimension getPreferredSize() { Dimension dim = super.getPreferredSize(); dim.width = GAP; return dim; } }); largeToolbar.addSeparator(new Dimension(2, 42)); largeToolbar.setBorder(new MatteBorder(new Insets(0, 0, 1, 0), UIConstants.LINE_COLOR)); return largeToolbar; } /** * 创建上面一排的工具栏按钮 * @return 按钮 */ public UIButton[] createUp() { return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; } private UIButton createSaveButton() { saveButton = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/save.png")); saveButton.setToolTipText(KeySetUtils.SAVE_TEMPLATE.getMenuKeySetName()); saveButton.set4ToolbarButton(); saveButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); jt.stopEditing(); jt.saveTemplate(); jt.requestFocus(); } }); return saveButton; } private UIButton createUndoButton() { undo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/undo.png")); undo.setToolTipText(KeySetUtils.UNDO.getMenuKeySetName()); undo.set4ToolbarButton(); undo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jt != null) { jt.undo(); } } }); return undo; } private UIButton createRedoButton() { redo = new UIButton(BaseUtils.readIcon("/com/fr/design/images/buttonicon/redo.png")); redo.setToolTipText(KeySetUtils.REDO.getMenuKeySetName()); redo.set4ToolbarButton(); redo.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jt != null) { jt.redo(); } } }); return redo; } private void createRunButton(UILargeToolbar largeToolbar) { run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) { public Dimension getPreferredSize() { return new Dimension(34, 34); } }, new UIButton(UIConstants.PREVIEW_DOWN) { public Dimension getPreferredSize() { return new Dimension(34, 10); } } ) { @Override protected void upButtonClickEvent() { JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } if (jt instanceof JWorkBook) { WebPreviewUtils.onWorkbookPreview(jt); } else if (jt instanceof BaseJForm) { WebPreviewUtils.onFormPreview(jt); } } @Override protected void downButtonClickEvent() { final JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } UIPopupMenu menu = new UIPopupMenu(); UIMenuItem[] items = jt.createMenuItem4Preview(); for (int i = 0; i < items.length; i++) { menu.add(items[i]); } GUICoreUtils.showPopupMenu(menu, MutilTempalteTabPane.getInstance(), MutilTempalteTabPane.getInstance().getX() - PREVIEW_DOWN_X_GAP, MutilTempalteTabPane.getInstance().getY() - 1 + MutilTempalteTabPane.getInstance().getHeight()); } @Override public Dimension getPreferredSize() { // TODO Auto-generated method stub return new Dimension(34, 46); } }; run.setExtraPainted(false); run.set4Toolbar(); run.getUpButton().setToolTipText(Inter.getLocText("FR-Designer_Preview")); run.getDownButton().setToolTipText(Inter.getLocText("FR-Designer_Dropdown-More-Preview")); } @Override protected void refreshLargeToolbarState() { JTemplate jt = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); if (jt == null) { return; } saveButton.setEnabled(!jt.isSaved()); MutilTempalteTabPane.getInstance().refreshOpenedTemplate(HistoryTemplateListPane.getInstance().getHistoryList()); MutilTempalteTabPane.getInstance().repaint(); if (DesignerEnvManager.getEnvManager().isSupportUndo()) { undo.setEnabled(jt.canUndo()); redo.setEnabled(jt.canRedo()); } else { undo.setEnabled(false); redo.setEnabled(false); } run.getUpButton().setIcon(jt.getPreviewLargeIcon()); } /** * 生成工具栏 * @param toolbarComponent 工具栏 * @param plus 对象 * @return 更新后的toolbar */ public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { //如果是处于权限编辑状态 if (BaseUtils.isAuthorityEditing()) { if (plus instanceof JWorkBook && plus.toolbars4Target() == null) { //聚合块编辑 return super.polyToolBar(Inter.getLocText(new String[]{"Polybolck", "DashBoard-Potence", "Edit"})); } else { return plus.toolBar4Authority(); } } if (plus.toolbarPanes4Form().length == 0) { return super.resetToolBar(toolbarComponent, plus); } else { JPanel toolbarPane; toolbarPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, TOOLBARPANEVGAP)); Dimension dim = new Dimension(); dim.height = plus.getToolBarHeight(); toolbarPane.setPreferredSize(dim); toolbarPane.setFocusable(true); JPanel[] paneArray = plus.toolbarPanes4Form(); for (int i = 0; i < paneArray.length; i++) { toolbarPane.add(paneArray[i]); } return toolbarPane; } } @Override /** * 生成报表设计和表单设计的编辑区域 * @return 返回编辑区域 */ public JTemplate createNewTemplate() { return new JWorkBook(); } /** * 创建论坛登录面板, chart那边不需要 * * @return 面板组件 * */ public Component createBBSLoginPane(){ if (userInfoPane == null){ userInfoPane = new UserInfoPane(); } return userInfoPane; } protected SplashPane createSplashPane() { return new ReportSplashPane(); } /** * 收集用户信息吗 * */ protected void collectUserInformation() { //定制的就不弹出来了 if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APPNAME)) { return; } DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); final String key = envManager.getActivationKey(); //本地验证通过 if(ActiveKeyGenerator.localVerify(key)){ onLineVerify(envManager, key); UserInfoLabel.showBBSDialog(); return; } if(StableUtils.checkDesignerActive(readOldKey())){ //只要有老的key, 就不弹窗, 下次启动的时候, 在线验证下就行. String newKey = ActiveKeyGenerator.generateActiveKey(); envManager.setActivationKey(newKey); UserInfoLabel.showBBSDialog(); return; } CollectUserInformationDialog activeDialog = new CollectUserInformationDialog( DesignerContext.getDesignerFrame()); activeDialog.setVisible(true); } private void onLineVerify(DesignerEnvManager envManager, final String key){ int status = envManager.getActiveKeyStatus(); //没有联网验证过 if (status != 0) { Thread authThread = new Thread(new Runnable() { @Override public void run() { ActiveKeyGenerator.onLineVerify(key); } }); authThread.start(); } } private File getOldEnvFile(String folderName){ String userHome = System.getProperty("user.home"); if (userHome == null) { userHome = System.getProperty("userHome"); } String filePath = StableUtils.pathJoin(userHome, folderName, ProductConstants.APP_NAME + "Env.xml"); return new File(filePath); } private String getOldActiveKeyFromFile(File envFile){ if (!envFile.exists()) { return StringUtils.EMPTY; } DesignerEnvManager temp = new DesignerEnvManager(); try { XMLTools.readFileXML(temp, envFile); } catch (Exception e) { FRContext.getLogger().error(e.getMessage(), e); } return temp.getActivationKey(); } //默认只从7.0和711的设计器里读取key private String readOldKey(){ File file71 = getOldEnvFile(OLD_ENV_FOLDER_71); if (!file71.exists()) { File file70 = getOldEnvFile(OLD_ENV_FOLDER_70); return getOldActiveKeyFromFile(file70); } return getOldActiveKeyFromFile(file71); } /** * 设计器退出时, 做的一些操作. * */ public void shutDown(){ InformationCollector collector = InformationCollector.getInstance(); collector.collectStopTime(); collector.saveXMLFile(); } }