KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > bluej > BluejProject


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.bluej;
21
22 import java.beans.PropertyChangeEvent JavaDoc;
23 import java.beans.PropertyChangeListener JavaDoc;
24 import java.beans.PropertyChangeSupport JavaDoc;
25 import java.io.File JavaDoc;
26 import java.io.IOException JavaDoc;
27 import javax.swing.Icon JavaDoc;
28 import javax.swing.ImageIcon JavaDoc;
29 import org.netbeans.api.java.classpath.ClassPath;
30 import org.netbeans.api.java.classpath.GlobalPathRegistry;
31 import org.netbeans.api.java.project.JavaProjectConstants;
32 import org.netbeans.api.project.Project;
33 import org.netbeans.api.project.ProjectInformation;
34 import org.netbeans.api.project.ProjectManager;
35 import org.netbeans.api.project.ant.AntArtifact;
36 import org.netbeans.bluej.api.BluejOpenCloseCallback;
37 import org.netbeans.bluej.classpath.ClassPathProviderImpl;
38 import org.netbeans.bluej.options.BlueJSettings;
39 import org.netbeans.spi.project.AuxiliaryConfiguration;
40 import org.netbeans.spi.project.SubprojectProvider;
41 import org.netbeans.spi.project.ant.AntArtifactProvider;
42 import org.netbeans.spi.project.support.ant.AntProjectEvent;
43 import org.netbeans.spi.project.support.ant.AntProjectHelper;
44 import org.netbeans.spi.project.support.ant.AntProjectListener;
45 import org.netbeans.spi.project.support.ant.EditableProperties;
46 import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
47 import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
48 import org.netbeans.spi.project.support.ant.PropertyEvaluator;
49 import org.netbeans.spi.project.support.ant.PropertyUtils;
50 import org.netbeans.spi.project.support.ant.ReferenceHelper;
51 import org.netbeans.spi.project.ui.PrivilegedTemplates;
52 import org.netbeans.spi.project.ui.ProjectOpenedHook;
53 import org.netbeans.spi.project.ui.RecommendedTemplates;
54 import org.openide.ErrorManager;
55 import org.openide.filesystems.FileObject;
56 import org.openide.util.Lookup;
57 import org.openide.util.Mutex;
58 import org.openide.util.Utilities;
59 import org.openide.util.lookup.Lookups;
60 import org.w3c.dom.Element JavaDoc;
61 import org.w3c.dom.Text JavaDoc;
62 import org.w3c.dom.Node JavaDoc;
63 import org.w3c.dom.NodeList JavaDoc;
64
65 /**
66  * Represents one bluej project.
67  * @author Milos Kleint
68  */

