Lines 48-58
Link Here
|
48 |
import com.sun.source.tree.CompilationUnitTree; |
48 |
import com.sun.source.tree.CompilationUnitTree; |
49 |
import com.sun.source.tree.Tree; |
49 |
import com.sun.source.tree.Tree; |
50 |
import java.io.IOException; |
50 |
import java.io.IOException; |
51 |
import javax.swing.event.DocumentEvent; |
|
|
52 |
import javax.swing.event.DocumentListener; |
53 |
import javax.swing.text.Document; |
54 |
import javax.swing.text.EditorKit; |
55 |
import javax.swing.text.StyledDocument; |
56 |
import org.netbeans.api.java.source.Task; |
51 |
import org.netbeans.api.java.source.Task; |
57 |
import org.netbeans.api.java.source.JavaSource; |
52 |
import org.netbeans.api.java.source.JavaSource; |
58 |
import org.netbeans.api.java.source.JavaSource.Phase; |
53 |
import org.netbeans.api.java.source.JavaSource.Phase; |
Lines 60-103
Link Here
|
60 |
import org.netbeans.api.java.source.TreeUtilities; |
55 |
import org.netbeans.api.java.source.TreeUtilities; |
61 |
import org.netbeans.api.java.source.WorkingCopy; |
56 |
import org.netbeans.api.java.source.WorkingCopy; |
62 |
import org.netbeans.api.java.source.TreeMaker; |
57 |
import org.netbeans.api.java.source.TreeMaker; |
63 |
import org.openide.cookies.EditCookie; |
58 |
import org.netbeans.core.spi.multiview.MultiViewElement; |
64 |
import org.openide.cookies.EditorCookie; |
59 |
import org.netbeans.core.spi.multiview.text.MultiViewEditorElement; |
65 |
import org.openide.cookies.OpenCookie; |
|
|
66 |
import org.openide.cookies.PrintCookie; |
67 |
import org.openide.cookies.SaveCookie; |
68 |
import org.openide.filesystems.FileLock; |
69 |
import org.openide.filesystems.FileObject; |
60 |
import org.openide.filesystems.FileObject; |
70 |
import org.openide.loaders.DataFolder; |
61 |
import org.openide.loaders.DataFolder; |
71 |
import org.openide.loaders.DataObject; |
62 |
import org.openide.loaders.DataObject; |
72 |
import org.openide.loaders.DataObjectExistsException; |
63 |
import org.openide.loaders.DataObjectExistsException; |
73 |
import org.openide.loaders.MultiDataObject; |
64 |
import org.openide.loaders.MultiDataObject; |
74 |
import org.openide.loaders.MultiFileLoader; |
65 |
import org.openide.loaders.MultiFileLoader; |
75 |
import org.openide.loaders.SaveAsCapable; |
|
|
76 |
import org.openide.nodes.CookieSet; |
77 |
import org.openide.nodes.Node; |
66 |
import org.openide.nodes.Node; |
78 |
import org.openide.nodes.Node.Cookie; |
|
|
79 |
import org.openide.text.CloneableEditor; |
80 |
import org.openide.text.CloneableEditorSupport; |
81 |
import org.openide.text.DataEditorSupport; |
82 |
import org.openide.util.Lookup; |
67 |
import org.openide.util.Lookup; |
83 |
import org.openide.windows.CloneableOpenSupport; |
68 |
import org.openide.windows.TopComponent; |
84 |
|
69 |
|
85 |
public final class JavaDataObject extends MultiDataObject { |
70 |
public final class JavaDataObject extends MultiDataObject { |
86 |
|
71 |
|
87 |
private JavaEditorSupport jes; |
|
|
88 |
|
89 |
public JavaDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException { |
72 |
public JavaDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException { |
90 |
super(pf, loader); |
73 |
super(pf, loader); |
91 |
getCookieSet().assign( SaveAsCapable.class, new SaveAsCapable() { |
74 |
registerEditor("text/x-java", true); |
92 |
public void saveAs( FileObject folder, String fileName ) throws IOException { |
|
|
93 |
createJavaEditorSupport().saveAs( folder, fileName ); |
94 |
} |
95 |
}); |
96 |
getCookieSet().add(JavaEditorSupport.class, new CookieSet.Factory() { |
97 |
public <T extends Cookie> T createCookie(Class<T> klass) { |
98 |
return klass.cast(createJavaEditorSupport ()); |
99 |
} |
100 |
}); |
101 |
} |
75 |
} |
102 |
|
76 |
|
103 |
public @Override Node createNodeDelegate() { |
77 |
public @Override Node createNodeDelegate() { |
Lines 105-114
Link Here
|
105 |
} |
79 |
} |
106 |
|
80 |
|
107 |
@Override |
81 |
@Override |
108 |
public Lookup getLookup() { |
82 |
protected int associateLookup() { |
109 |
return getCookieSet().getLookup(); |
83 |
return 1; |
110 |
} |
84 |
} |
111 |
|
85 |
|
112 |
protected DataObject handleCopyRename(DataFolder df, String name, String ext) throws IOException { |
86 |
protected DataObject handleCopyRename(DataFolder df, String name, String ext) throws IOException { |
113 |
FileObject fo = getPrimaryEntry ().copyRename (df.getPrimaryFile (), name, ext); |
87 |
FileObject fo = getPrimaryEntry ().copyRename (df.getPrimaryFile (), name, ext); |
114 |
DataObject dob = DataObject.find( fo ); |
88 |
DataObject dob = DataObject.find( fo ); |
Lines 116-224
Link Here
|
116 |
return dob; |
90 |
return dob; |
117 |
} |
91 |
} |
118 |
|
92 |
|
119 |
private synchronized JavaEditorSupport createJavaEditorSupport () { |
93 |
@MultiViewElement.Registration( |
120 |
if (jes == null) { |
94 |
displayName="#CTL_SourceTabCaption", |
121 |
jes = new JavaEditorSupport (this); |
95 |
iconBase="org/netbeans/modules/java/resources/class.gif", |
122 |
} |
96 |
persistenceType=TopComponent.PERSISTENCE_ONLY_OPENED, |
123 |
return jes; |
97 |
preferredID="java.source", |
124 |
} |
98 |
mimeType="text/x-java", |
125 |
|
99 |
position=2000 |
126 |
public static final class JavaEditorSupport extends DataEditorSupport implements OpenCookie, EditCookie, EditorCookie, PrintCookie, EditorCookie.Observable { |
100 |
) |
127 |
|
101 |
public static MultiViewEditorElement createMultiViewEditorElement(Lookup context) { |
128 |
private static final class Environment extends DataEditorSupport.Env { |
102 |
return new MultiViewEditorElement(context); |
129 |
|
|
|
130 |
private static final long serialVersionUID = -1; |
131 |
|
132 |
private transient SaveSupport saveCookie = null; |
133 |
|
134 |
private final class SaveSupport implements SaveCookie { |
135 |
public void save() throws java.io.IOException { |
136 |
((JavaEditorSupport)findCloneableOpenSupport()).saveDocument(); |
137 |
getDataObject().setModified(false); |
138 |
} |
139 |
} |
140 |
|
141 |
public Environment(JavaDataObject obj) { |
142 |
super(obj); |
143 |
} |
144 |
|
145 |
protected FileObject getFile() { |
146 |
return this.getDataObject().getPrimaryFile(); |
147 |
} |
148 |
|
149 |
protected FileLock takeLock() throws java.io.IOException { |
150 |
return ((MultiDataObject)this.getDataObject()).getPrimaryEntry().takeLock(); |
151 |
} |
152 |
|
153 |
public @Override CloneableOpenSupport findCloneableOpenSupport() { |
154 |
return (CloneableEditorSupport) ((JavaDataObject)this.getDataObject()).getCookie(EditorCookie.class); |
155 |
} |
156 |
|
157 |
|
158 |
public void addSaveCookie() { |
159 |
JavaDataObject javaData = (JavaDataObject) this.getDataObject(); |
160 |
if (javaData.getCookie(SaveCookie.class) == null) { |
161 |
if (this.saveCookie == null) |
162 |
this.saveCookie = new SaveSupport(); |
163 |
javaData.getCookieSet().add(this.saveCookie); |
164 |
javaData.setModified(true); |
165 |
} |
166 |
} |
167 |
|
168 |
public void removeSaveCookie() { |
169 |
JavaDataObject javaData = (JavaDataObject) this.getDataObject(); |
170 |
if (javaData.getCookie(SaveCookie.class) != null) { |
171 |
javaData.getCookieSet().remove(this.saveCookie); |
172 |
javaData.setModified(false); |
173 |
} |
174 |
|
175 |
} |
176 |
} |
177 |
|
178 |
public JavaEditorSupport(JavaDataObject dataObject) { |
179 |
super(dataObject, new Environment(dataObject)); |
180 |
setMIMEType("text/x-java"); // NOI18N |
181 |
} |
182 |
|
183 |
|
184 |
protected boolean notifyModified() { |
185 |
if (!super.notifyModified()) |
186 |
return false; |
187 |
((Environment)this.env).addSaveCookie(); |
188 |
return true; |
189 |
} |
190 |
|
191 |
|
192 |
protected @Override void notifyUnmodified() { |
193 |
super.notifyUnmodified(); |
194 |
((Environment)this.env).removeSaveCookie(); |
195 |
} |
196 |
|
197 |
protected @Override CloneableEditor createCloneableEditor() { |
198 |
return new JavaEditor(this); |
199 |
} |
200 |
|
201 |
@Override |
202 |
protected boolean asynchronousOpen() { |
203 |
return true; |
204 |
} |
205 |
|
206 |
public @Override boolean close(boolean ask) { |
207 |
return super.close(ask); |
208 |
} |
209 |
} |
210 |
|
211 |
private static final class JavaEditor extends CloneableEditor { |
212 |
|
213 |
private static final long serialVersionUID = -1; |
214 |
|
215 |
public JavaEditor() { |
216 |
} |
217 |
|
218 |
public JavaEditor(JavaEditorSupport sup) { |
219 |
super(sup); |
220 |
} |
221 |
|
222 |
} |
103 |
} |
223 |
|
104 |
|
224 |
/** |
105 |
/** |