Package org.freeplane.plugin.workspace.nodes

Source Code of org.freeplane.plugin.workspace.nodes.DefaultFileNode

package org.freeplane.plugin.workspace.nodes;

import java.awt.Component;
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.DefaultTreeCellRenderer;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.util.Compat;
import org.freeplane.core.util.LogUtils;
import org.freeplane.features.mapio.MapIO;
import org.freeplane.features.mode.Controller;
import org.freeplane.plugin.workspace.URIUtils;
import org.freeplane.plugin.workspace.WorkspaceController;
import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu;
import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder;
import org.freeplane.plugin.workspace.dnd.IWorkspaceTransferableCreator;
import org.freeplane.plugin.workspace.dnd.WorkspaceTransferable;
import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener;
import org.freeplane.plugin.workspace.event.WorkspaceActionEvent;
import org.freeplane.plugin.workspace.io.IFileSystemRepresentation;
import org.freeplane.plugin.workspace.io.annotation.ExportAsAttribute;
import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode;
import org.freeplane.plugin.workspace.model.IMutableLinkNode;

/**
*
*/
public class DefaultFileNode extends AWorkspaceTreeNode implements IWorkspaceNodeActionListener, IWorkspaceTransferableCreator, IFileSystemRepresentation, IMutableLinkNode {
  private static final Icon DEFAULT_ICON = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/text-x-preview.png"));
  private static final Icon NOT_EXISTING = new ImageIcon(AWorkspaceTreeNode.class.getResource("/images/16x16/cross.png"));
  private static Icon APPLICATION_ICON = new ImageIcon(ResourceController.class.getResource("/images/Freeplane_frame_icon.png"));
      //new ImageIcon(ResourceController.class.getResource("/images/docear16.png"));
 
 
  private static final long serialVersionUID = 1L;
 
  private static WorkspacePopupMenu popupMenu = null;
 
 
  private File file;
  private boolean orderDescending;
  private Icon icon = null;
 
  /***********************************************************************************
   * CONSTRUCTORS
   **********************************************************************************/

  /**
   * @param name
   */
  public DefaultFileNode(final String name, final File file) {
    super("physical_file");
    this.setName(name);
    this.file = file;
    icon = WorkspaceController.getCurrentModeExtension().getView().getNodeTypeIconManager().getIconForNode(this);
  }

  /***********************************************************************************
   * METHODS
   **********************************************************************************/
 
  public boolean rename(final String name) {
    File newFile = new File(getFile().getParentFile(), name);
    if(getFile().renameTo(newFile)) {
      this.file = newFile;
      icon = WorkspaceController.getCurrentModeExtension().getView().getNodeTypeIconManager().getIconForNode(this);
      return true;
    }
    return false;
  }
 
  public void delete() {
    getFile().delete();
  }
 
  public void relocateFile(final File parentFolder) {
    File newFile = new File(parentFolder, getName());
    if(newFile.exists()) {
      this.file = newFile;
    }
  }
 
//  private void copyFileContent(File source, File destination) {
//    try {
//      InputStream in = new DataInputStream(new FileInputStream(source));   
//      DataOutputStream out = new DataOutputStream(new FileOutputStream(destination));
//      byte[] buffer = new byte[1024];
//      int len = in.read(buffer);
//      while (len != -1) {
//        out.write(buffer, 0, len);
//        len = in.read(buffer);
//      }
//      in.close();
//      out.close();
//    }
//    catch (FileNotFoundException e) {
//      e.printStackTrace();
//    }
//    catch (IOException e) {
//      e.printStackTrace();
//    }
//  }
// 
//  protected void copyFileTo(File file, File parentFolder) throws IOException {
//    if(parentFolder.isDirectory()) {       
//      File target = new File(parentFolder,file.getName());
//      if(file.isDirectory()) {
//        if(target.mkdir()) {
//          for(File child : file.listFiles()) {
//            copyFileTo(child, target);
//          }
//        }
//        else {
//          throw new IOException("Could not create folder: "+target);
//        }
//      }
//      else {
//        if(target.createNewFile()) {
//          copyFileContent(file, target);
//        }
//        else {
//          throw new IOException("Could not create file: "+target);
//        }
//      }
//    }
//    else {
//      throw new IOException("File "+parentFolder+" is no folder");
//    } 
//  }
// 
//  /**
//   * @param file
//   * @throws IOException
//   */
//  public void copyTo(File destDirectory) throws IOException {
//    assert(destDirectory != null);
//    if(getFile().equals(destDirectory)) {
//      return;
//    }
//   
//    if(destDirectory.isDirectory()) {
//      try {
//        if(getFile().isDirectory()) {
//          FileUtils.copyDirectoryToDirectory(getFile(), destDirectory);
//        }
//        else {
//          FileUtils.copyFileToDirectory(getFile(), destDirectory);
//        }
//      }
//      catch (FileExistsException e) {
//        LogUtils.info("Exeption in org.freeplane.plugin.workspace.nodes.DefaultFileNode.copyTo(destDirectory): "+e.getMessage());
//      }
//    }
//    else {     
//      copyTo(destDirectory.getParentFile());
//    }   
//  }
// 
//  public void moveTo(File destDirectory) throws IOException {
//    assert(destDirectory != null);
//    if(getFile().equals(destDirectory)) {
//      return;
//    }
//    if(destDirectory.isDirectory()) {
//      try {
//        if(getFile().isDirectory()) {       
//          FileUtils.moveDirectoryToDirectory(getFile(), destDirectory, true);
//        }
//        else {
//          FileUtils.moveFileToDirectory(getFile(), destDirectory, true);
//        }
//      }
//      catch (FileExistsException e) {
//        LogUtils.info("Exeption in org.freeplane.plugin.workspace.nodes.DefaultFileNode.moveTo(destDirectory)"+e.getMessage());
//      }
//    }
//    else {
//      moveTo(destDirectory.getParentFile());
//    }
//  }
 
