1 4 package org.terracotta.dso.editors.tree; 5 6 import org.eclipse.core.resources.IFile; 7 import org.eclipse.core.resources.IFolder; 8 import org.eclipse.core.resources.IProject; 9 import org.eclipse.core.resources.IResource; 10 import org.eclipse.core.runtime.CoreException; 11 12 import com.tc.admin.common.XRootNode; 13 14 import java.util.ArrayList ; 15 import java.util.Vector ; 16 17 import javax.swing.tree.TreeNode ; 18 19 25 26 public class ProjectFileRoot extends XRootNode implements IResourceNode { 27 private IProject m_project; 28 private String m_extension; 29 private IResource[] m_members; 30 31 public ProjectFileRoot(IProject project) { 32 this(project, null); 33 init(); 34 } 35 36 public ProjectFileRoot(IProject project, String extension) { 37 super(project); 38 39 m_project = project; 40 m_extension = extension; 41 42 init(); 43 } 44 45 private void init() { 46 int count = ensureMembers().length; 47 48 if(children == null) { 49 children = new Vector (); 50 } 51 children.setSize(count); 52 } 53 54 public TreeNode getChildAt(int index) { 55 if(children != null && children.elementAt(index) == null) { 56 addChildren(); 57 } 58 59 return super.getChildAt(index); 60 } 61 62 private void addChildren() { 63 IResource[] members = ensureMembers(); 64 IResource member; 65 ProjectNode child; 66 67 for(int i = 0; i < members.length; i++) { 68 member = members[i]; 69 70 switch(member.getType()) { 71 case IResource.FOLDER: { 72 child = new ProjectFolderNode((IFolder)member, m_extension); 73 children.setElementAt(child, i); 74 child.setParent(this); 75 break; 76 } 77 case IResource.FILE: { 78 child = new ProjectFileNode((IFile)member); 79 children.setElementAt(child, i); 80 child.setParent(this); 81 break; 82 } 83 } 84 } 85 } 86 87 public String toString() { 88 return m_project.getName(); 89 } 90 91 public IResource getResource() { 92 return getProject(); 93 } 94 95 public IProject getProject() { 96 return m_project; 97 } 98 99 public String getExtension() { 100 return m_extension; 101 } 102 103 private IResource[] ensureMembers() { 104 if(m_members == null) { 105 m_members = internalGetMembers(); 106 } 107 return m_members; 108 } 109 110 private IResource[] internalGetMembers() { 111 try { 112 IResource[] members = m_project.members(); 113 IResource member; 114 115 if(m_extension != null) { 116 ArrayList <IResource> list = new ArrayList <IResource>(); 117 118 for(int i = 0; i < members.length; i++) { 119 member = members[i]; 120 121 if(member.getType() == IResource.FOLDER || 122 m_extension.equals(member.getFileExtension())) { 123 list.add(member); 124 } 125 } 126 members = list.toArray(new IResource[0]); 127 } 128 129 return members; 130 } catch(CoreException ce) { 131 return new IResource[0]; 132 } 133 } 134 } 135 | Popular Tags |