KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > java > RetoucheUtils


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.refactoring.java;
21
22 import java.awt.Color JavaDoc;
23 import java.io.File JavaDoc;
24 import java.io.IOException JavaDoc;
25 import java.net.URISyntaxException JavaDoc;
26 import java.net.URL JavaDoc;
27 import java.util.ArrayList JavaDoc;
28 import java.util.Collection JavaDoc;
29 import java.util.EnumSet JavaDoc;
30 import java.util.Set JavaDoc;
31 import java.util.StringTokenizer JavaDoc;
32 import javax.lang.model.element.Element;
33 import javax.lang.model.element.ExecutableElement;
34 import javax.lang.model.element.TypeElement;
35 import javax.lang.model.type.DeclaredType;
36 import javax.lang.model.type.TypeKind;
37 import javax.lang.model.type.TypeMirror;
38 import javax.lang.model.util.ElementFilter;
39 import javax.swing.text.AttributeSet JavaDoc;
40 import javax.swing.text.StyleConstants JavaDoc;
41 import org.netbeans.api.editor.mimelookup.MimeLookup;
42 import org.netbeans.api.editor.mimelookup.MimePath;
43 import org.netbeans.api.editor.settings.FontColorSettings;
44 import org.netbeans.api.java.classpath.ClassPath;
45 import org.netbeans.api.java.classpath.GlobalPathRegistry;
46 import org.netbeans.api.java.lexer.JavaTokenId;
47 import org.netbeans.api.java.project.JavaProjectConstants;
48 import org.netbeans.api.java.source.ClassIndex;
49 import org.netbeans.api.java.source.CompilationInfo;
50 import org.netbeans.api.java.source.ClasspathInfo;
51 import org.netbeans.api.java.source.ElementHandle;
52 import org.netbeans.api.java.source.SourceUtils;
53 import org.netbeans.api.lexer.Token;
54 import org.netbeans.api.lexer.TokenHierarchy;
55 import org.netbeans.api.lexer.TokenSequence;
56 import org.netbeans.api.project.FileOwnerQuery;
57 import org.netbeans.api.project.Project;
58 import org.netbeans.api.project.ProjectUtils;
59 import org.netbeans.api.project.SourceGroup;
60 import org.netbeans.api.project.ui.OpenProjects;
61 import org.openide.filesystems.FileObject;
62 import org.openide.filesystems.FileUtil;
63 import org.openide.util.Lookup;
64 import org.openide.filesystems.FileUtil;
65 import org.openide.filesystems.URLMapper;
66 import org.openide.util.Utilities;
67
68 /**
69  *
70  * @author Jan Becicka
71  */