69 public final class BluejProject implements Project, AntProjectListener {
70     
71     private static final Icon JavaDoc BLUEJ_PROJECT_ICON = new ImageIcon JavaDoc(Utilities.loadImage("org/netbeans/bluej/resources/bluejproject.png")); // NOI18N
72

73     private static final String JavaDoc PROP_BLUEJ_HOME = "bluej.userlib"; //NOI18N
74

75     // Special properties of the project
76
public static final String JavaDoc J2SE_PROJECT_NAME = "j2se.project.name"; // NOI18N
77
public static final String JavaDoc JAVA_PLATFORM = "platform.active"; // NOI18N
78

79     // Properties stored in the PROJECT.PROPERTIES
80
public static final String JavaDoc DIST_DIR = "dist.dir"; // NOI18N
81
public static final String JavaDoc DIST_JAR = "dist.jar"; // NOI18N
82
public static final String JavaDoc JAVAC_CLASSPATH = "javac.classpath"; // NOI18N
83
public static final String JavaDoc RUN_CLASSPATH = "run.classpath"; // NOI18N
84
public static final String JavaDoc RUN_JVM_ARGS = "run.jvmargs"; // NOI18N
85
public static final String JavaDoc RUN_WORK_DIR = "work.dir"; // NOI18N
86
public static final String JavaDoc DEBUG_CLASSPATH = "debug.classpath"; // NOI18N
87
public static final String JavaDoc JAR_COMPRESS = "jar.compress"; // NOI18N
88
public static final String JavaDoc MAIN_CLASS = "main.class"; // NOI18N
89
public static final String JavaDoc JAVAC_SOURCE = "javac.source"; // NOI18N
90
public static final String JavaDoc JAVAC_TARGET = "javac.target"; // NOI18N
91
public static final String JavaDoc JAVAC_TEST_CLASSPATH = "javac.test.classpath"; // NOI18N
92
public static final String JavaDoc JAVAC_DEBUG = "javac.debug"; // NOI18N
93
public static final String JavaDoc JAVAC_DEPRECATION = "javac.deprecation"; // NOI18N
94
public static final String JavaDoc JAVAC_COMPILER_ARG = "javac.compilerargs"; //NOI18N
95
public static final String JavaDoc RUN_TEST_CLASSPATH = "run.test.classpath"; // NOI18N
96
public static final String JavaDoc BUILD_DIR = "build.dir"; // NOI18N
97
public static final String JavaDoc BUILD_CLASSES_DIR = "build.classes.dir"; // NOI18N
98
public static final String JavaDoc BUILD_TEST_CLASSES_DIR = "build.test.classes.dir"; // NOI18N
99
public static final String JavaDoc BUILD_TEST_RESULTS_DIR = "build.test.results.dir"; // NOI18N
100
public static final String JavaDoc BUILD_CLASSES_EXCLUDES = "build.classes.excludes"; // NOI18N
101
public static final String JavaDoc DIST_JAVADOC_DIR = "dist.javadoc.dir"; // NOI18N
102
public static final String JavaDoc NO_DEPENDENCIES="no.dependencies"; // NOI18N
103
public static final String JavaDoc DEBUG_TEST_CLASSPATH = "debug.test.classpath"; // NOI18N
104

105     
106     public static final String JavaDoc JAVADOC_PRIVATE="javadoc.private"; // NOI18N
107
public static final String JavaDoc JAVADOC_NO_TREE="javadoc.notree"; // NOI18N
108
public static final String JavaDoc JAVADOC_USE="javadoc.use"; // NOI18N
109
public static final String JavaDoc JAVADOC_NO_NAVBAR="javadoc.nonavbar"; // NOI18N
110
public static final String JavaDoc JAVADOC_NO_INDEX="javadoc.noindex"; // NOI18N
111
public static final String JavaDoc JAVADOC_SPLIT_INDEX="javadoc.splitindex"; // NOI18N
112
public static final String JavaDoc JAVADOC_AUTHOR="javadoc.author"; // NOI18N
113
public static final String JavaDoc JAVADOC_VERSION="javadoc.version"; // NOI18N
114
public static final String JavaDoc JAVADOC_WINDOW_TITLE="javadoc.windowtitle"; // NOI18N
115
public static final String JavaDoc JAVADOC_ENCODING="javadoc.encoding"; // NOI18N
116
public static final String JavaDoc JAVADOC_ADDITIONALPARAM="javadoc.additionalparam"; // NOI18N
117

118     // Properties stored in the PRIVATE.PROPERTIES
119
public static final String JavaDoc APPLICATION_ARGS = "application.args"; // NOI18N
120
public static final String JavaDoc JAVADOC_PREVIEW="javadoc.preview"; // NOI18N
121

122
123     private final AuxiliaryConfiguration aux;
124     private final AntProjectHelper helper;
125     private final PropertyEvaluator eval;
126     private final ReferenceHelper refHelper;
127     private final GeneratedFilesHelper genFilesHelper;
128     private final Lookup lookup;
129     private final UpdateHelper updateHelper;
130 //// private MainClassUpdater mainClassUpdater;
131
//// private SourceRoots sourceRoots;
132
//// private SourceRoots testRoots;
133

134
135     BluejProject(AntProjectHelper helper) throws IOException JavaDoc {
136         this.helper = helper;
137         eval = createEvaluator();
138         aux = helper.createAuxiliaryConfiguration();
139         refHelper = new ReferenceHelper(helper, aux, eval);
140         genFilesHelper = new GeneratedFilesHelper(helper);
141         this.updateHelper = new UpdateHelper (this, this.helper, this.aux, this.genFilesHelper,
142             UpdateHelper.createDefaultNotifier());
143
144         lookup = createLookup(aux);
145         helper.addAntProjectListener(this);
146     }
147     
148
149     /**
150      * Returns the project directory
151      * @return the directory the project is located in
152      */

153     public FileObject getProjectDirectory() {
154         return helper.getProjectDirectory();
155     }
156
157     public String JavaDoc toString() {
158         return "BluejProject[" + getProjectDirectory() + "]"; // NOI18N
159
}
160     
161     private PropertyEvaluator createEvaluator() {
162         // XXX might need to use a custom evaluator to handle active platform substitutions... TBD
163
// It is currently safe to not use the UpdateHelper for PropertyEvaluator; UH.getProperties() delegates to APH
164
return helper.getStandardPropertyEvaluator();
165     }
166     
167     PropertyEvaluator evaluator() {
168         return eval;
169     }
170
171     ReferenceHelper getReferenceHelper () {
172         return this.refHelper;
173     }
174
175     public UpdateHelper getUpdateHelper() {
176         return this.updateHelper;
177     }
178     
179     public Lookup getLookup() {
180         return lookup;
181     }
182     
183     public AntProjectHelper getAntProjectHelper() {
184         return helper;
185     }
186
187     private Lookup createLookup(AuxiliaryConfiguration aux) {
188         SubprojectProvider spp = refHelper.createSubprojectProvider();
189         return Lookups.fixed(new Object JavaDoc[] {
190             new Info(),
191             aux,
192             helper.createCacheDirectoryProvider(),
193             spp,
194             new BluejActionProvider( this, getUpdateHelper()),
195             new BluejLogicalViewProvider(this),
196             new BJClassPathExtender(this),
197             new CustomizerProviderImpl(this, evaluator(), getUpdateHelper()),
198 //// // new J2SECustomizerProvider(this, this.updateHelper, evaluator(), refHelper),
199
//// new CustomizerProviderImpl(this, this.updateHelper, evaluator(), refHelper, this.genFilesHelper),
200
new ClassPathProviderImpl(this),
201             new SFBQueryImpl(this, helper, evaluator()),
202 //// new CompiledSourceForBinaryQuery(this.helper, evaluator(),getSourceRoots(),getTestSourceRoots()), //Does not use APH to get/put properties/cfgdata
203
new AntArtifactProviderImpl(),
204             new ProjectXmlSavedHookImpl(),
205             new ProjectOpenedHookImpl(),
206             new BluejUnitTestForSourceQuery(this),
207 //// new SourceLevelQueryImpl(evaluator()),
208
new BluejSources (this),
209 //// new J2SESharabilityQuery (this.helper, evaluator(), getSourceRoots(), getTestSourceRoots()), //Does not use APH to get/put properties/cfgdata
210
new BluejFileBuiltQuery(this.helper, evaluator()), //Does not use APH to get/put properties/cfgdata
211
new RecommendedTemplatesImpl(),
212 //// new J2SEProjectClassPathExtender(this, this.updateHelper, eval,refHelper),
213
this // never cast an externally obtained Project to BluejProject - use lookup instead
214
//// new J2SEProjectOperations(this),
215
//// new J2SEProjectWebServicesSupportProvider()
216
});
217     }
218
219     public void configurationXmlChanged(AntProjectEvent ev) {
220         if (ev.getPath().equals(AntProjectHelper.PROJECT_XML_PATH)) {
221             // Could be various kinds of changes, but name & displayName might have changed.
222
Info info = (Info)getLookup().lookup(ProjectInformation.class);
223             info.firePropertyChange(ProjectInformation.PROP_NAME);
224             info.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME);
225         }
226     }
227
228     public void propertiesChanged(AntProjectEvent ev) {
229         // currently ignored (probably better to listen to evaluator() if you need to)
230
}
231     
232     // Package private methods -------------------------------------------------
233

