Package org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs

Source Code of org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs.RepositoryTreeDialog$NewFolderAction

/*!
* 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) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.TreePath;

import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileType;
import org.pentaho.reporting.designer.core.util.exceptions.UncaughtExceptionsModel;
import org.pentaho.reporting.designer.extensions.pentaho.repository.Messages;
import org.pentaho.reporting.designer.extensions.pentaho.repository.model.RepositoryTreeModel;
import org.pentaho.reporting.designer.extensions.pentaho.repository.util.RepositoryTreeCellRenderer;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.libraries.designtime.swing.CommonDialog;
import org.pentaho.reporting.libraries.pensol.WebSolutionFileObject;

public class RepositoryTreeDialog extends CommonDialog
{
  private class ShowHiddenFilesAction extends AbstractAction
  {
    private ShowHiddenFilesAction()
    {
      putValue(Action.NAME, Messages.getInstance().getString("ShowHiddenFilesAction.Name"));
      setSelected(Boolean.FALSE);
    }

    private Boolean getSelected()
    {
      return (Boolean) this.getValue(Action.SELECTED_KEY);
    }

    private void setSelected(final Boolean selected)
    {
      this.putValue (Action.SELECTED_KEY, selected);
    }

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(final ActionEvent e)
    {
      repositoryTreeModel.setShowHiddenFiles(Boolean.TRUE.equals(getSelected()));
    }
  }

  private class DoubleClickHandler extends MouseAdapter
  {
    private DoubleClickHandler()
    {
    }

    public void mouseClicked(final MouseEvent e)
    {
      if (e.getClickCount() <= 1)
      {
        return;
      }
      try
      {
        final TreePath selectionPath = repositoryBrowser.getSelectionPath();
        if (selectionPath == null)
        {
          return;
        }

        final Object o = repositoryBrowser.getLastSelectedPathComponent();
        if (o instanceof FileObject)
        {
          final FileObject treeNode = (FileObject) o;
          if (repositoryBrowser.isExpanded(selectionPath) &&
              treeNode.getType() == FileType.FOLDER)
          {
            setSelectedPath(treeNode);
            setConfirmed(true);
            setVisible(false);
          }
        }
      }
      catch (FileSystemException fse)
      {
        // ignore ..
      }
    }
  }

  private class NewFolderAction extends AbstractAction
  {
    /**
     * Defines an <code>Action</code> object with a default
     * description string and default icon.
     */
    private NewFolderAction()
    {
      final URL location = RepositoryTreeDialog.class.getResource
          ("/org/pentaho/reporting/designer/extensions/pentaho/repository/resources/newfolder.png");
      putValue(Action.SMALL_ICON, new ImageIcon(location));
      putValue(Action.SHORT_DESCRIPTION, Messages.getInstance().getString("SolutionRepositoryTreeDialog.NewFolderAction.Name"));
    }

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(final ActionEvent e)
    {
      final CreateNewRepositoryFolderDialog newFolderDialog = new CreateNewRepositoryFolderDialog(RepositoryTreeDialog.this);

      if (!newFolderDialog.performEdit())
      {
        return;
      }

      final TreePath selectionPath = repositoryBrowser.getSelectionPath();
      if (selectionPath == null)
      {
        return;
      }

      final FileObject treeNode = (FileObject) selectionPath.getLastPathComponent();
      if (!StringUtils.isEmpty(newFolderDialog.getName()))
      {
        final Component glassPane = SwingUtilities.getRootPane(RepositoryTreeDialog.this).getGlassPane();
        try
        {
          glassPane.setVisible(true);
          glassPane.setCursor(new Cursor(Cursor.WAIT_CURSOR));
          final FileObject child = treeNode.resolveFile(newFolderDialog.getFolderName());
          if (child instanceof WebSolutionFileObject)
          {
            final WebSolutionFileObject webSolutionFileObject = (WebSolutionFileObject) child;
            webSolutionFileObject.setDescription(newFolderDialog.getDescription());
          }
          child.createFolder();
          repositoryTreeModel.fireTreeDataChanged();
          repositoryBrowser.setSelectionPath(selectionPath.getParentPath().pathByAddingChild(child));
          setDirty(true);
        }
        catch (Exception e1)
        {
          UncaughtExceptionsModel.getInstance().addException(e1);
        }
        finally
        {
          glassPane.setVisible(false);
          glassPane.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }
      }
    }
  }

  private RepositoryTreeModel repositoryTreeModel;
  private JTree repositoryBrowser;
  private boolean dirty;
  private boolean addNewButtonPanel;

  public RepositoryTreeDialog(final JDialog dialog,
                              final boolean addNewButtonPanel)
  {
    super(dialog);
    init(addNewButtonPanel);
  }

  public RepositoryTreeDialog(final boolean addNewButtonPanel)
  {
    init(addNewButtonPanel);
  }

  public RepositoryTreeDialog(final Frame owner,
                              final boolean addNewButtonPanel)
  {
    super(owner);
    init(addNewButtonPanel);
  }

  protected void init(final boolean addNewButtonPanel)
  {

    setModal(true);
    setTitle(Messages.getInstance().getString("SolutionRepositoryTreeDialog.Title"));

    this.addNewButtonPanel = addNewButtonPanel;

    this.repositoryTreeModel = new RepositoryTreeModel();

    repositoryBrowser = new JTree(repositoryTreeModel);
    repositoryBrowser.setCellRenderer(new RepositoryTreeCellRenderer());
    repositoryBrowser.addMouseListener(new DoubleClickHandler());
    repositoryBrowser.setRootVisible(true);
    repositoryBrowser.setShowsRootHandles(true);
    repositoryBrowser.setToggleClickCount(1);

    super.init();
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  }

  protected String getDialogId()
  {
    return "ReportDesigner.Pentaho.RepositoryTree";
  }

  public FileObject getSelectedPath()
  {
    final TreePath selectionPath = repositoryBrowser.getSelectionPath();
    if (selectionPath == null)
    {
      return null;
    }
    if (selectionPath.getLastPathComponent() instanceof FileObject)
    {
      return (FileObject) selectionPath.getLastPathComponent();
    }
    return null;
  }


  public void setSelectedPath(final FileObject path) throws FileSystemException
  {
    final TreePath path1 = repositoryTreeModel.getTreePathForSelection(path, null);
    if (path1 != null)
    {
      repositoryBrowser.setSelectionPath(path1);
      repositoryBrowser.scrollPathToVisible(path1);
    }
    else
    {
      repositoryBrowser.clearSelection();
    }
  }

  public FileObject performSelectLocation(final FileObject fileSystemRoot,
                                          final String[] filter,
                                          final FileObject publishLocation) throws FileSystemException
  {
    repositoryTreeModel.setShowFoldersOnly(true);
    repositoryTreeModel.setFileSystemRoot(fileSystemRoot);
    repositoryTreeModel.setFilters(filter);
//    repositoryBrowser.setModel(null);
//    repositoryBrowser.setModel(repositoryTreeModel);
    repositoryTreeModel.fireTreeDataChanged();
   
    dirty = false;
    setSelectedPath(publishLocation);
    if (performEdit())
    {
      return getSelectedPath();
    }
    return null;
  }

  protected void setDirty(final boolean dirty)
  {
    this.dirty = dirty;
  }

  public boolean isDirty()
  {
    return dirty;
  }

  /**
   * @noinspection ReuseOfLocalVariable
   */
  protected Component createContentPane()
  {
    final JScrollPane treeView = new JScrollPane(repositoryBrowser);
    final JPanel newFolderButtonPanel = new JPanel(new BorderLayout());

    final JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    if (addNewButtonPanel)
    {
      final JButton newFolder = new JButton(new NewFolderAction());
      newFolder.setBorder(BorderFactory.createEmptyBorder());
      final JLabel label = new JLabel(Messages.getInstance().getString("SolutionRepositoryTreeDialog.SelectLocation"));
      label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 80));
      newFolderButtonPanel.add(label, BorderLayout.CENTER);
      newFolderButtonPanel.add(newFolder, BorderLayout.EAST);

      c.insets = new Insets(2, 10, 0, 10);
      c.anchor = GridBagConstraints.WEST;
      c.gridx = 0;
      c.gridy = 0;
      c.fill = GridBagConstraints.HORIZONTAL;
      panel.add(newFolderButtonPanel, c);
    }

    c = new GridBagConstraints();
    c.insets = new Insets(0, 10, 5, 10);
    c.gridx = 0;
    c.gridy = 1;
    c.fill = GridBagConstraints.BOTH;
    c.weightx = 1.0;
    c.weighty = 1.0;
    panel.add(treeView, c);


    c = new GridBagConstraints();
    c.anchor = GridBagConstraints.WEST;
    c.insets = new Insets(0, 10, 5, 10);
    c.gridx = 0;
    c.gridy = 2;
    c.fill = GridBagConstraints.HORIZONTAL;
    panel.add(new JCheckBox(new ShowHiddenFilesAction()));
    return panel;
  }


}
TOP

Related Classes of org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs.RepositoryTreeDialog$NewFolderAction

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.