Package org.pdfsam.guiclient.gui.frames

Source Code of org.pdfsam.guiclient.gui.frames.JMainFrame

/*
* Created on 09-Nov-2007
* Copyright (C) 2006 by Andrea Vacondio.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
*  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.pdfsam.guiclient.gui.frames;



import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.io.File;
import java.net.URL;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import javax.swing.tree.DefaultMutableTreeNode;

import org.apache.commons.lang.time.DurationFormatUtils;
import org.apache.commons.lang.time.StopWatch;
import org.apache.log4j.Logger;
import org.pdfsam.console.business.dto.WorkDoneDataModel;
import org.pdfsam.guiclient.GuiClient;
import org.pdfsam.guiclient.business.ApplicationCloser;
import org.pdfsam.guiclient.business.Environment;
import org.pdfsam.guiclient.business.actions.LoadEnvironmentAction;
import org.pdfsam.guiclient.business.actions.SaveEnvironmentAction;
import org.pdfsam.guiclient.business.listeners.LogActionListener;
import org.pdfsam.guiclient.business.listeners.MainWindowListener;
import org.pdfsam.guiclient.business.listeners.mediators.ApplicationExitMediator;
import org.pdfsam.guiclient.business.listeners.mediators.TreeMediator;
import org.pdfsam.guiclient.business.listeners.mediators.UpdateCheckerMediator;
import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.gui.components.JMainMenuBar;
import org.pdfsam.guiclient.gui.panels.JButtonsPanel;
import org.pdfsam.guiclient.gui.panels.JInfoPanel;
import org.pdfsam.guiclient.gui.panels.JLogPanel;
import org.pdfsam.guiclient.gui.panels.JSettingsPanel;
import org.pdfsam.guiclient.gui.panels.JStatusPanel;
import org.pdfsam.guiclient.gui.panels.JTreePanel;
import org.pdfsam.guiclient.plugins.PlugInsLoader;
import org.pdfsam.guiclient.plugins.interfaces.AbstractPlugablePanel;
import org.pdfsam.guiclient.plugins.models.PluginDataModel;
import org.pdfsam.i18n.GettextResource;

/**
* Main frame
* @author Andrea Vacondio
*
*/
public class JMainFrame extends JFrame {

  private static final long serialVersionUID = -3858244069059677829L;

  private static final Logger log = Logger.getLogger(JMainFrame.class.getPackage().getName());
  private String DEFAULT_ICON = "/images/pdf.png";
  private String DEFAULT_ICON_16 = "/images/pdf16.png";
 
  private JSplashScreen screen;
  private Map<PluginDataModel, AbstractPlugablePanel> pluginsMap;
  private ApplicationExitMediator exitMediator;
  private UpdateCheckerMediator updateMediator;
  private JStatusPanel statusPanel;
  private JTreePanel treePanel;
  private JButtonsPanel buttonsPanel;
  private JPanel mainPanel = new JPanel(new CardLayout());
  private JScrollPane mainScrollPanel;
  private JSplitPane verticalSplitPane;
  private JSplitPane horizSplitPane;
  private JLogPanel logPanel;
 
