Package org.pentaho.reporting.engine.classic.demo.ancient.demo.swingicons

Source Code of org.pentaho.reporting.engine.classic.demo.ancient.demo.swingicons.SwingIconsDemoPanel

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 Lesser General Public License for more details.
*
* Copyright (c) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors.  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.demo.ancient.demo.swingicons;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.AbstractFileSelectionAction;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.action.ActionButton;
import org.pentaho.reporting.engine.classic.core.modules.misc.configstore.base.ConfigFactory;
import org.pentaho.reporting.engine.classic.core.modules.misc.configstore.base.ConfigStorage;
import org.pentaho.reporting.engine.classic.core.util.ImageUtils;
import org.pentaho.reporting.libraries.base.config.Configuration;
import org.pentaho.reporting.libraries.base.config.DefaultConfiguration;
import org.pentaho.reporting.libraries.base.util.ObjectUtilities;

/**
* A demonstration application. <P> This demo is written up in the JFreeReport PDF Documentation.  Please notify David
* Gilbert (david.gilbert@object-refinery.com) if you need to make changes to this file. <P> To run this demo, you need
* to have the Java Look and Feel Icons jar file on your classpath.
*
* @author David Gilbert
*/
public class SwingIconsDemoPanel extends JPanel
{
  private static final Log logger = LogFactory.getLog(SwingIconsDemoPanel.class);

  private class SelectRepositoryFileAction extends AbstractFileSelectionAction
  {
    private File selectedFile;

    protected SelectRepositoryFileAction()
    {
      super(SwingIconsDemoPanel.this);
      putValue(Action.NAME, "Select graphics archive ..");
      this.putValue(Action.SMALL_ICON, ImageUtils.createTransparentIcon(16, 16));
      this.putValue("ICON24", ImageUtils.createTransparentIcon(24, 24));
    }

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(final ActionEvent e)
    {
      selectedFile = performSelectFile(selectedFile, JFileChooser.OPEN_DIALOG, true);
      if (selectedFile != null)
      {
        if (selectedFile.exists() && selectedFile.canRead() && selectedFile.isFile())
        {
          try
          {
            loadData(selectedFile.toURL());
          }
          catch (MalformedURLException ex)
          {
            logger.warn("Unable to form local file URL. Is there no local filesystem?");
          }
        }
      }
    }

    /**
     * Returns a descriptive text describing the file extension.
     *
     * @return the file description.
     */
    protected String getFileDescription()
    {
      return "Java Look and Feel Graphics Repository";
    }

    /**
     * Returns the file extension that should be used for the operation.
     *
     * @return the file extension.
     */
    protected String getFileExtension()
    {
      return ".jar";
    }
  }

  /**
   * The data for the report.
   */
  private SwingIconsDemoTableModel data;

  /**
   * Constructs the demo application.
   */
  public SwingIconsDemoPanel()
  {
    data = new SwingIconsDemoTableModel();

    setLayout(new BorderLayout());
    setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
    final JTable table = new JTable(data);
    table.setDefaultRenderer(Image.class, new ImageCellRenderer());
    table.setRowHeight(26);
    final JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane, BorderLayout.CENTER);

