KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > persistence > wizard > fromdb > SourceGroupSupport


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.j2ee.persistence.wizard.fromdb;
21
22 import java.io.IOException JavaDoc;
23 import java.net.URL JavaDoc;
24 import java.util.ArrayList JavaDoc;
25 import java.util.Collections JavaDoc;
26 import java.util.HashMap JavaDoc;
27 import java.util.HashSet JavaDoc;
28 import java.util.List JavaDoc;
29 import java.util.Map JavaDoc;
30 import java.util.Set JavaDoc;
31 import java.util.StringTokenizer JavaDoc;
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 /**
44  *
45  * @author Andrei Badea
46  */

47 public class SourceGroupSupport {
48     
49     // XXX some of the methods are also in org.netbeans.modules.j2ee.persistence.wizard.Util
50

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 JavaDoc testGroups = getTestSourceGroups(sourceGroups);
58         List JavaDoc result = new ArrayList JavaDoc();
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 JavaDoc packageName) {
68         if (packageName.length() > 0 && packageName.charAt(0) == '.') { // NOI18N
69
return false;
70         }
71         StringTokenizer JavaDoc tukac = new StringTokenizer JavaDoc(packageName, "."); // NOI18N
72
while (tukac.hasMoreTokens()) {
73             String JavaDoc token = tukac.nextToken();
74             if ("".equals(token)) // NOI18N
75
return false;
76             if (!Utilities.isJavaIdentifier(token))
77                 return false;
78         }
79         return true;
80     }
81
82     // returns true if the folder is writable or is in a writable parent dir
83
// but does not yet exist
84
public static boolean isFolderWritable(SourceGroup sourceGroup, String JavaDoc 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 JavaDoc 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 JavaDoc getPackageForFolder(SourceGroup sourceGroup, FileObject folder) {
108         String JavaDoc relative = FileUtil.getRelativePath(sourceGroup.getRootFolder(), folder);
109         if (relative != null) {
110             return relative.replace('/', '.'); // NOI18N
111
} else {
112             return ""; // NOI18N
113
}
114     }
115
116     public static FileObject getFolderForPackage(SourceGroup sourceGroup, String JavaDoc pgkName) throws IOException JavaDoc {
117         return getFolderForPackage(sourceGroup, pgkName, true);
118     }
119
120     public static FileObject getFolderForPackage(SourceGroup sourceGroup, String JavaDoc pgkName, boolean create) throws IOException JavaDoc {
121         String JavaDoc 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 JavaDoc createFoldersToSourceGroupsMap(final SourceGroup[] sourceGroups) {
132         Map JavaDoc result;
133         if (sourceGroups.length == 0) {
134             result = Collections.EMPTY_MAP;
135         } else {
136             result = new HashMap JavaDoc(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 JavaDoc/*<SourceGroup>*/ getTestSourceGroups(SourceGroup[] sourceGroups) {
146         Map JavaDoc foldersToSourceGroupsMap = createFoldersToSourceGroupsMap(sourceGroups);
147         Set JavaDoc testGroups = new HashSet JavaDoc();
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 JavaDoc/*<SourceGroup>*/ getTestTargets(SourceGroup sourceGroup, Map JavaDoc foldersToSourceGroupsMap) {
155         final URL JavaDoc[] rootURLs = UnitTestForSourceQuery.findUnitTests(sourceGroup.getRootFolder());
156         if (rootURLs.length == 0) {
157             return new ArrayList JavaDoc();
158         }
159         List JavaDoc result = new ArrayList JavaDoc();
160         List JavaDoc 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 JavaDoc/*<FileObject>*/ getFileObjects(URL JavaDoc[] urls) {
172         List JavaDoc result = new ArrayList JavaDoc();
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 JavaDoc("No FileObject found for the following URL: " + urls[i])); //NOI18N
181
}
182         }
183         return result;
184     }
185 }
186
Popular Tags