234 //// /**
235
//// * Returns the source roots of this project
236
//// * @return project's source roots
237
//// */
238
//// public synchronized SourceRoots getSourceRoots() {
239
//// if (this.sourceRoots == null) { //Local caching, no project metadata access
240
//// this.sourceRoots = new SourceRoots(this.updateHelper, evaluator(), getReferenceHelper(), "source-roots", false, "src.{0}{1}.dir"); //NOI18N
241
//// }
242
//// return this.sourceRoots;
243
//// }
244
////
245
//// public synchronized SourceRoots getTestSourceRoots() {
246
//// if (this.testRoots == null) { //Local caching, no project metadata access
247
//// this.testRoots = new SourceRoots(this.updateHelper, evaluator(), getReferenceHelper(), "test-roots", true, "test.{0}{1}.dir"); //NOI18N
248
//// }
249
//// return this.testRoots;
250
//// }
251
////
252
//// File getTestClassesDirectory() {
253
//// String testClassesDir = evaluator().getProperty(J2SEProjectProperties.BUILD_TEST_CLASSES_DIR);
254
//// if (testClassesDir == null) {
255
//// return null;
256
//// }
257
//// return helper.resolveFile(testClassesDir);
258
//// }
259

260     // Currently unused (but see #47230):
261
/** Store configured project name. */
262     public void setName(final String JavaDoc name) {
263         ProjectManager.mutex().writeAccess(new Mutex.Action() {
264             public Object JavaDoc run() {
265                 Element JavaDoc data = helper.getPrimaryConfigurationData(true);
266                 // XXX replace by XMLUtil when that has findElement, findText, etc.
267
NodeList JavaDoc nl = data.getElementsByTagNameNS(BluejProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
268
Element JavaDoc nameEl;
269                 if (nl.getLength() == 1) {
270                     nameEl = (Element JavaDoc) nl.item(0);
271                     NodeList JavaDoc deadKids = nameEl.getChildNodes();
272                     while (deadKids.getLength() > 0) {
273                         nameEl.removeChild(deadKids.item(0));
274                     }
275                 } else {
276                     nameEl = data.getOwnerDocument().createElementNS(BluejProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name");
277                     data.insertBefore(nameEl, /* OK if null */data.getChildNodes().item(0));
278                 }
279                 nameEl.appendChild(data.getOwnerDocument().createTextNode(name));
280                 helper.putPrimaryConfigurationData(data, true);
281                 return null;
282             }
283         });
284     }
285
286
287
288
289     // Private innerclasses ----------------------------------------------------
290

291     private final class Info implements ProjectInformation {
292         
293         private final PropertyChangeSupport JavaDoc pcs = new PropertyChangeSupport JavaDoc(this);
294         
295         Info() {}
296         
297         void firePropertyChange(String JavaDoc prop) {
298             pcs.firePropertyChange(prop, null, null);
299         }
300         
301         public String JavaDoc getName() {
302             return PropertyUtils.getUsablePropertyName(getProjectDirectory().getName());
303         }
304         
305         public String JavaDoc getDisplayName() {
306             return (String JavaDoc) ProjectManager.mutex().readAccess(new Mutex.Action() {
307                 public Object JavaDoc run() {
308                     Element JavaDoc data = updateHelper.getPrimaryConfigurationData(true);
309                     // XXX replace by XMLUtil when that has findElement, findText, etc.
310
NodeList JavaDoc nl = data.getElementsByTagNameNS(BluejProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
311
if (nl.getLength() == 1) {
312                         nl = nl.item(0).getChildNodes();
313                         if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
314                             return ((Text JavaDoc) nl.item(0)).getNodeValue() + " " + getProjectDirectory().getName(); // NOI18N
315
}
316                     }
317                     return getProjectDirectory().getName(); // NOI18N
318
}
319             });
320         }
321         
322         public Icon JavaDoc getIcon() {
323             return BLUEJ_PROJECT_ICON;
324         }
325         
326         public Project getProject() {
327             return BluejProject.this;
328         }
329         
330         public void addPropertyChangeListener(PropertyChangeListener JavaDoc listener) {
331             pcs.addPropertyChangeListener(listener);
332         }
333         
334         public void removePropertyChangeListener(PropertyChangeListener JavaDoc listener) {
335             pcs.removePropertyChangeListener(listener);
336         }
337         
338     }
339     
340     private static final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
341         
342         ProjectXmlSavedHookImpl() {}
343         
344         protected void projectXmlSaved() throws IOException JavaDoc {
345             //May be called by {@link AuxiliaryConfiguration#putConfigurationFragment}
346
//which didn't affect the j2seproject
347
//// if (updateHelper.isCurrent()) {
348
//// //Refresh build-impl.xml only for j2seproject/2
349
//// genFilesHelper.refreshBuildScript(
350
//// GeneratedFilesHelper.BUILD_IMPL_XML_PATH,
351
//// BluejProject.class.getResource("resources/build-impl.xsl"),
352
//// false);
353
//// genFilesHelper.refreshBuildScript(
354
//// GeneratedFilesHelper.BUILD_XML_PATH,
355
//// BluejProject.class.getResource("resources/build.xsl"),
356
//// false);
357
//// }
358
}
359         
360     }
361     
362     public static File JavaDoc getUserLibPath(File JavaDoc bjHome) {
363         
364         File JavaDoc userlib;
365         if (Utilities.getOperatingSystem() == Utilities.OS_MAC) {
366             userlib = new File JavaDoc(bjHome.getParentFile(), bjHome.getName() + ".app/Contents/Resources/Java/userlib");
367         } else {
368             userlib = new File JavaDoc(new File JavaDoc(bjHome, "lib"), "userlib");
369         }
370         return userlib;
371     }
372     
373     private final class ProjectOpenedHookImpl extends ProjectOpenedHook implements PropertyChangeListener JavaDoc {
374         
375         ProjectOpenedHookImpl() {}
376         
377         protected void projectOpened() {
378             // Make it easier to run headless builds on the same machine at least.
379
ProjectManager.mutex().writeAccess(new Mutex.Action() {
380                 public Object JavaDoc run() {
381                     EditableProperties ep = updateHelper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH);
382                     File JavaDoc buildProperties = new File JavaDoc(System.getProperty("netbeans.user"), "build.properties"); // NOI18N
383
ep.setProperty("user.properties.file", buildProperties.getAbsolutePath()); // NOI18N
384
File JavaDoc bjHome = BlueJSettings.getDefault().getHome();
385                     if (bjHome != null) {
386                         
387                         ep.setProperty(PROP_BLUEJ_HOME, getUserLibPath(bjHome).getAbsolutePath());
388                         ep.setComment(PROP_BLUEJ_HOME, new String JavaDoc[] {
389                             "## the bluej.userlib property is reset everytime the project is opened in netbeans according to the",
390                             "## setting in the IDE that point to the location of the bluej installation's userlib directory.",
391                             "## It is required to find and use the libraries located in BLUEJ_HOME/lib/userlib when building the project"
392                         }, true);
393                     } else {
394                         ep.remove(PROP_BLUEJ_HOME);
395                     }
396                     ep.setProperty("bluej.config.libraries", BlueJSettings.getDefault().getUserLibrariesAsClassPath()); // NOI18N
397
ep.setComment("bluej.config.libraries", new String JavaDoc[] { // NOI18N
398
"## classpath entry that is composed from content of bluej.userlib.*.location properties in the user home's bluej.properties file..",
399                         "## rebuilt on every opening of the project in netbeans"
400                     }, true);
401                     updateHelper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep);
402                     try {
403                         ProjectManager.getDefault().saveProject(BluejProject.this);
404                     } catch (IOException JavaDoc e) {
405                         ErrorManager.getDefault().notify(e);
406                     }
407                     return null;
408                 }
409             });
410             BlueJSettings.getDefault().addPropertyChangeListener(this);
411             
412 //// // Check up on build scripts.
413
//// try {
414
//// if (updateHelper.isCurrent()) {
415
//// //Refresh build-impl.xml only for j2seproject/2
416
//// genFilesHelper.refreshBuildScript(
417
//// GeneratedFilesHelper.BUILD_IMPL_XML_PATH,
418
//// BluejProject.class.getResource("resources/build-impl.xsl"),
419
//// true);
420
//// genFilesHelper.refreshBuildScript(
421
//// GeneratedFilesHelper.BUILD_XML_PATH,
422
//// BluejProject.class.getResource("resources/build.xsl"),
423
//// true);
424
//// }
425
//// } catch (IOException e) {
426
//// ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e);
427
//// }
428

429             // register project's classpaths to GlobalPathRegistry
430
ClassPathProviderImpl cpProvider = (ClassPathProviderImpl)lookup.lookup(ClassPathProviderImpl.class);
431             GlobalPathRegistry.getDefault().register(ClassPath.BOOT, cpProvider.getBootPath());
432             GlobalPathRegistry.getDefault().register(ClassPath.SOURCE, cpProvider.getSourcePath());
433             GlobalPathRegistry.getDefault().register(ClassPath.COMPILE, cpProvider.getCompileTimeClasspath());
434
435 //// //register updater of main.class
436
//// //the updater is active only on the opened projects
437
//// mainClassUpdater = new MainClassUpdater (BluejProject.this, eval, updateHelper,
438
//// cpProvider.getProjectClassPaths(ClassPath.SOURCE)[0], J2SEProjectProperties.MAIN_CLASS);
439

440 //// J2SELogicalViewProvider physicalViewProvider = (J2SELogicalViewProvider)
441
//// BluejProject.this.getLookup().lookup (J2SELogicalViewProvider.class);
442
//// if (physicalViewProvider != null && physicalViewProvider.hasBrokenLinks()) {
443
//// BrokenReferencesSupport.showAlert();
444
//// }
445
BluejOpenCloseCallback callback = (BluejOpenCloseCallback) Lookup.getDefault().lookup(BluejOpenCloseCallback.class);
446             if (callback != null) {
447                 callback.projectOpened(BluejProject.this);
448             }
449         }
450         
451         protected void projectClosed() {
452             BlueJSettings.getDefault().removePropertyChangeListener(this);
453             // Probably unnecessary, but just in case:
454
try {
455                 ProjectManager.getDefault().saveProject(BluejProject.this);
456             } catch (IOException JavaDoc e) {
457                 ErrorManager.getDefault().notify(e);
458             }
459             BluejOpenCloseCallback callback = (BluejOpenCloseCallback) Lookup.getDefault().lookup(BluejOpenCloseCallback.class);
460             if (callback != null) {
461                 callback.projectClosed(BluejProject.this);
462             }
463             
464             // unregister project's classpaths to GlobalPathRegistry
465
ClassPathProviderImpl cpProvider = (ClassPathProviderImpl)lookup.lookup(ClassPathProviderImpl.class);
466             GlobalPathRegistry.getDefault().unregister(ClassPath.BOOT, cpProvider.getBootPath());
467             GlobalPathRegistry.getDefault().unregister(ClassPath.SOURCE, cpProvider.getSourcePath());
468             GlobalPathRegistry.getDefault().unregister(ClassPath.COMPILE, cpProvider.getCompileTimeClasspath());
469 //// if (mainClassUpdater != null) {
470
//// mainClassUpdater.unregister ();
471
//// mainClassUpdater = null;
472
//// }
473
}
474
475         public void propertyChange(PropertyChangeEvent JavaDoc evt) {
476             ProjectManager.mutex().writeAccess(new Mutex.Action() {
477                 public Object JavaDoc run() {
478                     EditableProperties ep = updateHelper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH);
479                     File JavaDoc bjHome = BlueJSettings.getDefault().getHome();
480                     if (bjHome != null) {
481                         ep.setProperty(PROP_BLUEJ_HOME, getUserLibPath(bjHome).getAbsolutePath());
482                     } else {
483                         ep.remove(PROP_BLUEJ_HOME);
484                     }
485                     updateHelper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep);
486                     try {
487                         ProjectManager.getDefault().saveProject(BluejProject.this);
488                     } catch (IOException JavaDoc e) {
489                         ErrorManager.getDefault().notify(e);
490                     }
491                     return null;
492                 }
493             });
494         }
495         
496     }
497     
498
499     /**
500      * Exports the main JAR as an official build product for use from other scripts.
501      * The type of the artifact will be {@link AntArtifact#TYPE_JAR}.
502      */

