Package org.damour.base.client.ui.repository

Source Code of org.damour.base.client.ui.repository.FileManagerPanel

package org.damour.base.client.ui.repository;

import org.damour.base.client.images.BaseImageBundle;
import org.damour.base.client.objects.File;
import org.damour.base.client.objects.Folder;
import org.damour.base.client.objects.PermissibleObject;
import org.damour.base.client.objects.RepositoryTreeNode;
import org.damour.base.client.ui.buttons.IconButton;
import org.damour.base.client.ui.toolbar.ToolBar;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TreeItem;
import com.google.gwt.user.client.ui.TreeListener;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class FileManagerPanel extends VerticalPanel implements TreeListener, IRepositoryCallback {

  IconButton openImageButton = new IconButton(null, false, BaseImageBundle.images.open_32(), BaseImageBundle.images.open_32(),
      BaseImageBundle.images.open_32(), BaseImageBundle.images.open_disabled_32());
  IconButton downloadImageButton = new IconButton(null, false, BaseImageBundle.images.download(), BaseImageBundle.images.download(),
      BaseImageBundle.images.download(), BaseImageBundle.images.download_disabled());
  IconButton uploadFileButton = new IconButton(null, false, BaseImageBundle.images.upload(), BaseImageBundle.images.upload(), BaseImageBundle.images.upload(),
      BaseImageBundle.images.upload_disabled());
  IconButton uploadPhotoButton = new IconButton(null, false, BaseImageBundle.images.upload(), BaseImageBundle.images.upload(), BaseImageBundle.images.upload(),
      BaseImageBundle.images.upload_disabled());
  IconButton propertiesImageButton = new IconButton(null, false, BaseImageBundle.images.properties16(), BaseImageBundle.images.properties16(),
      BaseImageBundle.images.properties16(), BaseImageBundle.images.properties_disabled_16());
  IconButton newFolderImageButton = new IconButton(null, false, BaseImageBundle.images.newFolder(), BaseImageBundle.images.newFolder(),
      BaseImageBundle.images.newFolder(), BaseImageBundle.images.newFolder_disabled());
  IconButton renameImageButton = new IconButton(null, false, BaseImageBundle.images.rename(), BaseImageBundle.images.rename(), BaseImageBundle.images.rename(),
      BaseImageBundle.images.rename_disabled());
  IconButton deleteImageButton = new IconButton(null, false, BaseImageBundle.images.delete(), BaseImageBundle.images.delete(), BaseImageBundle.images.delete(),
      BaseImageBundle.images.delete_disabled());

  RepositoryTree repositoryTree;
  boolean showFoldersOnly = false;
  // a hidden file starts with a dot (.)
  boolean showHiddenFiles = false;

  public FileManagerPanel(String title) {
    this(title, null, false);
  }

  public FileManagerPanel(String title, RepositoryTreeNode treeNode, boolean showFoldersOnly) {
    this.showFoldersOnly = showFoldersOnly;
    add(buildToolbar(title));
    add(buildRepositoryTree(treeNode));
    setCellHeight(repositoryTree, "100%");
  }

  private RepositoryTree buildRepositoryTree(RepositoryTreeNode treeNode) {
    repositoryTree = new RepositoryTree(treeNode, this, showFoldersOnly, showHiddenFiles);
    repositoryTree.addTreeListener(this);
    repositoryTree.setHeight("100%");
    return repositoryTree;
  }

  private Widget buildToolbar(String title) {
    ToolBar toolbar = new ToolBar();
    toolbar.add(new Label(title, false));

    IconButton reloadImageButton = new IconButton(null, false, BaseImageBundle.images.refresh_16(), BaseImageBundle.images.refresh_16(),
        BaseImageBundle.images.refresh_16(), BaseImageBundle.images.refresh_disabled_16());
    reloadImageButton.setTitle("Refresh File Manager");
    reloadImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        repositoryTree.fetchRepositoryTree(FileManagerPanel.this);
      }
    });
    toolbar.add(reloadImageButton);

    final IconButton sortImageButton = new IconButton(null, false, BaseImageBundle.images.sort(), BaseImageBundle.images.sort(), BaseImageBundle.images.sort(),
        BaseImageBundle.images.sort());
    sortImageButton.setTitle("Sort Files by Name");
    sortImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        repositoryTree.setAnimationEnabled(false);
        repositoryTree.setSortAToZ(!repositoryTree.isSortAToZ(), FileManagerPanel.this);
        repositoryTree.setAnimationEnabled(true);
      }
    });
    toolbar.add(sortImageButton);

    final IconButton toggleHiddenFilesImageButton = new IconButton(null, false, BaseImageBundle.images.showHide16(), BaseImageBundle.images.showHide16(),
        BaseImageBundle.images.showHide16(), BaseImageBundle.images.showHide16());
    toggleHiddenFilesImageButton.setTitle("Show/Hide Hidden Files");
    toggleHiddenFilesImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        repositoryTree.setAnimationEnabled(false);
        repositoryTree.setShowHiddenFiles(!repositoryTree.isShowHiddenFiles(), FileManagerPanel.this);
        repositoryTree.setAnimationEnabled(true);
      }
    });
    toolbar.add(toggleHiddenFilesImageButton);

    propertiesImageButton.setEnabled(false);
    propertiesImageButton.setTitle("Properties");
    propertiesImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        ManageObjectPropertiesCommand cmd = new ManageObjectPropertiesCommand((PermissibleObject) repositoryTree.getLastItem().getUserObject());
        cmd.execute();
      }
    });
    toolbar.add(propertiesImageButton);

    newFolderImageButton.setEnabled(false);
    newFolderImageButton.setTitle("Create New Folder");
    newFolderImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        CreateNewFolderCommand cmd = new CreateNewFolderCommand(repositoryTree, FileManagerPanel.this);
        cmd.execute();
      }
    });
    toolbar.add(newFolderImageButton);

    renameImageButton.setEnabled(false);
    renameImageButton.setTitle("Rename");
    renameImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        RenameObjectCommand cmd = new RenameObjectCommand((PermissibleObject) repositoryTree.getLastItem().getUserObject(), FileManagerPanel.this);
        cmd.execute();

      }
    });
    toolbar.add(renameImageButton);

    deleteImageButton.setEnabled(false);
    deleteImageButton.setTitle("Delete");
    deleteImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        DeleteObjectCommand cmd = new DeleteObjectCommand((PermissibleObject) repositoryTree.getLastItem().getUserObject(), FileManagerPanel.this);
        cmd.execute();
      }
    });
    toolbar.add(deleteImageButton);

    openImageButton.setEnabled(false);
    openImageButton.setTitle("Open File");
    openImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        OpenFileCommand cmd = new OpenFileCommand((File) repositoryTree.getLastItem().getUserObject(), false);
        cmd.execute();
      }
    });
    toolbar.add(openImageButton);

    uploadFileButton.setEnabled(false);
    uploadFileButton.setTitle("Upload File to Selected Folder");
    uploadFileButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        UploadFileCommand cmd = new UploadFileCommand((PermissibleObject) repositoryTree.getLastItem().getUserObject(), FileManagerPanel.this);
        cmd.execute();
      }
    });
    toolbar.add(uploadFileButton);

    downloadImageButton.setEnabled(false);
    downloadImageButton.setTitle("Download File");
    downloadImageButton.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        DownloadFileCommand cmd = new DownloadFileCommand((File) repositoryTree.getLastItem().getUserObject());
        cmd.execute();
      }
    });
    toolbar.add(downloadImageButton);

    Label spacer = new Label();
    toolbar.add(spacer);
    toolbar.setCellWidth(spacer, "100%");
    return toolbar;
  }

  private void updateButtonState(TreeItem item) {
    // update button state
    openImageButton.setEnabled(item != null && item.getUserObject() != null && item.getUserObject() instanceof File);
    downloadImageButton.setEnabled(item != null && item.getUserObject() != null && item.getUserObject() instanceof File);
    uploadFileButton.setEnabled(item != null);
    uploadPhotoButton.setEnabled(item != null);
    propertiesImageButton.setEnabled(item != null && item.getUserObject() != null && item.getUserObject() instanceof PermissibleObject);
    newFolderImageButton.setEnabled(item != null);
    renameImageButton.setEnabled(item != null && item.getUserObject() != null && item.getUserObject() instanceof PermissibleObject);
    deleteImageButton.setEnabled(item != null && item.getUserObject() != null && item.getUserObject() instanceof PermissibleObject);
  }

  public void onTreeItemSelected(TreeItem item) {
    updateButtonState(item);
    if (item.getUserObject() != null && item.getUserObject() instanceof Folder) {
      item.setSelected(true);
    }
  }

  public void onTreeItemStateChanged(TreeItem item) {
    updateButtonState(item);
  }

  public void repositoryLoaded() {
    updateButtonState(repositoryTree.getLastItem());
  }

  public void objectRenamed(PermissibleObject object) {
    repositoryTree.fetchRepositoryTree(this);
  }

  public void fileUploaded(String id) {
    repositoryTree.setLastItemId(new Long(id));
    repositoryTree.fetchRepositoryTree(this);
  }

  public void fileDeleted() {
    repositoryTree.fetchRepositoryTree(this);
  }

  public RepositoryTree getRepositoryTree() {
    return repositoryTree;
  }

}
TOP

Related Classes of org.damour.base.client.ui.repository.FileManagerPanel

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.