Package jSimMacs.display

Source Code of jSimMacs.display.SimpleProjectTree

/**
*
*/
package jSimMacs.display;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

import jSimMacs.data.Project;
import jSimMacs.data.RemoteProject;
import jSimMacs.logic.JSimLogic;
import jSimMacs.logic.ProjectLocation;

import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;

/**
* @author Sanjit Roopra
*
*/
public class SimpleProjectTree extends JTree implements TreeExpansionListener {

  protected DefaultMutableTreeNode root;

  protected DefaultMutableTreeNode localRoot;

  protected DefaultMutableTreeNode sshRoot;

  public SimpleProjectTree(DefaultMutableTreeNode root) {
    super(root);
    this.root = root;
    localRoot = new DefaultMutableTreeNode("Local Projects");
    sshRoot = new DefaultMutableTreeNode("Remote Projects");
    root.add(localRoot);
    root.add(sshRoot);
    setup();
    this.addTreeExpansionListener(this);
    getSelectionModel().setSelectionMode(
        TreeSelectionModel.SINGLE_TREE_SELECTION);

  }

  public void setup() {
    createProjectNodes(JSimLogic.getInstance().getWorkspaceDir());
    createRemoteProjectNodes();
  }

  public void createRemoteProjectNodes() {
    sshRoot.removeAllChildren();
    for (RemoteProject remoteProject : JSimLogic.getInstance()
        .getRemoteProjects()) {
      JSimMutuableTreeNode node = null;
      if (remoteProject.isOpenConnection()) {
        node = new RemoteProjectMutuableTreeNode(JSimLogic
            .getInstance().getDirectoryEntry(
                remoteProject,
                remoteProject.getPath()
                    + remoteProject.getName()),
            remoteProject);
        sshRoot.add(node);
      }
      // else node = new RemoteProjectMutuableTreeNode(remoteProject);

      // sshRoot.add(new ProjectEntryMutuableTreeNode);
    }
    DefaultTreeModel model = (DefaultTreeModel) getModel();
    model.nodeStructureChanged(sshRoot);

  }

  private void createProjectNodes(String dir) {
    try {
      if (dir != null) {
        File userDir = new File(dir);
        if (!userDir.isDirectory())
          throw new Exception();

        createNodes(userDir);
      }

    } catch (NullPointerException exc) {
      System.out.println("Work directory not specified");
    } catch (Exception exc) {
      System.out.println("Work directory not valid or not specified");
    }

  }

  private void createNodes(File userDir) {
    try {
      ArrayList<Project> localProjects = new ArrayList<Project>();
      localRoot.removeAllChildren();
      File[] directoryList = userDir.listFiles();
      Arrays.sort(directoryList);
      // directoryList = sort(directoryList);

      for (int i = 0; i < directoryList.length; i++) {
        if (directoryList[i].isDirectory()
            && !directoryList[i].isHidden()) {
          Project project = new Project(directoryList[i].getName());
          project.setLocation(ProjectLocation.LOCALE);
          localProjects.add(project);
          localRoot.add(new ProjectEntryMutuableTreeNode(
              directoryList[i], project));
        }
      }
      JSimLogic.getInstance().setLocalProjects(localProjects);
      DefaultTreeModel model = (DefaultTreeModel) getModel();
      model.nodeStructureChanged(localRoot);
      model.nodeStructureChanged(root);
    } catch (Exception exc) {
      exc.printStackTrace();
    }

  }

  // protected boolean notConfigDir(File file) {
  // return !file.getName().equals(JSimConstants.JSIMCONFIGDIR);
  // }

  public void updateTree(DefaultMutableTreeNode selectedNode) {
    DefaultTreeModel model = (DefaultTreeModel) getModel();
    model.nodeChanged(selectedNode);
  }

  public void insertNode(DefaultMutableTreeNode selectedNode, String filePath) {
    // selectedNode.add(new ProjectEntryMutuableTreeNode(new
    // File(filePath)));
    DefaultTreeModel model = (DefaultTreeModel) getModel();
    if (selectedNode instanceof RemoteProjectMutuableTreeNode) {
      RemoteProjectMutuableTreeNode rNode = (RemoteProjectMutuableTreeNode) selectedNode;
      RemoteProject rProject = rNode.getRemoteProject();
      JSimMutuableTreeNode node = new RemoteProjectMutuableTreeNode(
          rProject, rNode.getPathString(), JSimLogic.getInstance()
              .getDirectoryEntry(rProject, filePath));
      model.insertNodeInto(node, selectedNode, selectedNode
          .getChildCount());
    } else {
      JSimMutuableTreeNode jNode = (JSimMutuableTreeNode) selectedNode;
      model.insertNodeInto(new ProjectEntryMutuableTreeNode(new File(
          filePath), jNode.getProject()), selectedNode, selectedNode.getChildCount());
    }
    // model.nodeStructureChanged(selectedNode);

  }

  public void insertProjectNode(ProjectLocation location, Project project) {
    DefaultTreeModel model = (DefaultTreeModel) getModel();
    String dir = "";
    if (location == ProjectLocation.LOCALE) {
      dir += JSimLogic.getInstance().getWorkspaceDir()
          + project.getName();
      JSimMutuableTreeNode node = new ProjectEntryMutuableTreeNode(
          new File(dir), project);
      model.insertNodeInto(node, localRoot, localRoot.getChildCount());
      // int []childIndices = new int[1];
      // childIndices[0] = localRoot.getChildCount()-1;
      // model.nodesWereInserted(localRoot, childIndices);
    } else if (location == ProjectLocation.SSH) {
      RemoteProject remoteProject = (RemoteProject) project;
      JSimMutuableTreeNode node = new RemoteProjectMutuableTreeNode(
          JSimLogic.getInstance().getDirectoryEntry(remoteProject,
              remoteProject.getPath() + remoteProject.getName()),
          remoteProject);
      model.insertNodeInto(node, sshRoot, sshRoot.getChildCount());
    }
  }

  public void deleteNode(JSimMutuableTreeNode selectedNode) {
    // selectedNode.add(new ProjectEntryMutuableTreeNode(new
    // File(filePath)));
    if (selectedNode.getLevel() == 2) {
      JSimLogic.getInstance().removeRunOption(selectedNode.getProject());
      if (selectedNode instanceof RemoteProjectMutuableTreeNode)
        JSimLogic.getInstance().removeRemoteProject(
            (RemoteProject) selectedNode.getProject());

    }
    DefaultTreeModel model = (DefaultTreeModel) getModel();
    model.removeNodeFromParent(selectedNode);

    // model.nodeStructureChanged(selectedNode);

  }

  public void treeCollapsed(TreeExpansionEvent event) {
    // TODO Auto-generated method stub

  }

  public void treeExpanded(TreeExpansionEvent event) {
    try {
      JSimMutuableTreeNode node = (JSimMutuableTreeNode) event.getPath()
          .getLastPathComponent();
      node.createNodes(false);
      DefaultTreeModel model = (DefaultTreeModel) getModel();
      model.nodeStructureChanged(node);
    } catch (Exception exc) {
      System.out.println("Tree initialized");
    }

  }

}
TOP

Related Classes of jSimMacs.display.SimpleProjectTree

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.