ro.nextreports.designer.MainFrame.java Source code

Java tutorial

Introduction

Here is the source code for ro.nextreports.designer.MainFrame.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ro.nextreports.designer;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;

import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXLabel;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.JXStatusBar;
import org.noos.xing.mydoggy.plaf.ui.MyDoggyKeySpace;

import ro.nextreports.designer.action.chart.OpenChartAction;
import ro.nextreports.designer.action.report.OpenReportAction;
import ro.nextreports.designer.action.report.layout.export.ExportAction;
import ro.nextreports.designer.chart.ChartUtil;
import ro.nextreports.designer.datasource.DataSource;
import ro.nextreports.designer.datasource.DefaultDataSourceManager;
import ro.nextreports.designer.persistence.FileReportPersistence;
import ro.nextreports.designer.querybuilder.DBBrowserNode;
import ro.nextreports.designer.querybuilder.DBBrowserTree;
import ro.nextreports.designer.querybuilder.DBObject;
import ro.nextreports.designer.querybuilder.QueryBuilderPanel;
import ro.nextreports.designer.querybuilder.tree.DBNodeExpander;
import ro.nextreports.designer.ui.MemoryStatus;
import ro.nextreports.designer.util.I18NSupport;
import ro.nextreports.designer.util.ImageUtil;

import com.jgoodies.looks.Options;

/**
 * @author Decebal Suiu
 */
public class MainFrame extends JXFrame {

    private JXPanel workspacePanel;
    private QueryBuilderPanel qbPanel;
    private JXStatusBar statusBar;

    private String baseTitle;

    public MainFrame(String title) {
        super(title);
        baseTitle = title;
        setIconImage(ImageUtil.getImage("next-reports"));
        initComponents();
    }

    private void initComponents() {
        Globals.setMainFrame(this);

        // better text visualization for disabled components
        Options.setPopupDropShadowEnabled(true); // add drop shadow to popup menu
        UIDefaults uiDefaults = UIManager.getDefaults();
        uiDefaults.put("ComboBox.disabledForeground", Color.DARK_GRAY);
        uiDefaults.put("TextField.inactiveForeground", Color.DARK_GRAY);
        uiDefaults.put("TextArea.inactiveBackground", Color.WHITE);
        uiDefaults.put("FormattedTextField.inactiveForeground", Color.DARK_GRAY);
        uiDefaults.put("PasswordField.inactiveForeground", Color.DARK_GRAY);
        uiDefaults.put("CheckBox.disabledText", Color.DARK_GRAY);

        // internationalization
        UIManager.put("OptionPane.yesButtonText", I18NSupport.getString("optionpanel.yes"));
        UIManager.put("OptionPane.cancelButtonText", I18NSupport.getString("optionpanel.cancel"));
        UIManager.put("OptionPane.noButtonText", I18NSupport.getString("optionpanel.no"));
        UIManager.put("OptionPane.okButtonText", I18NSupport.getString("optionpanel.ok"));
        UIManager.put("OptionPane.messageDialogTitle", I18NSupport.getString("optionpanel.message"));
        UIManager.put("ColorChooser.okText", I18NSupport.getString("colorchooser.ok"));
        UIManager.put("ColorChooser.cancelText", I18NSupport.getString("colorchooser.cancel"));
        UIManager.put("ColorChooser.resetText", I18NSupport.getString("colorchooser.reset"));
        UIManager.put("FileChooser.saveInLabelText", I18NSupport.getString("FileChooser.saveInLabelText"));
        UIManager.put("FileChooser.fileNameLabelText", I18NSupport.getString("FileChooser.fileNameLabelText"));
        UIManager.put("FileChooser.folderNameLabelText", I18NSupport.getString("FileChooser.folderNameLabelText"));
        UIManager.put("FileChooser.filesOfTypeLabelText",
                I18NSupport.getString("FileChooser.filesOfTypeLabelText"));
        UIManager.put("FileChooser.saveButtonText", I18NSupport.getString("FileChooser.saveButtonText"));
        UIManager.put("FileChooser.cancelButtonText", I18NSupport.getString("FileChooser.cancelButtonText"));
        UIManager.put("FileChooser.saveButtonToolTipText",
                I18NSupport.getString("FileChooser.saveButtonToolTipText"));
        UIManager.put("FileChooser.cancelButtonToolTipText",
                I18NSupport.getString("FileChooser.cancelButtonToolTipText"));
        UIManager.put("FileChooser.upFolderToolTipText", I18NSupport.getString("FileChooser.upFolderToolTipText"));
        UIManager.put("FileChooser.homeFolderToolTipText",
                I18NSupport.getString("FileChooser.homeFolderToolTipText"));
        UIManager.put("FileChooser.newFolderToolTipText",
                I18NSupport.getString("FileChooser.newFolderToolTipText"));
        UIManager.put("FileChooser.listViewButtonToolTipText",
                I18NSupport.getString("FileChooser.listViewButtonToolTipText"));
        UIManager.put("FileChooser.detailsViewButtonToolTipText",
                I18NSupport.getString("FileChooser.detailsViewButtonToolTipText"));

        // docking
        UIManager.put(MyDoggyKeySpace.DRAG_ENABLED, false);

        // inside connections dir are kept the queries/reports for every data source
        DefaultDataSourceManager.getInstance().load();
        File connections = new File(FileReportPersistence.CONNECTIONS_DIR);
        if (!connections.exists()) {
            connections.mkdir();
        }
        // inside reports dir are kept the generated reports
        File reports = new File(ExportAction.REPORTS_DIR);
        if (!reports.exists()) {
            reports.mkdir();
        }

        // create workspace panel
        workspacePanel = new JXPanel(new CardLayout());

        // create query builder panel before menu(!!! for docking)
        qbPanel = new QueryBuilderPanel();
        qbPanel.initWorkspace();

        setLayout(new BorderLayout());
        //        add(new MainToolBar(), BorderLayout.NORTH);
        setToolBar(new MainToolBar());

        statusBar = new JXStatusBar();
        //statusBar.add(new JXLabel(""), JXStatusBar.Constraint.ResizeBehavior.FILL);
        statusBar.add(new JXLabel(""),
                new JXStatusBar.Constraint(JXStatusBar.Constraint.ResizeBehavior.FILL, new Insets(0, 5, 2, 2)));
        statusBar.add(new MemoryStatus());
        statusBar.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
        setStatusBar(statusBar);

        WorkspaceManager workspaceManager = WorkspaceManager.getInstance();
        workspacePanel.add((Component) workspaceManager.getQueryWorkspace().getToolWindowManager(),
                WorkspaceManager.QUERY_WORKSPACE);
        workspacePanel.add((Component) workspaceManager.getReportWorkspace().getToolWindowManager(),
                WorkspaceManager.REPORT_WORKSPACE);
        workspacePanel.add((Component) workspaceManager.getChartWorkspace().getToolWindowManager(),
                WorkspaceManager.CHART_WORKSPACE);
        add(workspacePanel, BorderLayout.CENTER);

        DataSource ds = DefaultDataSourceManager.getInstance().getConnectedDataSource();
        if (ds != null) {
            setStatusBarMessage(
                    "<html>" + I18NSupport.getString("datasource.active") + " <b>" + ds.getName() + "</b></html>");
        }

        setJMenuBar(new MainMenuBar());

        Globals.getMainMenuBar().actionUpdate(ds != null);
        Globals.getMainToolBar().actionUpdate(ds != null);

        String systemReport = Globals.getSystemReport();
        String systemChart = Globals.getSystemChart();
        String systemPath = Globals.getSystemPath();
        if (systemReport != null) {
            openSystemReport(systemReport, systemPath);
        } else if (systemChart != null) {
            openSystemChart(systemChart, systemPath);
        }

    }