503     private final class AntArtifactProviderImpl implements AntArtifactProvider {
504
505         public AntArtifact[] getBuildArtifacts() {
506             return new AntArtifact[] {
507                 helper.createSimpleAntArtifact(JavaProjectConstants.ARTIFACT_TYPE_JAR, "dist.jar", evaluator(), "jar", "clean"), // NOI18N
508
};
509         }
510
511     }
512     
513     private static final class RecommendedTemplatesImpl implements RecommendedTemplates, PrivilegedTemplates {
514         RecommendedTemplatesImpl() {
515         }
516         
517         // List of primarily supported templates
518

519         private static final String JavaDoc[] APPLICATION_TYPES = new String JavaDoc[] {
520             "java-classes", // NOI18N
521
"java-main-class", // NOI18N
522
"java-forms", // NOI18N
523
"gui-java-application", // NOI18N
524
"java-beans", // NOI18N
525
"oasis-XML-catalogs", // NOI18N
526
"XML", // NOI18N
527
"ant-script", // NOI18N
528
"ant-task", // NOI18N
529
// "web-service-clients", // NOI18N
530
// "wsdl", // NOI18N
531
// "servlet-types", // NOI18N
532
// "web-types", // NOI18N
533
"junit", // NOI18N
534
// "MIDP", // NOI18N
535
"simple-files", // NOI18N
536
"bluej" // NOI18N
537
};
538         
539         private static final String JavaDoc[] PRIVILEGED_NAMES = new String JavaDoc[] {
540             "Templates/Bluej/StdClass.java", // NOI18N
541
"Templates/Bluej/MainClass.java", // NOI18N
542
"Templates/Classes/Package", // NOI18N
543
"Templates/Bluej/Interface.java", // NOI18N
544
"Templates/Bluej/Enum.java", // NOI18N
545
"Templates/Bluej/Abstract.java", // NOI18N
546
"Templates/Bluej/UnitTest.java", // NOI18N
547

548         };
549         
550         public String JavaDoc[] getRecommendedTypes() {
551             return APPLICATION_TYPES;
552         }
553         
554         public String JavaDoc[] getPrivilegedTemplates() {
555             return PRIVILEGED_NAMES;
556         }
557         
558     }
559
560 }
Popular Tags