KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > refactoring > java > ui > JavaRefactoringActionsProvider


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.ui;
21
22 import java.util.Collection JavaDoc;
23 import java.util.Dictionary JavaDoc;
24 import javax.lang.model.element.Element;
25 import javax.lang.model.element.ElementKind;
26 import org.netbeans.api.java.source.CompilationInfo;
27 import org.netbeans.api.java.source.SourceUtils;
28 import org.netbeans.api.java.source.TreePathHandle;
29 import org.netbeans.modules.refactoring.java.RetoucheUtils;
30 import org.netbeans.modules.refactoring.java.spi.ui.JavaActionsImplementationProvider;
31 import org.netbeans.modules.refactoring.java.ui.ExtractInterfaceRefactoringUI;
32 import org.netbeans.modules.refactoring.java.ui.RefactoringActionsProvider.NodeToFileObject;
33 import org.netbeans.modules.refactoring.java.ui.RefactoringActionsProvider.TextComponentRunnable;
34 import org.netbeans.modules.refactoring.spi.ui.RefactoringUI;
35 import org.openide.cookies.EditorCookie;
36 import org.openide.filesystems.FileObject;
37 import org.openide.loaders.DataFolder;
38 import org.openide.loaders.DataObject;
39 import org.openide.nodes.Node;
40 import org.openide.util.Lookup;
41
42 /**
43  *
44  * @author Jan Becicka
45  */

46 public class JavaRefactoringActionsProvider extends JavaActionsImplementationProvider{
47     
48     public JavaRefactoringActionsProvider() {
49     }
50     @Override JavaDoc
51     public void doExtractInterface(final Lookup lookup) {
52         EditorCookie ec = lookup.lookup(EditorCookie.class);
53         final Dictionary JavaDoc dictionary = lookup.lookup(Dictionary JavaDoc.class);
54         if (RefactoringActionsProvider.isFromEditor(ec)) {
55             new RefactoringActionsProvider.TextComponentRunnable(ec) {
56                 @Override JavaDoc
57                 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) {
58                     Element selected = selectedElement.resolveElement(info);
59                     return new ExtractInterfaceRefactoringUI(selectedElement, info);
60                 }
61             }.run();
62         } else {
63             new NodeToFileObject(lookup.lookupAll(Node.class)) {
64                 @Override JavaDoc
65                 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) {
66                     throw new UnsupportedOperationException JavaDoc("Not supported yet!");
67                     //return new ExtractInterfaceRefactoringUI(selectedElements[0],(CompilationInfo) null);
68
}
69             }.run();
70         }
71     }
72
73     @Override JavaDoc
74     public boolean canExtractInterface(Lookup lookup) {
75         Collection JavaDoc<? extends Node> nodes = lookup.lookupAll(Node.class);
76         if (nodes.size() != 1) {
77             return false;
78         }
79         Node n = nodes.iterator().next();
80         DataObject dob = n.getCookie(DataObject.class);
81         if (dob==null) {
82             return false;
83         }
84         FileObject fo = dob.getPrimaryFile();
85         if (RetoucheUtils.isRefactorable(fo)) { //NOI18N
86
return true;
87         }
88         if ((dob instanceof DataFolder) &&
89                 RetoucheUtils.isFileInOpenProject(fo) &&
90                 RetoucheUtils.isOnSourceClasspath(fo) &&
91                 !RetoucheUtils.isClasspathRoot(fo))
92             return true;
93         return false;
94     }
95     
96     @Override JavaDoc
97     public void doPushDown(final Lookup lookup) {
98         EditorCookie ec = lookup.lookup(EditorCookie.class);
99         final Dictionary JavaDoc dictionary = lookup.lookup(Dictionary JavaDoc.class);
100         if (RefactoringActionsProvider.isFromEditor(ec)) {
101             new RefactoringActionsProvider.TextComponentRunnable(ec) {
102                 @Override JavaDoc
103                 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) {
104                     Element selected = selectedElement.resolveElement(info);
105                     return new PushDownRefactoringUI(new TreePathHandle[]{selectedElement}, info);
106                 }
107             }.run();
108         } else {
109             new NodeToFileObject(lookup.lookupAll(Node.class)) {
110                 @Override JavaDoc
111                 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) {
112                     throw new UnsupportedOperationException JavaDoc("Not supported yet!");
113                     //return new ExtractInterfaceRefactoringUI(selectedElements[0],(CompilationInfo) null);
114
}
115             }.run();
116         }
117     }
118
119     @Override JavaDoc
120     public boolean canPushDown(Lookup lookup) {
121         Collection JavaDoc<? extends Node> nodes = lookup.lookupAll(Node.class);
122         if (nodes.size() != 1) {
123             return false;
124         }
125         Node n = nodes.iterator().next();
126         DataObject dob = n.getCookie(DataObject.class);
127         if (dob==null) {
128             return false;
129         }
130         FileObject fo = dob.getPrimaryFile();
131         if (RetoucheUtils.isRefactorable(fo)) { //NOI18N
132
return true;
133         }
134         if ((dob instanceof DataFolder) &&
135                 RetoucheUtils.isFileInOpenProject(fo) &&
136                 RetoucheUtils.isOnSourceClasspath(fo) &&
137                 !RetoucheUtils.isClasspathRoot(fo))
138             return true;
139         return false;
140     }
141     
142     @Override JavaDoc
143     public void doPullUp(final Lookup lookup) {
144         EditorCookie ec = lookup.lookup(EditorCookie.class);
145         final Dictionary JavaDoc dictionary = lookup.lookup(Dictionary JavaDoc.class);
146         if (RefactoringActionsProvider.isFromEditor(ec)) {
147             new RefactoringActionsProvider.TextComponentRunnable(ec) {
148                 @Override JavaDoc
149                 protected RefactoringUI createRefactoringUI(TreePathHandle selectedElement,int startOffset,int endOffset, CompilationInfo info) {
150                     Element selected = selectedElement.resolveElement(info);
151                     return new PullUpRefactoringUI(new TreePathHandle[]{selectedElement}, info);
152                 }
153             }.run();
154         } else {
155             new NodeToFileObject(lookup.lookupAll(Node.class)) {
156                 @Override JavaDoc
157                 protected RefactoringUI createRefactoringUI(FileObject[] selectedElements) {
158                     throw new UnsupportedOperationException JavaDoc("Not supported yet!");
159                     //return new ExtractInterfaceRefactoringUI(selectedElements[0],(CompilationInfo) null);
160
}
161             }.run();
162         }
163     }
164
165     @Override JavaDoc
166     public boolean canPullUp(Lookup lookup) {
167         Collection JavaDoc<? extends Node> nodes = lookup.lookupAll(Node.class);
168         if (nodes.size() != 1) {
169             return false;
170         }
171         Node n = nodes.iterator().next();
172         DataObject dob = n.getCookie(DataObject.class);
173         if (dob==null) {
174             return false;
175         }
176         FileObject fo = dob.getPrimaryFile();
177         if (RetoucheUtils.isRefactorable(fo)) { //NOI18N
178
return true;
179         }
180         if ((dob instanceof DataFolder) &&
181                 RetoucheUtils.isFileInOpenProject(fo) &&
182                 RetoucheUtils.isOnSourceClasspath(fo) &&
183                 !RetoucheUtils.isClasspathRoot(fo))
184             return true;
185         return false;
186     }
187
188 }
189
Popular Tags