    public void openSystemReport(String reportName) {
        openSystemReport(qbPanel.getTree(), reportName);
    }

    public void openSystemReport(String reportName, String relativePath) {
        openSystemReport(qbPanel.getTree(), reportName, relativePath);
    }

    public void openSystemReport(DBBrowserTree tree, String reportName) {
        openSystemReport(tree, reportName, null);
    }

    public void openSystemReport(DBBrowserTree tree, String reportName, String relativePath) {

        if (DefaultDataSourceManager.getInstance().getConnectedDataSource() == null) {
            return;
        }

        DBBrowserNode node = tree.searchNode(DBNodeExpander.REPORTS);
        tree.startExpandingTree(node, true, null);

        DBBrowserNode selectedNode = null;
        if (relativePath == null) {
            // report inside Reports node
            selectedNode = tree.searchNode(reportName, DBObject.REPORTS);
        } else {
            // report inside some folder
            String absolutePath = FileReportPersistence.getReportsAbsolutePath() + File.separator + relativePath
                    + File.separator + reportName + FormSaver.REPORT_FULL_EXTENSION;
            selectedNode = tree.searchNode(reportName, absolutePath, DBObject.REPORTS);
        }

        if (selectedNode == null) {
            return;
        }

        OpenReportAction openAction = new OpenReportAction();
        openAction.setResetServerReport(false);
        openAction.setReportName(selectedNode.getDBObject().getName());
        openAction.setReportPath(selectedNode.getDBObject().getAbsolutePath());
        openAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, ""));
    }

    public void openSystemChart(String chartName) {
        openSystemChart(qbPanel.getTree(), chartName);
    }

    public void openSystemChart(String chartName, String relativePath) {
        openSystemChart(qbPanel.getTree(), chartName, relativePath);
    }

    public void openSystemChart(DBBrowserTree tree, String chartName) {
        openSystemChart(tree, chartName, null);
    }

    public void openSystemChart(DBBrowserTree tree, String chartName, String relativePath) {

        if (DefaultDataSourceManager.getInstance().getConnectedDataSource() == null) {
            return;
        }

        DBBrowserNode node = tree.searchNode(DBNodeExpander.CHARTS);
        tree.startExpandingTree(node, true, null);

        DBBrowserNode selectedNode = null;
        if (relativePath == null) {
            // chart inside Charts node
            selectedNode = tree.searchNode(chartName, DBObject.CHARTS);
        } else {
            // chart inside some folder
            String absolutePath = FileReportPersistence.getChartsAbsolutePath() + File.separator + relativePath
                    + File.separator + chartName + ChartUtil.CHART_FULL_EXTENSION;
            selectedNode = tree.searchNode(chartName, absolutePath, DBObject.CHARTS);
        }
        if (selectedNode == null) {
            return;
        }

        OpenChartAction openAction = new OpenChartAction();
        openAction.setResetServerChart(false);
        openAction.setChartName(selectedNode.getDBObject().getName());
        openAction.setChartPath(selectedNode.getDBObject().getAbsolutePath());
        openAction.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, ""));
    }

    public QueryBuilderPanel getQueryBuilderPanel() {
        return qbPanel;
    }

    public void setStatusBarMessage(String message) {
        if (statusBar != null) {
            ((JXLabel) statusBar.getComponent(0)).setText(message);
        }
    }

    void changeWorkspace(String workspaceName) {
        ((CardLayout) workspacePanel.getLayout()).show(workspacePanel, workspaceName);
    }

    public void updateTitle(String update) {
        if (update == null) {
            setTitle(baseTitle);
        } else {
            setTitle(baseTitle + " - " + update);
        }
    }

}