72 public class RetoucheUtils {
73     
74     private static final String JavaDoc JAVA_MIME_TYPE = "text/x-java";
75     
76     public static String JavaDoc htmlize(String JavaDoc input) {
77         String JavaDoc temp = org.openide.util.Utilities.replaceString(input, "<", "&lt;"); // NOI18N
78
temp = org.openide.util.Utilities.replaceString(temp, ">", "&gt;"); // NOI18N
79
return temp;
80     }
81     
82     public static Collection JavaDoc<ExecutableElement> getOverridenMethods(ExecutableElement e, CompilationInfo info) {
83         return getOverridenMethods(e, SourceUtils.getEnclosingTypeElement(e), info);
84     }
85
86     private static Collection JavaDoc<ExecutableElement> getOverridenMethods(ExecutableElement e, TypeElement parent, CompilationInfo info) {
87         ArrayList JavaDoc<ExecutableElement> result = new ArrayList JavaDoc<ExecutableElement>();
88         
89         TypeMirror sup = parent.getSuperclass();
90         if (sup.getKind() == TypeKind.DECLARED) {
91             TypeElement next = (TypeElement) ((DeclaredType)sup).asElement();
92             ExecutableElement overriden = getMethod(e, next, info);
93                 result.addAll(getOverridenMethods(e,next, info));
94             if (overriden!=null) {
95                 result.add(overriden);
96             }
97         }
98         for (TypeMirror tm:parent.getInterfaces()) {
99             TypeElement next = (TypeElement) ((DeclaredType)tm).asElement();
100             ExecutableElement overriden2 = getMethod(e, next, info);
101             result.addAll(getOverridenMethods(e,next, info));
102             if (overriden2!=null) {
103                 result.add(overriden2);
104             }
105         }
106         return result;
107     }
108     
109     private static ExecutableElement getMethod(ExecutableElement method, TypeElement type, CompilationInfo info) {
110         for (ExecutableElement met: ElementFilter.methodsIn(type.getEnclosedElements())){
111             if (info.getElements().overrides(method, met, type)) {
112                 return met;
113             }
114         }
115         return null;
116     }
117     
118     public static Collection JavaDoc<ExecutableElement> getOverridingMethods(ExecutableElement e, CompilationInfo info) {
119         Collection JavaDoc<ExecutableElement> result = new ArrayList JavaDoc();
120         TypeElement parentType = (TypeElement) e.getEnclosingElement();
121         //XXX: Fixme IMPLEMENTORS_RECURSIVE were removed
122
Set JavaDoc<ElementHandle<TypeElement>> subTypes = info.getClasspathInfo().getClassIndex().getElements(ElementHandle.create(parentType), EnumSet.of(ClassIndex.SearchKind.IMPLEMENTORS),EnumSet.of(ClassIndex.SearchScope.SOURCE));
123         for (ElementHandle<TypeElement> subTypeHandle: subTypes){
124             TypeElement type = subTypeHandle.resolve(info);
125             for (ExecutableElement method: ElementFilter.methodsIn(type.getEnclosedElements())) {
126                 if (info.getElements().overrides(method, e, type)) {
127                     result.add(method);
128                 }
129             }
130         }
131         return result;
132     }
133
134     public static boolean isJavaFile(FileObject f) {
135         return JAVA_MIME_TYPE.equals(f.getMIMEType()); //NOI18N
136
}
137     
138     public static String JavaDoc getHtml(String JavaDoc text) {
139         StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
140         TokenHierarchy tokenH = TokenHierarchy.create(text, JavaTokenId.language());
141         Lookup lookup = MimeLookup.getLookup(MimePath.get(JAVA_MIME_TYPE));
142         FontColorSettings settings = lookup.lookup(FontColorSettings.class);
143         TokenSequence tok = tokenH.tokenSequence();
144         while (tok.moveNext()) {
145             Token<JavaTokenId> token = (Token) tok.token();
146             String JavaDoc category = token.id().primaryCategory();
147             if (category == null) {
148                 category = "whitespace"; //NOI18N
149
}
150             AttributeSet JavaDoc set = settings.getTokenFontColors(category);
151             buf.append(color(token.text().toString(), set));
152         }
153         return buf.toString();
154     }
155
156     private static String JavaDoc color(String JavaDoc string, AttributeSet JavaDoc set) {
157         if (set==null)
158             return string;
159         if (string.trim().length() == 0) {
160             return Utilities.replaceString(Utilities.replaceString(string, " ", "&nbsp;"), "\n", "<br>"); //NOI18N
161
}
162         StringBuffer JavaDoc buf = new StringBuffer JavaDoc(string);
163         if (StyleConstants.isBold(set)) {
164             buf.insert(0,"<b>"); //NOI18N
165
buf.append("</b>"); //NOI18N
166
}
167         if (StyleConstants.isItalic(set)) {
168             buf.insert(0,"<i>"); //NOI18N
169
buf.append("</i>"); //NOI18N
170
}
171         if (StyleConstants.isStrikeThrough(set)) {
172             buf.insert(0,"<s>");
173             buf.append("</s>");
174         }
175         buf.insert(0,"<font color=" + getHTMLColor(StyleConstants.getForeground(set)) + ">"); //NOI18N
176
buf.append("</font>"); //NOI18N
177
return buf.toString();
178     }
179     
180     private static String JavaDoc getHTMLColor(Color JavaDoc c) {
181         String JavaDoc colorR = "0" + Integer.toHexString(c.getRed()); //NOI18N
182
colorR = colorR.substring(colorR.length() - 2);
183         String JavaDoc colorG = "0" + Integer.toHexString(c.getGreen()); //NOI18N
184
colorG = colorG.substring(colorG.length() - 2);
185         String JavaDoc colorB = "0" + Integer.toHexString(c.getBlue()); //NOI18N
186
colorB = colorB.substring(colorB.length() - 2);
187         String JavaDoc html_color = "#" + colorR + colorG + colorB; //NOI18N
188
return html_color;
189     }
190
191     public static boolean isElementInOpenProject(FileObject f) {
192         Project p = FileOwnerQuery.getOwner(f);
193         Project[] opened = OpenProjects.getDefault().getOpenProjects();
194         for (int i = 0; i<opened.length; i++) {
195             if (p==opened[i])
196                 return true;
197         }
198         return false;
199     }
200     public static boolean isFromLibrary(Element element, ClasspathInfo info) {
201         SourceUtils.getFile(element, info);
202         return FileUtil.getArchiveFile(SourceUtils.getFile(element, info))!=null;
203     }
204
205     public static boolean isValidPackageName(String JavaDoc name) {
206         StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(name, "."); // NOI18N
207
while (tokenizer.hasMoreTokens()) {
208             if (!Utilities.isJavaIdentifier(tokenizer.nextToken())) {
209                 return false;
210             }
211         }
212         return true;
213     }
214     
215     public static boolean isFileInOpenProject(FileObject file) {
216         assert file != null;
217         Project p = FileOwnerQuery.getOwner(file);
218         Project[] opened = OpenProjects.getDefault().getOpenProjects();
219         for (int i = 0; i<opened.length; i++) {
220             if (p==opened[i])
221                 return true;
222         }
223         return false;
224     }
225     
226     public static boolean isOnSourceClasspath(FileObject fo) {
227         Project p = FileOwnerQuery.getOwner(fo);
228         if (p==null) return false;
229         Project[] opened = OpenProjects.getDefault().getOpenProjects();
230         for (int i = 0; i<opened.length; i++) {
231             if (p==opened[i]) {
232                 SourceGroup[] gr = ProjectUtils.getSources(p).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
233                 for (int j = 0; j < gr.length; j++) {
234                     if (fo==gr[j].getRootFolder()) return true;
235                     if (FileUtil.isParentOf(gr[j].getRootFolder(), fo))
236                         return true;
237                 }
238                 return false;
239             }
240         }
241         return false;
242     }
243
244     public static boolean isClasspathRoot(FileObject fo) {
245         return fo.equals(ClassPath.getClassPath(fo, ClassPath.SOURCE).findOwnerRoot(fo));
246     }
247     
248     public static boolean isRefactorable(FileObject file) {
249         return isJavaFile(file) && isFileInOpenProject(file) && isOnSourceClasspath(file);
250     }
251     
252     public static String JavaDoc getPackageName(FileObject folder) {
253         assert folder.isFolder() : "argument must be folder";
254         return ClassPath.getClassPath(
255                 folder, ClassPath.SOURCE)
256                 .getResourceName(folder, '.', false);
257     }
258     
259     public static String JavaDoc getPackageName(URL JavaDoc url) {
260         FileObject result = URLMapper.findFileObject(url);
261         if (result != null)
262             return getPackageName(result);
263         
264         File JavaDoc f = new File JavaDoc(url.getPath());
265         
266         do {
267             FileObject fo = FileUtil.toFileObject(f);
268             if (fo != null) {
269                 return getPackageName(fo);
270             }
271             f = f.getParentFile();
272         } while (f!=null);
273         throw new IllegalArgumentException JavaDoc("Cannot create package name for url " + url);
274     }
275
276     /**
277      * creates or finds FileObject according to
278      * @param url
279      * @return FileObject
280      */

281     public static FileObject getOrCreateFolder(URL JavaDoc url) throws IOException JavaDoc {
282         try {
283             FileObject result = URLMapper.findFileObject(url);
284             if (result != null)
285                 return result;
286             File JavaDoc f = new File JavaDoc(url.toURI());
287             
288             result = FileUtil.createFolder(f);
289             return result;
290         } catch (URISyntaxException JavaDoc ex) {
291             throw (IOException JavaDoc) new IOException JavaDoc().initCause(ex);
292         }
293     }
294     
295     
296 }
297
Popular Tags