1 19 20 package org.netbeans.modules.j2ee.persistence.wizard.fromdb; 21 22 import java.io.IOException ; 23 import java.net.URL ; 24 import java.util.ArrayList ; 25 import java.util.Collections ; 26 import java.util.HashMap ; 27 import java.util.HashSet ; 28 import java.util.List ; 29 import java.util.Map ; 30 import java.util.Set ; 31 import java.util.StringTokenizer ; 32 import org.netbeans.api.java.project.JavaProjectConstants; 33 import org.netbeans.api.java.queries.UnitTestForSourceQuery; 34 import org.netbeans.api.project.Project; 35 import org.netbeans.api.project.ProjectUtils; 36 import org.netbeans.api.project.SourceGroup; 37 import org.openide.ErrorManager; 38 import org.openide.filesystems.FileObject; 39 import org.openide.filesystems.FileUtil; 40 import org.openide.filesystems.URLMapper; 41 import org.openide.util.Utilities; 42 43 47 public class SourceGroupSupport { 48 49 51 private SourceGroupSupport() { 52 } 53 54 public static SourceGroup[] getJavaSourceGroups(Project project) { 55 SourceGroup[] sourceGroups = ProjectUtils.getSources(project).getSourceGroups( 56 JavaProjectConstants.SOURCES_TYPE_JAVA); 57 Set testGroups = getTestSourceGroups(sourceGroups); 58 List result = new ArrayList (); 59 for (int i = 0; i < sourceGroups.length; i++) { 60 if (!testGroups.contains(sourceGroups[i])) { 61 result.add(sourceGroups[i]); 62 } 63 } 64 return (SourceGroup[]) result.toArray(new SourceGroup[result.size()]); 65 } 66 67 public static boolean isValidPackageName(String packageName) { 68 if (packageName.length() > 0 && packageName.charAt(0) == '.') { return false; 70 } 71 StringTokenizer tukac = new StringTokenizer (packageName, "."); while (tukac.hasMoreTokens()) { 73 String token = tukac.nextToken(); 74 if ("".equals(token)) return false; 76 if (!Utilities.isJavaIdentifier(token)) 77 return false; 78 } 79 return true; 80 } 81 82 public static boolean isFolderWritable(SourceGroup sourceGroup, String packageName) { 85 try { 86 FileObject fo = getFolderForPackage(sourceGroup, packageName, false); 87 88 while ((fo == null) && (packageName.lastIndexOf('.') != -1)) { 89 packageName = packageName.substring(0, packageName.lastIndexOf('.')); 90 fo = getFolderForPackage(sourceGroup, packageName, false); 91 } 92 return ((fo == null) || fo.canWrite()); 93 } catch (IOException ex) { 94 return false; 95 } 96 } 97 98 public static SourceGroup getFolderSourceGroup(SourceGroup[] sourceGroups, FileObject folder) { 99 for (int i = 0; i < sourceGroups.length; i++) { 100 if (FileUtil.isParentOf(sourceGroups[i].getRootFolder(), folder)) { 101 return sourceGroups[i]; 102 } 103 } 104 return null; 105 } 106 107 public static String getPackageForFolder(SourceGroup sourceGroup, FileObject folder) { 108 String relative = FileUtil.getRelativePath(sourceGroup.getRootFolder(), folder); 109 if (relative != null) { 110 return relative.replace('/', '.'); } else { 112 return ""; } 114 } 115 116 public static FileObject getFolderForPackage(SourceGroup sourceGroup, String pgkName) throws IOException { 117 return getFolderForPackage(sourceGroup, pgkName, true); 118 } 119 120 public static FileObject getFolderForPackage(SourceGroup sourceGroup, String pgkName, boolean create) throws IOException { 121 String relativePkgName = pgkName.replace('.', '/'); 122 FileObject folder = sourceGroup.getRootFolder().getFileObject(relativePkgName); 123 if (folder != null) { 124 return folder; 125 } else if (create) { 126 return FileUtil.createFolder(sourceGroup.getRootFolder(), relativePkgName); 127 } 128 return null; 129 } 130 131 private static Map createFoldersToSourceGroupsMap(final SourceGroup[] sourceGroups) { 132 Map result; 133 if (sourceGroups.length == 0) { 134 result = Collections.EMPTY_MAP; 135 } else { 136 result = new HashMap (2 * sourceGroups.length, .5f); 137 for (int i = 0; i < sourceGroups.length; i++) { 138 SourceGroup sourceGroup = sourceGroups[i]; 139 result.put(sourceGroup.getRootFolder(), sourceGroup); 140 } 141 } 142 return result; 143 } 144 145 private static Set getTestSourceGroups(SourceGroup[] sourceGroups) { 146 Map foldersToSourceGroupsMap = createFoldersToSourceGroupsMap(sourceGroups); 147 Set testGroups = new HashSet (); 148 for (int i = 0; i < sourceGroups.length; i++) { 149 testGroups.addAll(getTestTargets(sourceGroups[i], foldersToSourceGroupsMap)); 150 } 151 return testGroups; 152 } 153 154 private static List getTestTargets(SourceGroup sourceGroup, Map foldersToSourceGroupsMap) { 155 final URL [] rootURLs = UnitTestForSourceQuery.findUnitTests(sourceGroup.getRootFolder()); 156 if (rootURLs.length == 0) { 157 return new ArrayList (); 158 } 159 List result = new ArrayList (); 160 List sourceRoots = getFileObjects(rootURLs); 161 for (int i = 0; i < sourceRoots.size(); i++) { 162 FileObject sourceRoot = (FileObject) sourceRoots.get(i); 163 SourceGroup srcGroup = (SourceGroup) foldersToSourceGroupsMap.get(sourceRoot); 164 if (srcGroup != null) { 165 result.add(srcGroup); 166 } 167 } 168 return result; 169 } 170 171 private static List getFileObjects(URL [] urls) { 172 List result = new ArrayList (); 173 for (int i = 0; i < urls.length; i++) { 174 FileObject sourceRoot = URLMapper.findFileObject(urls[i]); 175 if (sourceRoot != null) { 176 result.add(sourceRoot); 177 } else { 178 ErrorManager.getDefault().notify( 179 ErrorManager.INFORMATIONAL, 180 new IllegalStateException ("No FileObject found for the following URL: " + urls[i])); } 182 } 183 return result; 184 } 185 } 186 | Popular Tags |