KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > earproject > EarProject


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.earproject;
21
22 import java.beans.PropertyChangeListener JavaDoc;
23 import java.beans.PropertyChangeSupport JavaDoc;
24 import java.io.File JavaDoc;
25 import java.io.IOException JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28 import javax.swing.Icon JavaDoc;
29 import javax.swing.ImageIcon JavaDoc;
30 import org.netbeans.api.java.classpath.ClassPath;
31 import org.netbeans.api.java.classpath.GlobalPathRegistry;
32 import org.netbeans.api.project.FileOwnerQuery;
33 import org.netbeans.api.project.Project;
34 import org.netbeans.api.project.ProjectInformation;
35 import org.netbeans.api.project.ProjectManager;
36 import org.netbeans.api.project.ant.AntArtifact;
37 import org.netbeans.modules.j2ee.api.ejbjar.Ear;
38 import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
39 import org.netbeans.modules.j2ee.earproject.classpath.ClassPathProviderImpl;
40 import org.netbeans.modules.j2ee.earproject.ui.EarCustomizerProvider;
41 import org.netbeans.modules.j2ee.earproject.ui.IconBaseProvider;
42 import org.netbeans.modules.j2ee.earproject.ui.J2eeArchiveLogicalViewProvider;
43 import org.netbeans.modules.j2ee.earproject.ui.LogicalViewProvider;
44 import org.netbeans.modules.j2ee.earproject.ui.customizer.EarProjectProperties;
45 import org.netbeans.modules.j2ee.earproject.ui.customizer.VisualClassPathItem;
46 import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarFactory;
47 import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport;
48 import org.netbeans.spi.project.AuxiliaryConfiguration;
49 import org.netbeans.spi.project.SubprojectProvider;
50 import org.netbeans.spi.project.ant.AntArtifactProvider;
51 import org.netbeans.spi.project.support.LookupProviderSupport;
52 import org.netbeans.spi.project.support.ant.AntBasedProjectType;
53 import org.netbeans.spi.project.support.ant.AntProjectEvent;
54 import org.netbeans.spi.project.support.ant.AntProjectHelper;
55 import org.netbeans.spi.project.support.ant.AntProjectListener;
56 import org.netbeans.spi.project.support.ant.EditableProperties;
57 import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
58 import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
59 import org.netbeans.spi.project.support.ant.PropertyEvaluator;
60 import org.netbeans.spi.project.support.ant.PropertyUtils;
61 import org.netbeans.spi.project.support.ant.ReferenceHelper;
62 import org.netbeans.spi.project.support.ant.SourcesHelper;
63 import org.netbeans.spi.project.ui.PrivilegedTemplates;
64 import org.netbeans.spi.project.ui.ProjectOpenedHook;
65 import org.netbeans.spi.project.ui.RecommendedTemplates;
66 import org.netbeans.spi.project.ui.support.UILookupMergerSupport;
67 import org.openide.ErrorManager;
68 import org.openide.filesystems.FileAttributeEvent;
69 import org.openide.filesystems.FileChangeListener;
70 import org.openide.filesystems.FileEvent;
71 import org.openide.filesystems.FileObject;
72 import org.openide.filesystems.FileRenameEvent;
73 import org.openide.filesystems.FileUtil;
74 import org.openide.util.Lookup;
75 import org.openide.util.Mutex;
76 import org.openide.util.NbBundle;
77 import org.openide.util.Utilities;
78 import org.openide.util.lookup.Lookups;
79 import org.w3c.dom.Element JavaDoc;
80 import org.w3c.dom.Node JavaDoc;
81 import org.w3c.dom.NodeList JavaDoc;
82 import org.w3c.dom.Text JavaDoc;
83
84 /**
85  * Represents an Enterprise Application project.
86  *
87  * This is the project api centric view of the enterprise application.
88  *
89  * @author vince kraemer
90  */