  public JMainFrame(){
    StopWatch stopWatch = new StopWatch();
    stopWatch.start();
    log.info("Starting "+GuiClient.getApplicationName()+" Ver. "+GuiClient.getVersion());
    runSplash();
    ToolTipManager.sharedInstance().setDismissDelay (300000);
    initialize();
    closeSplash();
    stopWatch.stop();
    log.info(GuiClient.getApplicationName()+" Ver. "+GuiClient.getVersion()+" "+GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"started in ")+DurationFormatUtils.formatDurationWords(stopWatch.getTime(), true, true));
  }
  /**
   * initialization
   */
  private void initialize() {
    try{     
      //center(this,800,600);
      URL iconUrl = this.getClass().getResource("/images/pdf_"+GuiClient.getVersionType()+".png");
      URL iconUrl16 = this.getClass().getResource("/images/pdf_"+GuiClient.getVersionType()+"16.png");
      if(iconUrl == null){
        iconUrl = this.getClass().getResource(DEFAULT_ICON);
      }
      if(iconUrl16 == null){
        iconUrl16 = this.getClass().getResource(DEFAULT_ICON_16);
      }
      setIconImage(new ImageIcon(iconUrl).getImage());
          setTitle(GuiClient.getApplicationName()+" Ver. "+GuiClient.getVersion());
         
          //load plugins
          setSplashStep(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Loading plugins.."));
          PlugInsLoader pluginsLoader = new PlugInsLoader(Configuration.getInstance().getPluginAbsolutePath());
          pluginsMap = pluginsLoader.loadPlugins();
     
      //Info panel
      JInfoPanel infoPanel = new JInfoPanel(pluginsMap);
      PluginDataModel infoDataModel = new PluginDataModel(infoPanel.getPluginName(), infoPanel.getVersion(), infoPanel.getPluginAuthor(), infoPanel.getClass().getName());
      mainPanel.add(infoPanel,infoPanel.getPluginName());
     
          //Settings panel
          JSettingsPanel settingsPanel = new JSettingsPanel();
      PluginDataModel settingsDataModel = new PluginDataModel(settingsPanel.getPluginName(), settingsPanel.getVersion(), settingsPanel.getPluginAuthor(), settingsPanel.getClass().getName());
      mainPanel.add(settingsPanel,settingsPanel.getPluginName());
     
          //sets main panel
          mainPanel.setPreferredSize(new Dimension(670,500));
          for(AbstractPlugablePanel instance: pluginsMap.values()){
            mainPanel.add(instance,instance.getPluginName());
          }
         
          //status panel
          setSplashStep(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Building status bar.."));
          statusPanel = new JStatusPanel(new ImageIcon(iconUrl16),GuiClient.getApplicationName(),WorkDoneDataModel.MAX_PERGENTAGE);
          getContentPane().add(statusPanel,BorderLayout.PAGE_END);
          Configuration.getInstance().getConsoleServicesFacade().addExecutionObserver(statusPanel);
     
          //tree panel
          setSplashStep(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Building tree.."));
          treePanel = new JTreePanel(new DefaultMutableTreeNode(GuiClient.UNIXNAME+" "+GuiClient.getVersion()));
        for (PluginDataModel item : pluginsMap.keySet()) {
          treePanel.addToPlugsNode(item);
          }
          treePanel.addToRootNode(settingsDataModel);
          treePanel.addToRootNode(infoDataModel);
          treePanel.getTree().addTreeSelectionListener(new TreeMediator(this));
          treePanel.expand();
         
          //add info and settings to plugins map
          pluginsMap.put(settingsDataModel, settingsPanel);
          pluginsMap.put(infoDataModel, infoPanel);                 
         
          //menu
          setSplashStep(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Building menus.."));       

          Environment environment = new Environment(pluginsMap, treePanel);
      SaveEnvironmentAction saveAction = new SaveEnvironmentAction(environment, this);
      LoadEnvironmentAction loadAction = new LoadEnvironmentAction(environment, this);
          exitMediator = new ApplicationExitMediator(new ApplicationCloser(this));
          getRootPane().setJMenuBar(new JMainMenuBar(saveAction, loadAction, exitMediator));


          //buttons bar
          setSplashStep(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Building buttons bar.."));
          buttonsPanel = new JButtonsPanel(saveAction, loadAction, exitMediator, new LogActionListener());
          getContentPane().add(buttonsPanel,BorderLayout.PAGE_START)
         
          //set up check for updates mediator
          updateMediator = new UpdateCheckerMediator(statusPanel);
          if(Configuration.getInstance().isCheckForUpdates()){
            updateMediator.checkForUpdates(5000, false);
          }
          settingsPanel.setCheckUpdateMediator(updateMediator);
         
          //final set up
          mainScrollPanel = new JScrollPane(mainPanel);
          mainScrollPanel.setMinimumSize(new Dimension(100, 400));
         
          logPanel = new JLogPanel();
         
          horizSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePanel, mainScrollPanel);
          horizSplitPane.setOneTouchExpandable(true);
          horizSplitPane.setDividerLocation(155);
         
          verticalSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, horizSplitPane,logPanel);
          verticalSplitPane.setOneTouchExpandable(true);
          verticalSplitPane.setResizeWeight(1.0);
          verticalSplitPane.setDividerLocation(0.75);
         
          //load the default env if set
          String defaultEnvString = Configuration.getInstance().getDefaultEnvironment();
          if(defaultEnvString!=null && defaultEnvString.length()>0){
            File defaultEnv = new File(defaultEnvString);
            if(defaultEnv != null && defaultEnv.exists() && defaultEnv.isFile()){
              log.info(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Loading default environment."));
              environment.loadJobs(defaultEnv);
            }
          }
          getContentPane().add(verticalSplitPane,BorderLayout.CENTER);
         
          setSize(640, 480);
      setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      addWindowListener(new MainWindowListener(this));

    }catch(Exception e){
      log.fatal(GettextResource.gettext(Configuration.getInstance().getI18nResourceBundle(),"Error starting pdfsam."),e);
    }
   
  } 
   
   /**
     * Run a splash screen
     */
    private void runSplash(){
        screen = new JSplashScreen("pdfsam loader", "Initialization..");
      screen.setMaximumBarValue(5);
        Runnable runner = new Runnable() {
          public void run() {           
            screen.setVisible(true);
          }
        };
        SwingUtilities.invokeLater(runner);
    }
   
    /**
     * close the splash screen
     */
    private void closeSplash(){
        if(screen != null){
        screen.setVisible(false);                    
        screen.dispose();
      }
    }
   
    /**
     * Sets the splash text and increment the progress bar
     * @param message
     */
    private void setSplashStep(String message){
      if(screen != null){
        screen.setText(message);
        screen.addBarValue();
      }
    }
  /**
   * @return the statusPanel
   */
  public JStatusPanel getStatusPanel() {
    return statusPanel;
  }
  /**
   * @return the treePanel
   */
  public JTreePanel getTreePanel() {
    return treePanel;
  }
  /**
   * @return the buttonsPanel
   */
  public JButtonsPanel getButtonsPanel() {
    return buttonsPanel;
  }
  /**
   * @return the pluginsMap
   */
  public Map<PluginDataModel, AbstractPlugablePanel> getPluginsMap() {
    return pluginsMap;
  }
  /**
   * @return the mainPanel
   */
  public JPanel getMainPanel() {
    return mainPanel;
  }   
   
  /**
   * sets the minimum size of the scroll pane
   * @param d
   */
  public void setMainPanelPreferredSize(Dimension d){
    mainPanel.setPreferredSize(d);
  }
 
  /**
   * @return
   * @see javax.swing.JSplitPane#getDividerLocation()
   */
  public int getVerticalDividerLocation() {
    return verticalSplitPane.getDividerLocation();
  }
 
  /**
   * @param location
   * @see javax.swing.JSplitPane#setDividerLocation(int)
   */
  public void setVerticalDividerLocation(int location) {
    verticalSplitPane.setDividerLocation(location);
  }
 
  /**
   * @return
   * @see javax.swing.JSplitPane#getDividerLocation()
   */
  public int getHorizontalDividerLocation() {
    return horizSplitPane.getDividerLocation();
  }
 
  /**
   * @param location
   * @see javax.swing.JSplitPane#setDividerLocation(int)
   */
  public void setHorizontalDividerLocation(int location) {
    horizSplitPane.setDividerLocation(location);
  }
  /**
   * @return
   * @see java.awt.Component#getSize()
   */
  public Dimension getHorizontalDividerDimension() {
    return horizSplitPane.getSize();
  }
  /**
   * @param d
   * @see java.awt.Component#setSize(java.awt.Dimension)
   */
  public void setHorizontalDividerDimension(Dimension d) {
    horizSplitPane.setSize(d);
  }
  /**
   * @return
   * @see java.awt.Component#getSize()
   */
  public Dimension getVerticalDividerDimension() {
    return verticalSplitPane.getSize();
  }
  /**
   * @param d
   * @see java.awt.Component#setSize(java.awt.Dimension)
   */
  public void setVerticalDividerDimension(Dimension d) {
    verticalSplitPane.setSize(d);
  }
 
 
 
}
TOP

Related Classes of org.pdfsam.guiclient.gui.frames.JMainFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.