1 package org.antlr.works.project; 2 3 import org.antlr.xjlib.foundation.XJUtils; 4 5 import java.io.File ; 6 import java.util.*; 7 37 38 public class ProjectExplorerLoader { 39 40 protected Map groups = new HashMap(); 41 protected String sourcePath; 42 protected ProjectExplorer explorer; 43 44 public ProjectExplorerLoader(ProjectExplorer projectExplorer) { 45 this.explorer = projectExplorer; 46 } 47 48 public boolean reload() { 49 boolean reset = false; 50 51 if(sourcePath == null || !sourcePath.equals(explorer.project.getSourcePath())) { 52 groups.clear(); 53 sourcePath = explorer.project.getSourcePath(); 54 reset = true; 55 } 56 57 if(sourcePath == null) 58 return reset; 59 60 List filesToRemove = getAllFiles(); 61 62 for (Iterator iterator = XJUtils.sortedFilesInPath(sourcePath).iterator(); iterator.hasNext();) { 63 File f = (File ) iterator.next(); 64 String name = f.getName(); 65 66 String type = ProjectFileItem.getFileType(name); 67 if(type.equals(ProjectFileItem.FILE_TYPE_UNKNOWN)) 68 continue; 69 70 ProjectFileItem item = addFileOfType(name, type); 71 72 filesToRemove.remove(item); 74 } 75 76 for (Iterator iterator = filesToRemove.iterator(); iterator.hasNext();) { 78 ProjectFileItem fileItem = (ProjectFileItem) iterator.next(); 79 explorer.project.closeFileItem(fileItem); 80 removeFileOfType(fileItem.getFileName(), fileItem.getFileType()); 81 } 82 83 sortFilesInGroups(); 84 85 return reset; 86 } 87 88 public void sortFilesInGroups() { 89 for (Iterator iterator = groups.keySet().iterator(); iterator.hasNext();) { 90 String name = (String ) iterator.next(); 91 List files = (List)groups.get(name); 92 if(files != null && !files.isEmpty()) 93 Collections.sort(files); 94 } 95 } 96 97 public ProjectFileItem addFileOfType(String name, String type) { 98 List files = getFiles(type); 99 for (Iterator iterator = files.iterator(); iterator.hasNext();) { 100 ProjectFileItem fileItem = (ProjectFileItem) iterator.next(); 101 if(fileItem.getFileName().equals(name)) 102 return fileItem; 103 } 104 ProjectFileItem fileItem = new ProjectFileItem(explorer.project, name); 105 files.add(fileItem); 106 return fileItem; 107 } 108 109 public void removeFileOfType(String name, String type) { 110 List files = getFiles(type); 111 for (Iterator iterator = files.iterator(); iterator.hasNext();) { 112 ProjectFileItem fileItem = (ProjectFileItem) iterator.next(); 113 if(fileItem.getFileName().equals(name)) { 114 files.remove(fileItem); 115 break; 116 } 117 } 118 } 119 120 public List getGroups() { 121 List sortedGroups = new ArrayList(groups.keySet()); 122 Collections.sort(sortedGroups); 123 return sortedGroups; 124 } 125 126 public List getAllFiles() { 127 List allFiles = new ArrayList(); 128 for (Iterator iterator = groups.values().iterator(); iterator.hasNext();) { 129 List files = (List) iterator.next(); 130 allFiles.addAll(files); 131 } 132 return allFiles; 133 } 134 135 public ProjectFileItem getFileItemForFileName(String filename) { 136 for (Iterator groupIterator = groups.values().iterator(); groupIterator.hasNext();) { 137 List files = (List) groupIterator.next(); 138 for (Iterator fileIterator = files.iterator(); fileIterator.hasNext();) { 139 ProjectFileItem item = (ProjectFileItem) fileIterator.next(); 140 if(item.getFileName().equals(filename)) 141 return item; 142 } 143 } 144 return null; 145 } 146 147 public List getFiles(String name) { 148 List files = (List) groups.get(name); 149 if(files == null) { 150 files = new ArrayList(); 151 groups.put(name, files); 152 } 153 return files; 154 } 155 156 } 157 | Popular Tags |