91 public final class EarProject implements Project, AntProjectListener, FileChangeListener, ProjectPropertyProvider {
92     
93     private static final Icon JavaDoc EAR_PROJECT_ICON = new ImageIcon JavaDoc(Utilities.loadImage("org/netbeans/modules/j2ee/earproject/ui/resources/projectIcon.gif")); // NOI18N
94
public static final String JavaDoc ARTIFACT_TYPE_EAR = "ear";
95     
96     private final AntProjectHelper helper;
97     private final PropertyEvaluator eval;
98     private final ReferenceHelper refHelper;
99     private final GeneratedFilesHelper genFilesHelper;
100     private final Lookup lookup;
101     private final ProjectEar appModule;
102     private final Ear ear;
103     private final AntBasedProjectType abpt;
104     private final UpdateHelper updateHelper;
105     private final BrokenProjectSupport brokenProjectSupport;
106     
107     EarProject(final AntProjectHelper helper, AntBasedProjectType abpt) throws IOException JavaDoc {
108         this.helper = helper;
109         this.abpt = abpt;
110         eval = createEvaluator();
111         AuxiliaryConfiguration aux = helper.createAuxiliaryConfiguration();
112         refHelper = new ReferenceHelper(helper, aux, helper.getStandardPropertyEvaluator());
113         genFilesHelper = new GeneratedFilesHelper(helper);
114         appModule = new ProjectEar(this);
115         ear = EjbJarFactory.createEar(appModule);
116         updateHelper = new UpdateHelper(this, this.helper, aux, this.genFilesHelper, UpdateHelper.createDefaultNotifier());
117         brokenProjectSupport = new BrokenProjectSupport(this);
118         lookup = createLookup(aux);
119     }
120     
121     public UpdateHelper getUpdateHelper() {
122         return updateHelper;
123     }
124     
125     public FileObject getProjectDirectory() {
126         return helper.getProjectDirectory();
127     }
128     
129     public String JavaDoc toString() {
130         return "EarProject[" + getProjectDirectory() + "]"; // NOI18N
131
}
132     
133     private PropertyEvaluator createEvaluator() {
134         // XXX might need to use a custom evaluator to handle active platform substitutions... TBD
135
return helper.getStandardPropertyEvaluator();
136     }
137     
138     PropertyEvaluator evaluator() {
139         return eval;
140     }
141     
142     public Lookup getLookup() {
143         return lookup;
144     }
145     
146     public AntProjectHelper getAntProjectHelper() {
147         return helper;
148     }
149     
150     private Lookup createLookup(AuxiliaryConfiguration aux) {
151         SubprojectProvider spp = refHelper.createSubprojectProvider();
152         
153         // XXX unnecessarily creates a SourcesHelper, which is then GC's
154
// as it is not hold. This is probably unneeded now that issue 63359 was fixed.
155
final SourcesHelper sourcesHelper = new SourcesHelper(helper, evaluator());
156         String JavaDoc configFilesLabel = NbBundle.getMessage(EarProject.class, "LBL_Node_ConfigBase"); //NOI18N
157

158         sourcesHelper.addPrincipalSourceRoot("${"+EarProjectProperties.META_INF+"}", configFilesLabel, /*XXX*/null, null); // NOI18N
159
ProjectManager.mutex().postWriteRequest(new Runnable JavaDoc() {
160             public void run() {
161                 sourcesHelper.registerExternalRoots(FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT);
162             }
163         });
164         Lookup base = Lookups.fixed(new Object JavaDoc[] {
165             new Info(),
166             aux,
167             spp,
168             new ProjectEarProvider(),
169             appModule, //implements J2eeModuleProvider
170
new EarActionProvider(this, updateHelper),
171             new LogicalViewProvider(this, updateHelper, evaluator(), refHelper, abpt),
172             new MyIconBaseProvider(),
173             new EarCustomizerProvider( this, helper, refHelper, abpt ),
174             new ClassPathProviderImpl(helper, evaluator()),
175             new ProjectXmlSavedHookImpl(),
176             new ProjectOpenedHookImpl(),
177             new EarSources(helper, evaluator()),
178             new RecommendedTemplatesImpl(),
179             helper.createSharabilityQuery(evaluator(),
180                     new String JavaDoc[] {"${"+EarProjectProperties.SOURCE_ROOT+"}"}, // NOI18N
181
new String JavaDoc[] {
182                 "${"+EarProjectProperties.BUILD_DIR+"}", // NOI18N
183
"${"+EarProjectProperties.DIST_DIR+"}"} // NOI18N
184
),
185             this,
186             new EarProjectOperations(this),
187             brokenProjectSupport,
188             new AntArtifactProviderImpl(),
189             UILookupMergerSupport.createPrivilegedTemplatesMerger(),
190             UILookupMergerSupport.createRecommendedTemplatesMerger(),
191             LookupProviderSupport.createSourcesMerger()
192         });
193         return LookupProviderSupport.createCompositeLookup(base, "Projects/org-netbeans-modules-j2ee-earproject/Lookup"); //NOI18N
194
}
195     
196     public void configurationXmlChanged(AntProjectEvent ev) {
197     }
198     
199     public void propertiesChanged(AntProjectEvent ev) {
200         // currently ignored
201
//TODO: should not be ignored!
202
}
203     
204     public String JavaDoc getBuildXmlName() {
205         String JavaDoc storedName = helper.getStandardPropertyEvaluator().getProperty(EarProjectProperties.BUILD_FILE);
206         return storedName == null ? GeneratedFilesHelper.BUILD_XML_PATH : storedName;
207     }
208     
209     // Package private methods -------------------------------------------------
210

211     public ProjectEar getAppModule() {
212         return appModule;
213     }
214     
215     public Ear getEar() {
216         return ear;
217     }
218     
219     public void fileAttributeChanged(FileAttributeEvent fe) {
220     }
221     
222     public void fileChanged(FileEvent fe) {
223     }
224     
225     public void fileDataCreated(FileEvent fe) {
226     }
227     
228     public void fileDeleted(FileEvent fe) {
229     }
230     
231     public void fileFolderCreated(FileEvent fe) {
232     }
233     
234     public void fileRenamed(FileRenameEvent fe) {
235     }
236     
237     /** Return configured project name. */
238     public String JavaDoc getName() {
239         return (String JavaDoc) ProjectManager.mutex().readAccess(new Mutex.Action() {
240             public Object JavaDoc run() {
241                 Element JavaDoc data = updateHelper.getPrimaryConfigurationData(true);
242                 // XXX replace by XMLUtil when that has findElement, findText, etc.
243
NodeList JavaDoc nl = data.getElementsByTagNameNS(EarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
244
if (nl.getLength() == 1) {
245                     nl = nl.item(0).getChildNodes();
246                     if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
247                         return ((Text JavaDoc) nl.item(0)).getNodeValue();
248                     }
249                 }
250                 return "EAR????"; // NOI18N
251
}
252         });
253     }
254     
255     /** Store configured project name. */
256     public void setName(final String JavaDoc name) {
257         ProjectManager.mutex().writeAccess(new Mutex.Action() {
258             public Object JavaDoc run() {
259                 Element JavaDoc data = helper.getPrimaryConfigurationData(true);
260                 // XXX replace by XMLUtil when that has findElement, findText, etc.
261
NodeList JavaDoc nl = data.getElementsByTagNameNS(EarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
262
Element JavaDoc nameEl;
263                 if (nl.getLength() == 1) {
264                     nameEl = (Element JavaDoc) nl.item(0);
265                     NodeList JavaDoc deadKids = nameEl.getChildNodes();
266                     while (deadKids.getLength() > 0) {
267                         nameEl.removeChild(deadKids.item(0));
268                     }
269                 } else {
270                     nameEl = data.getOwnerDocument().createElementNS(EarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
271
data.insertBefore(nameEl, /* OK if null */data.getChildNodes().item(0));
272                 }
273                 nameEl.appendChild(data.getOwnerDocument().createTextNode(name));
274                 helper.putPrimaryConfigurationData(data, true);
275                 return null;
276             }
277         });
278     }
279     
280     // Private innerclasses ----------------------------------------------------
281

282     private final class Info implements ProjectInformation {
283         
284         private final PropertyChangeSupport JavaDoc pcs = new PropertyChangeSupport JavaDoc(this);
285         
286         Info() {}
287         
288         void firePropertyChange(String JavaDoc prop) {
289             pcs.firePropertyChange(prop, null, null);
290         }
291         
292         public String JavaDoc getName() {
293             return EarProject.this.getName();
294         }
295         
296         public String JavaDoc getDisplayName() {
297             return EarProject.this.getName();
298         }
299         
300         public Icon JavaDoc getIcon() {
301             return EAR_PROJECT_ICON;
302         }
303         
304         public Project getProject() {
305             return EarProject.this;
306         }
307         
308         public void addPropertyChangeListener(PropertyChangeListener JavaDoc listener) {
309             pcs.addPropertyChangeListener(listener);
310         }
311         
312         public void removePropertyChangeListener(PropertyChangeListener JavaDoc listener) {
313             pcs.removePropertyChangeListener(listener);
314         }
315         
316     }
317     
318     private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
319         
320         ProjectXmlSavedHookImpl() {}
321         
322         protected void projectXmlSaved() throws IOException JavaDoc {
323             genFilesHelper.refreshBuildScript(
324                     GeneratedFilesHelper.BUILD_IMPL_XML_PATH,
325                     EarProject.class.getResource("resources/build-impl.xsl"),
326                     false);
327             genFilesHelper.refreshBuildScript(
328                     getBuildXmlName(),
329                     EarProject.class.getResource("resources/build.xsl"),
330                     false);
331         }
332         
333     }
334     
335     private boolean addLibrary(List JavaDoc<VisualClassPathItem> cpItems, FileObject lib) {
336         boolean needsAdding = true;
337         for (Iterator JavaDoc vcpsIter = cpItems.iterator(); vcpsIter.hasNext();) {
338             VisualClassPathItem vcpi = (VisualClassPathItem) vcpsIter.next();
339             
340             if (vcpi.getType() != VisualClassPathItem.Type.JAR) {
341                 continue;
342             }
343             FileObject fo = FileUtil.toFileObject(new File JavaDoc(helper.getStandardPropertyEvaluator().evaluate(vcpi.getEvaluated())));
344             if (lib.equals(fo)) {
345                 needsAdding = false;
346                 break;
347             }
348         }
349         if (needsAdding) {
350             String JavaDoc file = "${"+EarProjectProperties.LIBRARIES_DIR+"}/"+lib.getNameExt(); // NOI18N
351
VisualClassPathItem cpItem = VisualClassPathItem.createClassPath(
352                     file, VisualClassPathItem.PATH_IN_WAR_LIB);
353             cpItems.add(cpItem);
354         }
355         return needsAdding;
356     }
357     
358     /** Package-private for unit tests only. */
359     final class ProjectOpenedHookImpl extends ProjectOpenedHook {
360         
361         ProjectOpenedHookImpl() {}
362         
363         protected void projectOpened() {
364             try {
365                 //Check libraries and add them to classpath automatically
366
String JavaDoc libFolderName = helper.getStandardPropertyEvaluator().getProperty(EarProjectProperties.LIBRARIES_DIR);
367                 EarProjectProperties epp = new EarProjectProperties(EarProject.this, refHelper, abpt);
368                 getAppModule().setModules(epp.getModuleMap());
369                 if (libFolderName != null && new File JavaDoc(libFolderName).isDirectory()) {
370                     @SuppressWarnings JavaDoc("unchecked")
371                     List JavaDoc<VisualClassPathItem> cpItems = (List JavaDoc<VisualClassPathItem>) epp.get(EarProjectProperties.JAVAC_CLASSPATH);
372                     FileObject libFolder = FileUtil.toFileObject(new File JavaDoc(libFolderName));
373                     FileObject libs [] = libFolder.getChildren();
374                     boolean anyChanged = false;
375                     for (int i = 0; i < libs.length; i++) {
376                         anyChanged = addLibrary(cpItems, libs [i]) || anyChanged;
377                     }
378                     if (anyChanged) {
379                         epp.put(EarProjectProperties.JAVAC_CLASSPATH, cpItems);
380                         epp.store();
381                         ProjectManager.getDefault().saveProject(EarProject.this);
382                     }
383                     libFolder.addFileChangeListener(EarProject.this);
384                 }
385                 // Check up on build scripts.
386
genFilesHelper.refreshBuildScript(
387                         GeneratedFilesHelper.BUILD_IMPL_XML_PATH,
388                         EarProject.class.getResource("resources/build-impl.xsl"),
389                         true);
390                 genFilesHelper.refreshBuildScript(
391                         getBuildXmlName(),
392                         EarProject.class.getResource("resources/build.xsl"),
393                         true);
394                 
395                 epp.ensurePlatformIsSet(true);
396             } catch (IOException JavaDoc e) {
397                 ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e);
398             }
399             
400             // register project's classpaths to GlobalPathRegistry
401
ClassPathProviderImpl cpProvider = (ClassPathProviderImpl)lookup.lookup(ClassPathProviderImpl.class);
402             GlobalPathRegistry.getDefault().register(ClassPath.BOOT, cpProvider.getProjectClassPaths(ClassPath.BOOT));
403             GlobalPathRegistry.getDefault().register(ClassPath.COMPILE, cpProvider.getProjectClassPaths(ClassPath.COMPILE));
404             
405             J2eeModuleProvider pwm = (J2eeModuleProvider) EarProject.this.getLookup().lookup(J2eeModuleProvider.class);
406             pwm.getConfigSupport().ensureConfigurationReady();
407             
408             // Make it easier to run headless builds on the same machine at least.
409
ProjectManager.mutex().writeAccess(new Mutex.Action() {
410                 public Object JavaDoc run() {
411                     EditableProperties ep = helper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH);
412                     ep.setProperty("netbeans.user", System.getProperty("netbeans.user"));
413                     helper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep);
414                     try {
415                         ProjectManager.getDefault().saveProject(EarProject.this);
416                     } catch (IOException JavaDoc e) {
417                         ErrorManager.getDefault().notify(e);
418                     }
419                     return null;
420                 }
421             });
422             if (J2eeArchiveLogicalViewProvider.hasBrokenLinks(helper, refHelper)) {
423                 BrokenReferencesSupport.showAlert();
424             }
425             
426         }
427         
428         protected void projectClosed() {
429             // Probably unnecessary, but just in case:
430
try {
431                 ProjectManager.getDefault().saveProject(EarProject.this);
432             } catch (IOException JavaDoc e) {
433                 ErrorManager.getDefault().notify(e);
434             }
435             
436             brokenProjectSupport.cleanUp();
437             
438             // unregister project's classpaths to GlobalPathRegistry
439
ClassPathProviderImpl cpProvider = (ClassPathProviderImpl)lookup.lookup(ClassPathProviderImpl.class);
440             GlobalPathRegistry.getDefault().unregister(ClassPath.BOOT, cpProvider.getProjectClassPaths(ClassPath.BOOT));
441             GlobalPathRegistry.getDefault().unregister(ClassPath.COMPILE, cpProvider.getProjectClassPaths(ClassPath.COMPILE));
442         }
443         
444     }
445     
446     private static final class RecommendedTemplatesImpl implements RecommendedTemplates, PrivilegedTemplates {
447         
448         // List of primarily supported templates
449

450         private static final String JavaDoc[] TYPES = new String JavaDoc[] {
451             "XML", // NOI18N
452
"ear-types", // NOI18N
453
"wsdl", // NOI18N
454
"simple-files", // NOI18N
455
"ant-script", // NOI18N
456
"ant-task", // NOI18N
457
};
458         
459         private static final String JavaDoc[] PRIVILEGED_NAMES = new String JavaDoc[] {
460             "Templates/XML/XMLWizard", // NOI18N
461
"Templates/Other/Folder" // NOI18N
462
};
463         public String JavaDoc[] getRecommendedTypes() {
464             return TYPES;
465         }
466         public String JavaDoc[] getPrivilegedTemplates() {
467             return PRIVILEGED_NAMES;
468         }
469     }
470     
471     class MyIconBaseProvider implements IconBaseProvider {
472         public String JavaDoc getIconBase() {
473             return "org/netbeans/modules/j2ee/earproject/ui/resources/"; // NOI18N
474
}
475     }
476     
477     /** May return <code>null</code>. */
478     FileObject getOrCreateMetaInfDir() {
479         String JavaDoc metaInfProp = helper.getStandardPropertyEvaluator().
480                 getProperty(EarProjectProperties.META_INF);
481         if (metaInfProp == null) {
482             // IZ 91941
483
// does project.properties exist? if yes, something is probably wrong...
484
File JavaDoc projectProperties = helper.resolveFile(AntProjectHelper.PROJECT_PROPERTIES_PATH);
485             if (projectProperties.exists()) {
486                 // file exists, log warning
487
ErrorManager.getDefault().log(ErrorManager.WARNING,
488                         "Cannot resolve " + EarProjectProperties.META_INF + // NOI18N
489
" property for " + this); // NOI18N
490
}
491             return null;
492         }
493         FileObject metaInfFO = null;
494         try {
495             File JavaDoc prjDirF = FileUtil.toFile(getProjectDirectory());
496             File JavaDoc rootF = prjDirF;
497             while (rootF.getParentFile() != null) {
498                 rootF = rootF.getParentFile();
499             }
500             File JavaDoc metaInfF = PropertyUtils.resolveFile(prjDirF, metaInfProp);
501             String JavaDoc metaInfPropRel = PropertyUtils.relativizeFile(rootF, metaInfF);
502             assert metaInfPropRel != null;
503             metaInfFO = FileUtil.createFolder(FileUtil.toFileObject(rootF), metaInfPropRel);
504         } catch (IOException JavaDoc ex) {
505             assert false : ex;
506         }
507         return metaInfFO;
508     }
509     
510     FileObject getFileObject(String JavaDoc propname) {
511         String JavaDoc prop = helper.getStandardPropertyEvaluator().getProperty(propname);
512         if (prop != null) {
513             return helper.resolveFileObject(prop);
514         } else {
515             return null;
516         }
517     }
518     
519     File JavaDoc getFile(String JavaDoc propname) {
520         String JavaDoc prop = helper.getStandardPropertyEvaluator().getProperty(propname);
521         if (prop != null) {
522             return helper.resolveFile(prop);
523         } else {
524             return null;
525         }
526     }
527     
528     public String JavaDoc getServerID() {
529         return helper.getStandardPropertyEvaluator().getProperty(EarProjectProperties.J2EE_SERVER_TYPE);
530     }
531     
532     public String JavaDoc getServerInstanceID() {
533         return helper.getStandardPropertyEvaluator().getProperty(EarProjectProperties.J2EE_SERVER_INSTANCE);
534     }
535     
536     public String JavaDoc getJ2eePlatformVersion() {
537         return helper.getStandardPropertyEvaluator().getProperty(EarProjectProperties.J2EE_PLATFORM);
538     }
539     
540     public EarProjectProperties getProjectProperties() {
541         return new EarProjectProperties(this, refHelper, abpt);
542     }
543     
544     public GeneratedFilesHelper getGeneratedFilesHelper() {
545         return genFilesHelper;
546     }
547     
548     private final class AntArtifactProviderImpl implements AntArtifactProvider{
549         public AntArtifact[] getBuildArtifacts() {
550             return new AntArtifact[] {
551                 helper.createSimpleAntArtifact(ARTIFACT_TYPE_EAR, "dist.jar", evaluator(), "dist", "clean"), // NOI18N
552
};
553         }
554         
555     }
556     
557 }
558
Popular Tags