  public boolean isEditable() {
    return false;
  }
 
  public boolean setIcons(DefaultTreeCellRenderer renderer) {
    if(!getFile().exists()) {
      renderer.setLeafIcon(NOT_EXISTING);
      renderer.setOpenIcon(NOT_EXISTING);
      renderer.setClosedIcon(NOT_EXISTING);
      return true;
    }   
   
    if(icon == null) {
      icon = FileSystemView.getFileSystemView().getSystemIcon(getFile());
      renderer.setLeafIcon(icon);
      return true;
    }
    // the next steps should not get reached
    if(icon == null) {
      renderer.setLeafIcon(DEFAULT_ICON);
    } else {
      renderer.setLeafIcon(icon);
    }
    return true;
  }
 
  protected AWorkspaceTreeNode clone(DefaultFileNode node) {
    return super.clone(node);
  }
   
  /***********************************************************************************
   * REQUIRED METHODS FOR INTERFACES
   **********************************************************************************/
 
  public File getFile() {
    return this.file;
  }
 
  public void handleAction(WorkspaceActionEvent event) { 
    if(event.getType() == WorkspaceActionEvent.WSNODE_CHANGED) {
      if(changeName(event.getBaggage().toString(), true)) {
        event.consume();
      }
    }
    else if(event.getType() == WorkspaceActionEvent.WSNODE_OPEN_DOCUMENT) {
     
      if(getFile() != null) {
       
        if(!file.exists()) {
//          WorkspaceUtils.showFileNotFoundMessage(file);
          return;
        }           
        if(file.getName().toLowerCase().endsWith(".mm") || file.getName().toLowerCase().endsWith(".dcr")) {
          try {
            final URL mapUrl = Compat.fileToUrl(getFile());
            final MapIO mapIO = (MapIO) Controller.getCurrentModeController().getExtension(MapIO.class);
            mapIO.newMap(mapUrl);
//            Controller.getCurrentModeController().getMapController().newMap(mapUrl);
          }
          catch (final Exception e) {
            LogUtils.severe(e);
          }
        }
        else {
          try {
            Controller.getCurrentController().getViewController().openDocument(Compat.fileToUrl(getFile()));
          }
          catch (Exception e) {
            LogUtils.warn("could not open document ("+getFile()+")", e);
          }
        }
      }
    }
    else if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) {
            showPopup((Component) event.getBaggage(), event.getX(), event.getY());
        }
  }
 
  public final String getTagName() {
    return null;
  }
 
  public WorkspaceTransferable getTransferable() {
    WorkspaceTransferable transferable = new WorkspaceTransferable();
    try {
      URI uri = URIUtils.getAbsoluteURI(getFile().toURI());
      transferable.addData(WorkspaceTransferable.WORKSPACE_URI_LIST_FLAVOR, uri.toString());
      List<File> fileList = new Vector<File>();
      fileList.add(new File(uri));
      transferable.addData(WorkspaceTransferable.WORKSPACE_FILE_LIST_FLAVOR, fileList);     
    }
    catch (Exception e) {
      LogUtils.warn(e);
    }
    if(!this.isSystem()) {
      List<AWorkspaceTreeNode> objectList = new ArrayList<AWorkspaceTreeNode>();
      objectList.add(this);
      transferable.addData(WorkspaceTransferable.WORKSPACE_NODE_FLAVOR, objectList);
    }
    return transferable;
  }

  public void initializePopup() {
    if (popupMenu == null) {     
      popupMenu = new WorkspacePopupMenu();
      WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] {
          "workspace.action.node.cut",
          "workspace.action.node.copy",
          "workspace.action.node.paste",
          WorkspacePopupMenuBuilder.SEPARATOR,
          "workspace.action.node.rename",
          "workspace.action.file.delete",
          WorkspacePopupMenuBuilder.SEPARATOR,
          "workspace.action.node.refresh"
      });
    }
  }

  public AWorkspaceTreeNode clone() {
    DefaultFileNode node = new DefaultFileNode(getName(), getFile());
    return clone(node);
  }
 
  public WorkspacePopupMenu getContextMenu() {
    if (popupMenu == null) {
      initializePopup();
    }
    return popupMenu;
  }

  public boolean changeName(String newName, boolean renameLink) {
    String oldName = getName();
    if(rename(newName)) {
      try {
        getModel().changeNodeName(this, newName);
        return true;
      }
      catch(Exception ex) {
        // do nth.
      };     
    }
    else {
      LogUtils.warn("cannot rename "+oldName);
    }
    return false;
  }
 
  public void orderDescending(boolean enable) {
    this.orderDescending = enable;
  }
 
  @ExportAsAttribute(name="orderDescending")
  public boolean orderDescending() {
    return orderDescending;
  }

  public boolean getAllowsChildren() {
    return false;
  }

  public static Icon getApplicationIcon() {
    return APPLICATION_ICON;
  }
 
  public static void setApplicationIcon(Icon icon) {
    if(icon == null) {
      return;
    }
    APPLICATION_ICON = icon;
  }
 
 
}
TOP

Related Classes of org.freeplane.plugin.workspace.nodes.DefaultFileNode

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.