    final JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.TRAILING));
    buttonPanel.add(new ActionButton(new SelectRepositoryFileAction()));
    add(buttonPanel, BorderLayout.SOUTH);

    loadData(findDataFile());
  }

  protected void loadData(final URL sourceURL)
  {
    if (sourceURL != null)
    {
      // on success update the config path, else clear the path.
      if (this.data.readData(sourceURL))
      {
        storeToConfiguration(sourceURL);
        return;
      }
      else
      {
        final String message =
            ("There was a problem while loading 'jlfgr-1_0.jar'.\n"
                + "A URL was given, but the contents seems to be invalid.\n\n"
                + "You may download this jar-file from: \n"
                + "http://java.sun.com/developer/techDocs/hi/repository/");
        logger.warn(message);
      }
    }
    this.data.clear();
    storeToConfiguration(null);
  }

  /**
   * Loads the URL of the Graphics Repository from the local configuration.
   *
   * @return the loaded URL or null, if the configuration did not hold an entry.
   */
  protected URL loadFromConfiguration()
  {
    final String configPath = ConfigFactory.encodePath("SwingIconsDemo-TableModel");
    final ConfigStorage cs = ConfigFactory.getInstance().getUserStorage();
    if (cs.isAvailable(configPath) == false)
    {
      return null;
    }
    try
    {
      final Configuration p = cs.load(configPath, null);
      final String property = p.getConfigProperty("repository-path");
      if (property == null)
      {
        return null;
      }
      return new URL(property);
    }
    catch (Exception e)
    {
      return null;
    }
  }

  protected void storeToConfiguration(final URL url)
  {
    final String configPath = ConfigFactory.encodePath("SwingIconsDemo-TableModel");
    final ConfigStorage cs = ConfigFactory.getInstance().getUserStorage();
    try
    {
      final DefaultConfiguration p = new DefaultConfiguration();
      if (url != null)
      {
        p.setConfigProperty("repository-path", url.toExternalForm());
      }
      cs.store(configPath, p);
    }
    catch (Exception e)
    {
      // ignored ..
      logger.debug("Unable to store the configuration.", e);
    }
  }

  /**
   * Searches for the 'jlfgr_1_0.jar' file on the classpath, in the classpath directories and the working directory. If
   * that fails, the user is asked to choose the correct file.
   *
   * @return the URL to the graphics repository.
   */
  private URL findDataFile()
  {
    final URL url = ObjectUtilities.getResource("jlfgr-1_0.jar", SwingIconsDemoPanel.class);
    if (url != null)
    {
      return url;
    }
    final URL urlFromConfig = loadFromConfiguration();
    if (urlFromConfig != null)
    {
      return urlFromConfig;
    }

    final File localFile = new File("jlfgr-1_0.jar");
    if (localFile.exists() && localFile.canRead() && localFile.isFile())
    {
      try
      {
        return localFile.toURL();
      }
      catch (MalformedURLException e)
      {
        logger.warn("Unable to form local file URL. Is there no local filesystem?");
      }
    }

    final File classpathFile = findFileOnClassPath("jlfgr-1_0.jar");
    if (classpathFile != null)
    {
      if (classpathFile.exists() && classpathFile.canRead() && classpathFile.isFile())
      {
        try
        {
          return classpathFile.toURL();
        }
        catch (MalformedURLException e)
        {
          logger.warn("Unable to form local file URL. Is there no local filesystem?");
        }
      }
    }

    if (warnedUser == false && GraphicsEnvironment.isHeadless() == false)
    {
      warnedUser = true;
      final String title = "Unable to load the icons.";
      final String message = ("Unable to find 'jlfgr-1_0.jar'\n"
          + "Please make sure you have the Java Look and Feel Graphics Repository in "
          + "in your classpath, the same directory as the JFreeReport-jar files or in "
          + "the current working directory.\n\n"
          + "You may download this jar-file from: \n"
          + "http://java.sun.com/developer/techDocs/hi/repository/");
      JOptionPane.showMessageDialog(this, message, title, JOptionPane.ERROR_MESSAGE);
    }
    return null;
  }

  private static boolean warnedUser;

  /**
   * Returns a reference to a file with the specified name that is located somewhere on the classpath.  The code for
   * this method is an adaptation of code supplied by Dave Postill.
   *
   * @param name the filename.
   * @return a reference to a file or <code>null</code> if no file could be found.
   */
  public static File findFileOnClassPath(final String name)
  {

    final String classpath = System.getProperty("java.class.path");
    final String pathSeparator = System.getProperty("path.separator");

    final StringTokenizer tokenizer = new StringTokenizer(classpath, pathSeparator);

    while (tokenizer.hasMoreTokens())
    {
      final String pathElement = tokenizer.nextToken();

      final File directoryOrJar = new File(pathElement);
      final File absoluteDirectoryOrJar = directoryOrJar.getAbsoluteFile();

      if (absoluteDirectoryOrJar.isFile())
      {
        final File target = new File(absoluteDirectoryOrJar.getParent(), name);
        if (target.exists())
        {
          return target;
        }
      }
      else
      {
        final File target = new File(directoryOrJar, name);
        if (target.exists())
        {
          return target;
        }
      }

    }
    return null;

  }

  public SwingIconsDemoTableModel getData()
  {
    return data;
  }
}
TOP

Related Classes of org.pentaho.reporting.engine.classic.demo.ancient.demo.swingicons.SwingIconsDemoPanel

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.