1 4 package org.terracotta.dso.editors.tree; 5 6 import org.eclipse.core.runtime.IPath; 7 import org.eclipse.jdt.core.IJavaElement; 8 import org.eclipse.jdt.core.IPackageFragment; 9 import org.eclipse.jdt.core.IPackageFragmentRoot; 10 import org.eclipse.jdt.core.JavaModelException; 11 12 import java.util.ArrayList ; 13 import java.util.Arrays ; 14 import java.util.Vector ; 15 16 import javax.swing.SwingUtilities ; 17 import javax.swing.tree.TreeNode ; 18 19 25 26 public class PackageFragmentRootNode extends JavaProjectNode { 27 private IPackageFragmentRoot m_packageFragmentRoot; 28 private IPackageFragment[] m_packageFragments; 29 private String m_name; 30 private boolean m_showFields; 31 private boolean m_showMethods; 32 private boolean m_showTypes; 33 34 public PackageFragmentRootNode(IPackageFragmentRoot packageFragmentRoot) { 35 this(packageFragmentRoot, true, true, true); 36 } 37 38 public PackageFragmentRootNode( 39 IPackageFragmentRoot packageFragmentRoot, 40 boolean showFields, 41 boolean showMethods, 42 boolean showTypes) 43 { 44 super(packageFragmentRoot); 45 46 m_packageFragmentRoot = packageFragmentRoot; 47 m_showFields = showFields; 48 m_showMethods = showMethods; 49 m_showTypes = showTypes; 50 51 IPath path = m_packageFragmentRoot.getPath(); 52 m_name = path.lastSegment(); 53 54 String ext = path.getFileExtension(); 55 if(ext != null && (ext.equals("jar") || ext.equals("zip"))) { 56 m_name = path.lastSegment() + " - " + path.removeLastSegments(1).toOSString(); 57 } 58 } 59 60 public int getChildCount() { 61 return children != null ? children.size() : 1; 62 } 63 64 public TreeNode getChildAt(int index) { 65 if(children == null) { 66 children = new Vector (); 67 children.setSize(ensurePackageFragments().length); 68 SwingUtilities.invokeLater(new Runnable () { 69 public void run() { 70 nodeStructureChanged(); 71 } 72 }); 73 } 74 75 if(children.elementAt(index) == null) { 76 addChild(index); 77 } 78 79 return super.getChildAt(index); 80 } 81 82 public void addChild(int index) { 83 IPackageFragment[] fragments = ensurePackageFragments(); 84 IPackageFragment fragment = fragments[index]; 85 PackageFragmentNode node; 86 87 node = new PackageFragmentNode(fragment, m_showFields, m_showMethods, m_showTypes); 88 setChildAt(node, index); 89 } 90 91 private IPackageFragment[] ensurePackageFragments() { 92 if(m_packageFragments == null) { 93 m_packageFragments = internalGetPackageFragments(); 94 } 95 96 return m_packageFragments; 97 } 98 99 private IPackageFragment[] internalGetPackageFragments() { 100 try { 101 IJavaElement[] elements = m_packageFragmentRoot.getChildren(); 102 ArrayList <IPackageFragment> list = new ArrayList <IPackageFragment>(); 103 IJavaElement element; 104 IPackageFragment[] fragments; 105 IPackageFragment fragment; 106 107 for(int i = 0; i < elements.length; i++) { 108 element = elements[i]; 109 110 if(element.getElementType() == IJavaElement.PACKAGE_FRAGMENT) { 111 fragment = (IPackageFragment)element; 112 113 if(fragment.containsJavaResources()) { 114 list.add(fragment); 115 } 116 } 117 } 118 119 fragments = list.toArray(new IPackageFragment[0]); 120 return (IPackageFragment[])JavaElementComparable.sort(fragments); 121 } catch(JavaModelException jme) { 122 return new IPackageFragment[0]; 123 } 124 } 125 126 public String getSignature() { 127 return ""; 128 } 129 130 public String [] getFields() { 131 ArrayList <String > list = new ArrayList <String >(); 132 int childCount = getChildCount(); 133 134 for(int i = 0; i < childCount; i++) { 135 list.addAll(Arrays.asList(((JavaProjectNode)getChildAt(i)).getFields())); 136 } 137 138 return list.toArray(new String [0]); 139 } 140 141 public String toString() { 142 return m_name; 143 } 144 } 145 | Popular Tags |