private void addTreeListeners()

in tapestry/src/main/java/com/intellij/tapestry/intellij/view/TapestryProjectViewPane.java [455:535]


  private void addTreeListeners() {

    myTree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
      @Override
      public void valueChanged(TreeSelectionEvent event) {
        if (event.getNewLeadSelectionPath() != null) {
          TapestryToolWindow toolWindow = TapestryToolWindowFactory.getToolWindow(getProject());

          if (toolWindow != null) {
            SimpleNode selectedNode =
                ((SimpleNode)((DefaultMutableTreeNode)event.getNewLeadSelectionPath().getLastPathComponent()).getUserObject());

            if (!(selectedNode instanceof TapestryNode)) {
              toolWindow.update(null, null, null);

              return;
            }

            if (selectedNode instanceof PageNode || selectedNode instanceof ComponentNode || selectedNode instanceof MixinNode) {
              toolWindow.update((Module)getData(PlatformCoreDataKeys.MODULE.getName()), selectedNode.getElement(),
                                Collections.singletonList(((PresentationLibraryElement)selectedNode.getElement()).getElementClass()));
            }

            if (selectedNode instanceof ClassNode || selectedNode instanceof FileNode) {
              TapestryNode parentSelectedNode =
                  ((TapestryNode)((DefaultMutableTreeNode)((DefaultMutableTreeNode)event.getNewLeadSelectionPath().getLastPathComponent())
                      .getParent()).getUserObject());

              if (parentSelectedNode.getElement() instanceof PresentationLibraryElement) {
                toolWindow.update((Module)getData(PlatformCoreDataKeys.MODULE.getName()), parentSelectedNode.getElement(),
                                  Collections
                                    .singletonList(((PresentationLibraryElement)parentSelectedNode.getElement()).getElementClass()));
              }
              else {

                IJavaClassType elementClass = null;
                PresentationLibraryElement component = null;

                Module module = ((TapestryNode)selectedNode).getModule();
                TapestryProject tapestryProject = TapestryModuleSupportLoader.getTapestryProject(module);

                if (selectedNode instanceof ClassNode) {
                  elementClass = new IntellijJavaClassType(module, ((PsiFile)selectedNode.getElement()));

                  try {
                    component = PresentationLibraryElement.createProjectElementInstance(elementClass, tapestryProject);
                  }
                  catch (NotTapestryElementException ex) {
                    // the selected class is not a Tapestry element
                  }
                }

                if (selectedNode instanceof FileNode) {

                  elementClass = tapestryProject.findElementByTemplate((PsiFile)selectedNode.getElement()).getElementClass();

                  if (elementClass != null) {
                    component = PresentationLibraryElement.createProjectElementInstance(elementClass, tapestryProject);
                  }
                }

                if (component != null) {
                  toolWindow.update((Module)getData(PlatformCoreDataKeys.MODULE.getName()), component,
                                    Collections.singletonList(component.getElementClass()));
                }
              }
            }
            if (!(selectedNode instanceof PageNode ||
                  selectedNode instanceof ComponentNode ||
                  selectedNode instanceof MixinNode ||
                  selectedNode instanceof ClassNode ||
                  selectedNode instanceof FileNode)) {

              toolWindow.update(null, null, null);
            }
          }
        }
      }
    });
    myTree.addKeyListener(new PsiCopyPasteManager.EscapeHandler());
  }//addTreeListeners