This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 110886
Collapse All | Expand All

(-)a/j2ee.archive/nbproject/project.xml (+9 lines)
Lines 164-169 Link Here
164
                    </run-dependency>
164
                    </run-dependency>
165
                </dependency>
165
                </dependency>
166
                <dependency>
166
                <dependency>
167
                    <code-name-base>org.netbeans.modules.java.api.common</code-name-base>
168
                    <build-prerequisite/>
169
                    <compile-dependency/>
170
                    <run-dependency>
171
                        <release-version>0-1</release-version>
172
                        <specification-version>1.18</specification-version>
173
                    </run-dependency>
174
                </dependency>
175
                <dependency>
167
                    <code-name-base>org.netbeans.modules.java.project</code-name-base>
176
                    <code-name-base>org.netbeans.modules.java.project</code-name-base>
168
                    <build-prerequisite/>
177
                    <build-prerequisite/>
169
                    <compile-dependency/>
178
                    <compile-dependency/>
(-)a/j2ee.archive/src/org/netbeans/modules/j2ee/archive/project/ArchiveProject.java (-75 / +19 lines)
Lines 42-51 Link Here
42
package org.netbeans.modules.j2ee.archive.project;
42
package org.netbeans.modules.j2ee.archive.project;
43
43
44
import java.beans.PropertyChangeListener;
44
import java.beans.PropertyChangeListener;
45
import java.beans.PropertyChangeSupport;
46
import java.io.File;
45
import java.io.File;
47
import java.io.IOException;
46
import java.io.IOException;
48
import java.lang.ref.WeakReference;
49
import java.util.ArrayList;
47
import java.util.ArrayList;
50
import java.util.Collection;
48
import java.util.Collection;
51
import java.util.HashMap;
49
import java.util.HashMap;
Lines 74-79 Link Here
74
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleImplementation2;
72
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleImplementation2;
75
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
73
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
76
import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel;
74
import org.netbeans.modules.j2ee.metadata.model.api.MetadataModel;
75
import org.netbeans.modules.java.api.common.ant.ProjectInfoImpl;
77
import org.netbeans.modules.web.api.webmodule.WebProjectConstants;
76
import org.netbeans.modules.web.api.webmodule.WebProjectConstants;
78
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
77
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
79
import org.netbeans.spi.project.AuxiliaryConfiguration;
78
import org.netbeans.spi.project.AuxiliaryConfiguration;
Lines 83-89 Link Here
83
import org.netbeans.spi.project.support.ant.AntProjectHelper;
82
import org.netbeans.spi.project.support.ant.AntProjectHelper;
84
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
83
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
85
import org.netbeans.spi.project.support.ant.PropertyEvaluator;
84
import org.netbeans.spi.project.support.ant.PropertyEvaluator;
86
import org.netbeans.spi.project.support.ant.PropertyUtils;
87
import org.netbeans.spi.project.ui.PrivilegedTemplates;
85
import org.netbeans.spi.project.ui.PrivilegedTemplates;
88
import org.netbeans.spi.project.ui.RecommendedTemplates;
86
import org.netbeans.spi.project.ui.RecommendedTemplates;
89
import org.openide.ErrorManager;
87
import org.openide.ErrorManager;
Lines 196-217 Link Here
196
    
194
    
197
    /** Return configured project name. */
195
    /** Return configured project name. */
198
    public String getName() {
196
    public String getName() {
199
        return (String) ProjectManager.mutex().readAccess(new Mutex.Action<String>() {
197
       ProjectInformation info = lookup.lookup(ProjectInformation.class);
200
            @Override
198
       return info.getName();
201
            public String run() {
202
                Element data = updateHelper.getPrimaryConfigurationData(true);
203
                // XXX replace by XMLUtil when that has findElement, findText, etc.
204
                NodeList nl = data.getElementsByTagNameNS(ArchiveProjectType.PROJECT_CONFIGURATION_NS, NAME_LIT);
205
                if (nl.getLength() == 1) {
206
                    nl = nl.item(0).getChildNodes();
207
                    if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
208
                        return ((Text) nl.item(0)).getNodeValue();
209
                    }
210
                }
211
                return "BINARCHIVE???"; // NOI18N
212
            }
213
        });
214
        
215
    }
199
    }
216
    
200
    
217
    public ArchiveProjectProperties getArchiveProjectProperties() {
201
    public ArchiveProjectProperties getArchiveProjectProperties() {
Lines 226-234 Link Here
226
    private final class HelpfulLookup extends Lookup {
210
    private final class HelpfulLookup extends Lookup {
227
        
211
        
228
        private boolean verbose = Boolean.getBoolean("archiveproject.lookup.verbose");
212
        private boolean verbose = Boolean.getBoolean("archiveproject.lookup.verbose");
229
        
213
214
        ProjectInfoImpl projectInfo = new Info(ArchiveProject.this, helper, updateHelper, ArchiveProjectType.PROJECT_CONFIGURATION_NS, ARCHIVE_PROJECT_ICON);
230
        Lookup inner = LookupProviderSupport.createCompositeLookup(Lookups.fixed(new Object[] {
215
        Lookup inner = LookupProviderSupport.createCompositeLookup(Lookups.fixed(new Object[] {
231
            new Info(),
216
            projectInfo,
232
            helper.createAuxiliaryConfiguration(),
217
            helper.createAuxiliaryConfiguration(),
233
            helper.createCacheDirectoryProvider(),
218
            helper.createCacheDirectoryProvider(),
234
            helper.createGlobFileBuiltQuery(eval, new String[] {"${src.dir}/*.java"},
219
            helper.createGlobFileBuiltQuery(eval, new String[] {"${src.dir}/*.java"},
Lines 311-374 Link Here
311
            return ret;
296
            return ret;
312
        }
297
        }
313
    }
298
    }
314
    //when #110886 gets implemented, this class is obsolete    
299
315
    private final class Info implements ProjectInformation {
300
    private final class Info extends ProjectInfoImpl {
316
        
301
317
        private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
302
        private final UpdateHelper updateHelper;
318
        private WeakReference<String> cachedName = null;
303
319
        
304
        public Info(Project project, AntProjectHelper projectHelper, UpdateHelper updateHelper, String configurationNameSpace, Icon icon) {
320
        Info() {}
305
            super(project, projectHelper, configurationNameSpace, icon);
321
        
306
            this.updateHelper = updateHelper;
322
        void firePropertyChange(String prop) {
323
            pcs.firePropertyChange(prop, null, null);
324
            synchronized (pcs) {
325
                cachedName = null;
326
            }
327
        }
307
        }
328
        
308
329
        @Override
309
        @Override
330
        public String getName() {
310
        protected Element getPrimaryConfigurationData(boolean shared) {
331
            return PropertyUtils.getUsablePropertyName(getDisplayName());
311
            return updateHelper.getPrimaryConfigurationData(true);
332
        }
312
        }
333
        
313
334
        @Override
335
        public String getDisplayName() {
336
            synchronized (pcs) {
337
                if (cachedName != null) {
338
                    String dn = cachedName.get();
339
                    if (dn != null) {
340
                        return dn;
341
                    }
342
                }
343
            }
344
            String dn = ArchiveProject.this.getNamedProjectAttribute(NAME_LIT);
345
            synchronized (pcs) {
346
                cachedName = new WeakReference<String>(dn);
347
            }
348
            return dn;
349
        }
350
        
351
        @Override
352
        public Icon getIcon() {
353
            return ARCHIVE_PROJECT_ICON;
354
        }
355
        
356
        @Override
357
        public Project getProject() {
358
            return ArchiveProject.this;
359
        }
360
        
361
        @Override
362
        public void addPropertyChangeListener(PropertyChangeListener listener) {
363
            pcs.addPropertyChangeListener(listener);
364
        }
365
        
366
        @Override
367
        public void removePropertyChangeListener(PropertyChangeListener listener) {
368
            pcs.removePropertyChangeListener(listener);
369
        }
370
    }
314
    }
371
    
315
372
    private final class MyAntProvider implements AntArtifactProvider {
316
    private final class MyAntProvider implements AntArtifactProvider {
373
        // TODO - Need to fix for ejb-jar/app-client/resource-adapter cases
317
        // TODO - Need to fix for ejb-jar/app-client/resource-adapter cases
374
        @Override
318
        @Override
(-)a/j2ee.archive/src/org/netbeans/modules/j2ee/archive/project/UpdateHelper.java (-4 lines)
Lines 44-56 Link Here
44
import java.io.IOException;
44
import java.io.IOException;
45
import javax.swing.JButton;
45
import javax.swing.JButton;
46
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
46
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
47
import org.w3c.dom.Comment;
48
import org.w3c.dom.Document;
47
import org.w3c.dom.Document;
49
import org.w3c.dom.Element;
48
import org.w3c.dom.Element;
50
import org.w3c.dom.NamedNodeMap;
51
import org.w3c.dom.Node;
52
import org.w3c.dom.NodeList;
49
import org.w3c.dom.NodeList;
53
import org.w3c.dom.Text;
54
import org.openide.DialogDisplayer;
50
import org.openide.DialogDisplayer;
55
import org.openide.ErrorManager;
51
import org.openide.ErrorManager;
56
import org.openide.NotifyDescriptor;
52
import org.openide.NotifyDescriptor;
(-)a/j2ee.clientproject/nbproject/project.xml (-1 / +1 lines)
Lines 206-212 Link Here
206
                    <compile-dependency/>
206
                    <compile-dependency/>
207
                    <run-dependency>
207
                    <run-dependency>
208
                        <release-version>0-1</release-version>
208
                        <release-version>0-1</release-version>
209
                        <specification-version>1.15</specification-version>
209
                        <specification-version>1.18</specification-version>
210
                    </run-dependency>
210
                    </run-dependency>
211
                </dependency>
211
                </dependency>
212
                <dependency>
212
                <dependency>
(-)a/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/AppClientProject.java (-85 / +4 lines)
Lines 88-93 Link Here
88
import org.netbeans.modules.j2ee.spi.ejbjar.CarImplementation;
88
import org.netbeans.modules.j2ee.spi.ejbjar.CarImplementation;
89
import org.netbeans.modules.j2ee.spi.ejbjar.CarImplementation2;
89
import org.netbeans.modules.j2ee.spi.ejbjar.CarImplementation2;
90
import org.netbeans.modules.java.api.common.SourceRoots;
90
import org.netbeans.modules.java.api.common.SourceRoots;
91
import org.netbeans.modules.java.api.common.ant.ProjectInfoImpl;
91
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
92
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
92
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
93
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
93
import org.netbeans.modules.java.api.common.project.ProjectProperties;
94
import org.netbeans.modules.java.api.common.project.ProjectProperties;
Lines 106-114 Link Here
106
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
107
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
107
import org.netbeans.spi.project.support.LookupProviderSupport;
108
import org.netbeans.spi.project.support.LookupProviderSupport;
108
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
109
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
109
import org.netbeans.spi.project.support.ant.AntProjectEvent;
110
import org.netbeans.spi.project.support.ant.AntProjectHelper;
110
import org.netbeans.spi.project.support.ant.AntProjectHelper;
111
import org.netbeans.spi.project.support.ant.AntProjectListener;
112
import org.netbeans.spi.project.support.ant.EditableProperties;
111
import org.netbeans.spi.project.support.ant.EditableProperties;
113
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
112
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
114
import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
113
import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
Lines 153-159 Link Here
153
    sharedNamespace=AppClientProjectType.PROJECT_CONFIGURATION_NAMESPACE,
152
    sharedNamespace=AppClientProjectType.PROJECT_CONFIGURATION_NAMESPACE,
154
    privateNamespace=AppClientProjectType.PRIVATE_CONFIGURATION_NAMESPACE
153
    privateNamespace=AppClientProjectType.PRIVATE_CONFIGURATION_NAMESPACE
155
)
154
)
156
public final class AppClientProject implements Project, AntProjectListener, FileChangeListener {
155
public final class AppClientProject implements Project, FileChangeListener {
157
    
156
    
158
    private final Icon CAR_PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/j2ee/clientproject/ui/resources/appclient.gif", false); // NOI18N
157
    private final Icon CAR_PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/j2ee/clientproject/ui/resources/appclient.gif", false); // NOI18N
159
    
158
    
Lines 216-222 Link Here
216
            getClassPathUiSupportCallback());
215
            getClassPathUiSupportCallback());
217
        classPathExtender = new ClassPathExtender(cpMod, ProjectProperties.JAVAC_CLASSPATH, ClassPathSupportCallbackImpl.ELEMENT_INCLUDED_LIBRARIES);
216
        classPathExtender = new ClassPathExtender(cpMod, ProjectProperties.JAVAC_CLASSPATH, ClassPathSupportCallbackImpl.ELEMENT_INCLUDED_LIBRARIES);
218
        lookup = createLookup(aux, cpProvider);
217
        lookup = createLookup(aux, cpProvider);
219
        helper.addAntProjectListener(this);
220
    }
218
    }
221
    
219
    
222
    private ClassPathModifier.Callback createClassPathModifierCallback() {
220
    private ClassPathModifier.Callback createClassPathModifierCallback() {
Lines 297-304 Link Here
297
        SubprojectProvider spp = refHelper.createSubprojectProvider();
295
        SubprojectProvider spp = refHelper.createSubprojectProvider();
298
        FileEncodingQueryImplementation encodingQuery = QuerySupport.createFileEncodingQuery(evaluator(), AppClientProjectProperties.SOURCE_ENCODING);
296
        FileEncodingQueryImplementation encodingQuery = QuerySupport.createFileEncodingQuery(evaluator(), AppClientProjectProperties.SOURCE_ENCODING);
299
        AppClientSources sources = new AppClientSources(this, helper, evaluator(), getSourceRoots(), getTestSourceRoots());
297
        AppClientSources sources = new AppClientSources(this, helper, evaluator(), getSourceRoots(), getTestSourceRoots());
298
        ProjectInfoImpl projectInfo = new ProjectInfoImpl(this, helper, AppClientProjectType.PROJECT_CONFIGURATION_NAMESPACE, CAR_PROJECT_ICON);
300
        Lookup base = Lookups.fixed(new Object[] {
299
        Lookup base = Lookups.fixed(new Object[] {
301
            new Info(),
300
            projectInfo,
302
            aux,
301
            aux,
303
            helper.createCacheDirectoryProvider(),
302
            helper.createCacheDirectoryProvider(),
304
            helper.createAuxiliaryProperties(),
303
            helper.createAuxiliaryProperties(),
Lines 354-372 Link Here
354
        return this.cpProvider;
353
        return this.cpProvider;
355
    }
354
    }
356
    
355
    
357
    public void configurationXmlChanged(AntProjectEvent ev) {
358
        if (ev.getPath().equals(AntProjectHelper.PROJECT_XML_PATH)) {
359
            // Could be various kinds of changes, but name & displayName might have changed.
360
            Info info = (Info)getLookup().lookup(ProjectInformation.class);
361
            info.firePropertyChange(ProjectInformation.PROP_NAME);
362
            info.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME);
363
        }
364
    }
365
    
366
    public void propertiesChanged(AntProjectEvent ev) {
367
        // currently ignored (probably better to listen to evaluator() if you need to)
368
    }
369
    
370
    // Package private methods -------------------------------------------------
356
    // Package private methods -------------------------------------------------
371
    
357
    
372
    /**
358
    /**
Lines 587-659 Link Here
587
    }
573
    }
588
    
574
    
589
    // Private innerclasses ----------------------------------------------------
575
    // Private innerclasses ----------------------------------------------------
590
    //when #110886 gets implemented, this class is obsolete    
591
    private final class Info implements ProjectInformation {
592
        
593
        private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
594
        
595
        private WeakReference<String> cachedName = null;
596
        
597
        Info() {}
598
        
599
        void firePropertyChange(String prop) {
600
            pcs.firePropertyChange(prop, null, null);
601
            synchronized (pcs) {
602
                cachedName = null;
603
            }
604
        }
605
        
606
        public String getName() {
607
            return PropertyUtils.getUsablePropertyName(getDisplayName());
608
        }
609
        
610
        public String getDisplayName() {
611
            synchronized (pcs) {
612
                if (cachedName != null) {
613
                    String dn = cachedName.get();
614
                    if (dn != null) {
615
                        return dn;
616
                    }
617
                }
618
            }
619
            String dn = ProjectManager.mutex().readAccess(new Mutex.Action<String>() {
620
                public String run() {
621
                    Element data = updateHelper.getPrimaryConfigurationData(true);
622
                    // XXX replace by XMLUtil when that has findElement, findText, etc.
623
                    NodeList nl = data.getElementsByTagNameNS(AppClientProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
624
                    if (nl.getLength() == 1) {
625
                        nl = nl.item(0).getChildNodes();
626
                        if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
627
                            return ((Text) nl.item(0)).getNodeValue();
628
                        }
629
                    }
630
                    return "???"; // NOI18N
631
                }
632
            });
633
            synchronized (pcs) {
634
                cachedName = new WeakReference<String>(dn);
635
            }
636
            return dn;
637
        }
638
        
639
        public Icon getIcon() {
640
            return CAR_PROJECT_ICON;
641
        }
642
        
643
        public Project getProject() {
644
            return AppClientProject.this;
645
        }
646
        
647
        public void addPropertyChangeListener(PropertyChangeListener listener) {
648
            pcs.addPropertyChangeListener(listener);
649
        }
650
        
651
        public void removePropertyChangeListener(PropertyChangeListener listener) {
652
            pcs.removePropertyChangeListener(listener);
653
        }
654
        
655
    }
656
    
657
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
576
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
658
        
577
        
659
        ProjectXmlSavedHookImpl() {}
578
        ProjectXmlSavedHookImpl() {}
(-)a/j2ee.earproject/nbproject/project.xml (-1 / +1 lines)
Lines 188-194 Link Here
188
                    <compile-dependency/>
188
                    <compile-dependency/>
189
                    <run-dependency>
189
                    <run-dependency>
190
                        <release-version>0-1</release-version>
190
                        <release-version>0-1</release-version>
191
                        <specification-version>1.6</specification-version>
191
                        <specification-version>1.18</specification-version>
192
                    </run-dependency>
192
                    </run-dependency>
193
                </dependency>
193
                </dependency>
194
                <dependency>
194
                <dependency>
(-)a/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/EarProject.java (-79 / +3 lines)
Lines 43-52 Link Here
43
43
44
import java.beans.PropertyChangeEvent;
44
import java.beans.PropertyChangeEvent;
45
import java.beans.PropertyChangeListener;
45
import java.beans.PropertyChangeListener;
46
import java.beans.PropertyChangeSupport;
47
import java.io.File;
46
import java.io.File;
48
import java.io.IOException;
47
import java.io.IOException;
49
import java.lang.ref.WeakReference;
50
import java.util.Arrays;
48
import java.util.Arrays;
51
import java.util.List;
49
import java.util.List;
52
import java.util.logging.Level;
50
import java.util.logging.Level;
Lines 55-61 Link Here
55
import org.netbeans.api.java.classpath.ClassPath;
53
import org.netbeans.api.java.classpath.ClassPath;
56
import org.netbeans.api.java.classpath.GlobalPathRegistry;
54
import org.netbeans.api.java.classpath.GlobalPathRegistry;
57
import org.netbeans.api.project.Project;
55
import org.netbeans.api.project.Project;
58
import org.netbeans.api.project.ProjectInformation;
59
import org.netbeans.api.project.ProjectManager;
56
import org.netbeans.api.project.ProjectManager;
60
import org.netbeans.api.project.ant.AntArtifact;
57
import org.netbeans.api.project.ant.AntArtifact;
61
import org.netbeans.api.project.ant.AntBuildExtender;
58
import org.netbeans.api.project.ant.AntBuildExtender;
Lines 81-86 Link Here
81
import org.netbeans.modules.j2ee.spi.ejbjar.EarImplementation;
78
import org.netbeans.modules.j2ee.spi.ejbjar.EarImplementation;
82
import org.netbeans.modules.j2ee.spi.ejbjar.EarImplementation2;
79
import org.netbeans.modules.j2ee.spi.ejbjar.EarImplementation2;
83
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarFactory;
80
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarFactory;
81
import org.netbeans.modules.java.api.common.ant.ProjectInfoImpl;
84
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
82
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
85
import org.netbeans.modules.web.api.webmodule.WebModule;
83
import org.netbeans.modules.web.api.webmodule.WebModule;
86
import org.netbeans.spi.java.project.support.LookupMergerSupport;
84
import org.netbeans.spi.java.project.support.LookupMergerSupport;
Lines 116-124 Link Here
116
import org.openide.util.NbBundle;
114
import org.openide.util.NbBundle;
117
import org.openide.util.lookup.Lookups;
115
import org.openide.util.lookup.Lookups;
118
import org.w3c.dom.Element;
116
import org.w3c.dom.Element;
119
import org.w3c.dom.Node;
120
import org.w3c.dom.NodeList;
117
import org.w3c.dom.NodeList;
121
import org.w3c.dom.Text;
122
118
123
/**
119
/**
124
 * Represents an Enterprise Application project.
120
 * Represents an Enterprise Application project.
Lines 212-219 Link Here
212
    
208
    
213
    private Lookup createLookup(AuxiliaryConfiguration aux, ClassPathProviderImpl cpProvider) {
209
    private Lookup createLookup(AuxiliaryConfiguration aux, ClassPathProviderImpl cpProvider) {
214
        SubprojectProvider spp = refHelper.createSubprojectProvider();
210
        SubprojectProvider spp = refHelper.createSubprojectProvider();
211
        ProjectInfoImpl projectInfo = new ProjectInfoImpl(this, helper, EarProjectType.PROJECT_CONFIGURATION_NAMESPACE, EAR_PROJECT_ICON);
215
        Lookup base = Lookups.fixed(new Object[] {
212
        Lookup base = Lookups.fixed(new Object[] {
216
            new Info(),
213
            projectInfo,
217
            aux,
214
            aux,
218
            spp,
215
            spp,
219
            helper.createAuxiliaryProperties(),
216
            helper.createAuxiliaryProperties(),
Lines 272-295 Link Here
272
        return ear;
269
        return ear;
273
    }
270
    }
274
    
271
    
275
    /** Return configured project name. */
276
    public String getName() {
277
        return ProjectManager.mutex().readAccess(new Mutex.Action<String>() {
278
            public String run() {
279
                Element data = updateHelper.getPrimaryConfigurationData(true);
280
                // XXX replace by XMLUtil when that has findElement, findText, etc.
281
                NodeList nl = data.getElementsByTagNameNS(EarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
282
                if (nl.getLength() == 1) {
283
                    nl = nl.item(0).getChildNodes();
284
                    if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
285
                        return ((Text) nl.item(0)).getNodeValue();
286
                    }
287
                }
288
                return "EAR????"; // NOI18N
289
            }
290
        });
291
    }
292
    
293
    /** Store configured project name. */
272
    /** Store configured project name. */
294
    public void setName(final String name) {
273
    public void setName(final String name) {
295
        ProjectManager.mutex().writeAccess(new Mutex.Action<Void>() {
274
        ProjectManager.mutex().writeAccess(new Mutex.Action<Void>() {
Lines 350-410 Link Here
350
    }
329
    }
351
    
330
    
352
    // Private innerclasses ----------------------------------------------------
331
    // Private innerclasses ----------------------------------------------------
353
    //when #110886 gets implemented, this class is obsolete
354
    private final class Info implements ProjectInformation {
355
        
356
        private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
357
        
358
        
359
        private WeakReference<String> cachedName = null;
360
        
361
        Info() {}
362
        
363
        void firePropertyChange(String prop) {
364
            pcs.firePropertyChange(prop, null, null);
365
            synchronized (pcs) {
366
                cachedName = null;
367
            }
368
        }
369
        
370
        public String getName() {
371
            return PropertyUtils.getUsablePropertyName(getDisplayName());
372
        }
373
        
374
        public String getDisplayName() {
375
            synchronized (pcs) {
376
                if (cachedName != null) {
377
                    String dn = cachedName.get();
378
                    if (dn != null) {
379
                        return dn;
380
                    }
381
                }
382
            }        
383
            String dn = EarProject.this.getName();
384
            synchronized (pcs) {
385
                cachedName = new WeakReference<String>(dn);
386
            }
387
            return dn;
388
        }
389
        
390
        public Icon getIcon() {
391
            return EAR_PROJECT_ICON;
392
        }
393
        
394
        public Project getProject() {
395
            return EarProject.this;
396
        }
397
        
398
        public void addPropertyChangeListener(PropertyChangeListener listener) {
399
            pcs.addPropertyChangeListener(listener);
400
        }
401
        
402
        public void removePropertyChangeListener(PropertyChangeListener listener) {
403
            pcs.removePropertyChangeListener(listener);
404
        }
405
        
406
    }
407
    
408
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
332
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
409
        
333
        
410
        ProjectXmlSavedHookImpl() {}
334
        ProjectXmlSavedHookImpl() {}
(-)a/j2ee.earproject/src/org/netbeans/modules/j2ee/earproject/EarProjectOperations.java (-3 / +5 lines)
Lines 50-55 Link Here
50
import org.apache.tools.ant.module.api.support.ActionUtils;
50
import org.apache.tools.ant.module.api.support.ActionUtils;
51
import org.netbeans.api.project.FileOwnerQuery;
51
import org.netbeans.api.project.FileOwnerQuery;
52
import org.netbeans.api.project.Project;
52
import org.netbeans.api.project.Project;
53
import org.netbeans.api.project.ProjectInformation;
53
import org.netbeans.api.project.ProjectManager;
54
import org.netbeans.api.project.ProjectManager;
54
import org.netbeans.modules.j2ee.earproject.ui.customizer.EarProjectProperties;
55
import org.netbeans.modules.j2ee.earproject.ui.customizer.EarProjectProperties;
55
import org.netbeans.spi.project.ActionProvider;
56
import org.netbeans.spi.project.ActionProvider;
Lines 167-175 Link Here
167
        
168
        
168
        EarProjectOperations origOperations = original.getLookup().lookup(EarProjectOperations.class);
169
        EarProjectOperations origOperations = original.getLookup().lookup(EarProjectOperations.class);
169
        fixLibraryLocation(origOperations);
170
        fixLibraryLocation(origOperations);
170
	
171
171
	final String oldProjectName = project.getName();
172
        ProjectInformation info = original.getLookup().lookup(ProjectInformation.class);
172
        
173
        final String oldProjectName = info.getName();
174
173
        project.setName(newName);
175
        project.setName(newName);
174
	
176
	
175
        ProjectManager.mutex().writeAccess(new Runnable() {
177
        ProjectManager.mutex().writeAccess(new Runnable() {
(-)a/j2ee.ejbjarproject/nbproject/project.xml (-1 / +1 lines)
Lines 241-247 Link Here
241
                    <compile-dependency/>
241
                    <compile-dependency/>
242
                    <run-dependency>
242
                    <run-dependency>
243
                        <release-version>0-1</release-version>
243
                        <release-version>0-1</release-version>
244
                        <specification-version>1.15</specification-version>
244
                        <specification-version>1.18</specification-version>
245
                    </run-dependency>
245
                    </run-dependency>
246
                </dependency>
246
                </dependency>
247
                <dependency>
247
                <dependency>
(-)a/j2ee.ejbjarproject/src/org/netbeans/modules/j2ee/ejbjarproject/EjbJarProject.java (-89 / +6 lines)
Lines 106-114 Link Here
106
import org.netbeans.spi.project.ant.AntArtifactProvider;
106
import org.netbeans.spi.project.ant.AntArtifactProvider;
107
import org.netbeans.spi.project.ant.AntBuildExtenderFactory;
107
import org.netbeans.spi.project.ant.AntBuildExtenderFactory;
108
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
108
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
109
import org.netbeans.spi.project.support.ant.AntProjectEvent;
110
import org.netbeans.spi.project.support.ant.AntProjectHelper;
109
import org.netbeans.spi.project.support.ant.AntProjectHelper;
111
import org.netbeans.spi.project.support.ant.AntProjectListener;
112
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
110
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
113
import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
111
import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook;
114
import org.netbeans.spi.project.ui.PrivilegedTemplates;
112
import org.netbeans.spi.project.ui.PrivilegedTemplates;
Lines 138-143 Link Here
138
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarImplementation;
136
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarImplementation;
139
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarImplementation2;
137
import org.netbeans.modules.j2ee.spi.ejbjar.EjbJarImplementation2;
140
import org.netbeans.modules.java.api.common.SourceRoots;
138
import org.netbeans.modules.java.api.common.SourceRoots;
139
import org.netbeans.modules.java.api.common.ant.ProjectInfoImpl;
141
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
140
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
142
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
141
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
143
import org.netbeans.modules.java.api.common.project.ProjectProperties;
142
import org.netbeans.modules.java.api.common.project.ProjectProperties;
Lines 149-155 Link Here
149
import org.openide.DialogDisplayer;
148
import org.openide.DialogDisplayer;
150
import org.openide.util.NbBundle;
149
import org.openide.util.NbBundle;
151
import org.w3c.dom.Document;
150
import org.w3c.dom.Document;
152
import org.w3c.dom.Comment;
153
import org.w3c.dom.Element;
151
import org.w3c.dom.Element;
154
import org.w3c.dom.Node;
152
import org.w3c.dom.Node;
155
import org.w3c.dom.NodeList;
153
import org.w3c.dom.NodeList;
Lines 184-190 Link Here
184
    sharedNamespace=EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,
182
    sharedNamespace=EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE,
185
    privateNamespace=EjbJarProjectType.PRIVATE_CONFIGURATION_NAMESPACE
183
    privateNamespace=EjbJarProjectType.PRIVATE_CONFIGURATION_NAMESPACE
186
)
184
)
187
public class EjbJarProject implements Project, AntProjectListener, FileChangeListener {
185
public class EjbJarProject implements Project, FileChangeListener {
188
    
186
    
189
    private final Icon PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/j2ee/ejbjarproject/ui/resources/ejbjarProjectIcon.gif", false); // NOI18N
187
    private final Icon PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/j2ee/ejbjarproject/ui/resources/ejbjarProjectIcon.gif", false); // NOI18N
190
    
188
    
Lines 312-318 Link Here
312
        css = new CopyOnSaveSupport();
310
        css = new CopyOnSaveSupport();
313
        artifactSupport = new ArtifactCopySupport();
311
        artifactSupport = new ArtifactCopySupport();
314
        deployOnSaveSupport = new DeployOnSaveSupportProxy();
312
        deployOnSaveSupport = new DeployOnSaveSupportProxy();
315
        helper.addAntProjectListener(this);
316
        ProjectManager.mutex().postWriteRequest(
313
        ProjectManager.mutex().postWriteRequest(
317
             new Runnable () {
314
             new Runnable () {
318
                 public void run() {
315
                 public void run() {
Lines 406-415 Link Here
406
        SubprojectProvider spp = refHelper.createSubprojectProvider();
403
        SubprojectProvider spp = refHelper.createSubprojectProvider();
407
        FileEncodingQueryImplementation encodingQuery = QuerySupport.createFileEncodingQuery(evaluator(), EjbJarProjectProperties.SOURCE_ENCODING);
404
        FileEncodingQueryImplementation encodingQuery = QuerySupport.createFileEncodingQuery(evaluator(), EjbJarProjectProperties.SOURCE_ENCODING);
408
        EjbJarSources sources = new EjbJarSources(this, helper, evaluator(), getSourceRoots(), getTestSourceRoots());
405
        EjbJarSources sources = new EjbJarSources(this, helper, evaluator(), getSourceRoots(), getTestSourceRoots());
406
        ProjectInfoImpl projectInfo = new ProjectInfoImpl(this, helper, EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, PROJECT_ICON);
409
        Lookup base = Lookups.fixed(new Object[] {
407
        Lookup base = Lookups.fixed(new Object[] {
410
                EjbJarProject.this, // never cast an externally obtained Project to EjbJarProject - use lookup instead
408
                EjbJarProject.this, // never cast an externally obtained Project to EjbJarProject - use lookup instead
411
                buildExtender,
409
                buildExtender,
412
                new Info(),
410
                projectInfo,
413
                aux,
411
                aux,
414
                helper.createCacheDirectoryProvider(),
412
                helper.createCacheDirectoryProvider(),
415
                helper.createAuxiliaryProperties(),
413
                helper.createAuxiliaryProperties(),
Lines 468-487 Link Here
468
        return this.cpProvider;
466
        return this.cpProvider;
469
    }
467
    }
470
    
468
    
471
    public void configurationXmlChanged(AntProjectEvent ev) {
472
        if (ev.getPath().equals(AntProjectHelper.PROJECT_XML_PATH)) {
473
            // Could be various kinds of changes, but name & displayName might have changed.
474
            Info info = (Info)getLookup().lookup(ProjectInformation.class);
475
            info.firePropertyChange(ProjectInformation.PROP_NAME);
476
            info.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME);
477
        }
478
    }
479
    
480
    public void propertiesChanged(AntProjectEvent ev) {
481
        // currently ignored
482
        //TODO: should not be ignored!
483
    }
484
    
485
    String getBuildXmlName() {
469
    String getBuildXmlName() {
486
        String storedName = helper.getStandardPropertyEvaluator().getProperty(EjbJarProjectProperties.BUILD_FILE);
470
        String storedName = helper.getStandardPropertyEvaluator().getProperty(EjbJarProjectProperties.BUILD_FILE);
487
        return storedName == null ? GeneratedFilesHelper.BUILD_XML_PATH : storedName;
471
        return storedName == null ? GeneratedFilesHelper.BUILD_XML_PATH : storedName;
Lines 583-602 Link Here
583
    
567
    
584
    /** Return configured project name. */
568
    /** Return configured project name. */
585
    public String getName() {
569
    public String getName() {
586
        return ProjectManager.mutex().readAccess(new Mutex.Action<String>() {
570
        ProjectInformation info = lookup.lookup(ProjectInformation.class);
587
            public String run() {
571
        return info.getName();
588
                Element data = updateHelper.getPrimaryConfigurationData(true);
589
                // XXX replace by XMLUtil when that has findElement, findText, etc.
590
                NodeList nl = data.getElementsByTagNameNS(EjbJarProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); //NOI18N
591
                if (nl.getLength() == 1) {
592
                    nl = nl.item(0).getChildNodes();
593
                    if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
594
                        return ((Text) nl.item(0)).getNodeValue();
595
                    }
596
                }
597
                return "A Broken EJB Project"; // NOI18N
598
            }
599
        });
600
    }
572
    }
601
573
602
    /** Store configured project name. */
574
    /** Store configured project name. */
Lines 782-842 Link Here
782
    }
754
    }
783
755
784
    // Private innerclasses ----------------------------------------------------
756
    // Private innerclasses ----------------------------------------------------
785
    
786
    //when #110886 gets implemented, this class is obsolete
787
    private final class Info implements ProjectInformation {
788
        
789
        private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
790
        
791
        private WeakReference<String> cachedName = null;
792
        
793
        Info() {}
794
        
795
        void firePropertyChange(String prop) {
796
            pcs.firePropertyChange(prop, null, null);
797
            synchronized (pcs) {
798
                cachedName = null;
799
            }
800
        }
801
        
802
        public String getName() {
803
            return PropertyUtils.getUsablePropertyName(getDisplayName());
804
        }
805
        
806
        public String getDisplayName() {
807
            synchronized (pcs) {
808
                if (cachedName != null) {
809
                    String dn = cachedName.get();
810
                    if (dn != null) {
811
                        return dn;
812
                    }
813
                }
814
            }        
815
            String dn = EjbJarProject.this.getName();
816
            synchronized (pcs) {
817
                cachedName = new WeakReference<String>(dn);
818
            }
819
            return dn;
820
        }
821
        
822
        public Icon getIcon() {
823
            return PROJECT_ICON;
824
        }
825
        
826
        public Project getProject() {
827
            return EjbJarProject.this;
828
        }
829
        
830
        public void addPropertyChangeListener(PropertyChangeListener listener) {
831
            pcs.addPropertyChangeListener(listener);
832
        }
833
        
834
        public void removePropertyChangeListener(PropertyChangeListener listener) {
835
            pcs.removePropertyChangeListener(listener);
836
        }
837
        
838
    }
839
    
840
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
757
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
841
        
758
        
842
        ProjectXmlSavedHookImpl() {}
759
        ProjectXmlSavedHookImpl() {}
(-)a/java.api.common/apichanges.xml (+16 lines)
Lines 175-180 Link Here
175
            <class package="org.netbeans.modules.java.api.common.project.ui.customizer" name="SourceRootsUi"/>
175
            <class package="org.netbeans.modules.java.api.common.project.ui.customizer" name="SourceRootsUi"/>
176
            <issue number="150357"/>
176
            <issue number="150357"/>
177
        </change>
177
        </change>
178
        <change id="issue-110886">
179
            <api name="java-api-common"/>
180
            <summary>Create a reusable implementation for ProjectInformation.</summary>
181
            <version major="1" minor="18"/>
182
            <date day="18" month="4" year="2010"/>
183
            <author login="mvfranz"/>
184
            <compatibility addition="yes"/>
185
            <description>
186
                <p>
187
                    Created a re-usable implementation of ProjectInformation that can be
188
                    used within the Java language projects.
189
                </p>
190
            </description>
191
            <class package="org.netbeans.modules.java.api.common.ant" name="ProjectInfoImpl"/>
192
            <issue number="110886"/>
193
        </change>
178
194
179
    </changes>
195
    </changes>
180
196
(-)a/java.api.common/manifest.mf (-1 / +1 lines)
Lines 1-4 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.modules.java.api.common/0
2
OpenIDE-Module: org.netbeans.modules.java.api.common/0
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/java/api/common/resources/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/java/api/common/resources/Bundle.properties
4
OpenIDE-Module-Specification-Version: 1.17
4
OpenIDE-Module-Specification-Version: 1.18
(-)a/java.api.common/nbproject/project.xml (+1 lines)
Lines 233-238 Link Here
233
                <friend>org.netbeans.modules.apisupport.project</friend>
233
                <friend>org.netbeans.modules.apisupport.project</friend>
234
                <friend>org.netbeans.modules.groovy.grailsproject</friend>
234
                <friend>org.netbeans.modules.groovy.grailsproject</friend>
235
                <friend>org.netbeans.modules.hudson.ant</friend>
235
                <friend>org.netbeans.modules.hudson.ant</friend>
236
                <friend>org.netbeans.modules.j2ee.archive</friend>
236
                <friend>org.netbeans.modules.j2ee.clientproject</friend>
237
                <friend>org.netbeans.modules.j2ee.clientproject</friend>
237
                <friend>org.netbeans.modules.j2ee.common</friend>
238
                <friend>org.netbeans.modules.j2ee.common</friend>
238
                <friend>org.netbeans.modules.j2ee.earproject</friend>
239
                <friend>org.netbeans.modules.j2ee.earproject</friend>
(-)a/java.j2seproject/nbproject/project.xml (-1 / +1 lines)
Lines 131-137 Link Here
131
                    <compile-dependency/>
131
                    <compile-dependency/>
132
                    <run-dependency>
132
                    <run-dependency>
133
                        <release-version>0-1</release-version>
133
                        <release-version>0-1</release-version>
134
                        <specification-version>1.15</specification-version>
134
                        <specification-version>1.18</specification-version>
135
                    </run-dependency>
135
                    </run-dependency>
136
                </dependency>
136
                </dependency>
137
                <dependency>
137
                <dependency>
(-)a/java.j2seproject/src/org/netbeans/modules/java/j2seproject/J2SEProject.java (-88 / +4 lines)
Lines 43-49 Link Here
43
43
44
import java.beans.PropertyChangeEvent;
44
import java.beans.PropertyChangeEvent;
45
import java.beans.PropertyChangeListener;
45
import java.beans.PropertyChangeListener;
46
import java.beans.PropertyChangeSupport;
47
import java.io.File;
46
import java.io.File;
48
import java.io.IOException;
47
import java.io.IOException;
49
import java.lang.ref.Reference;
48
import java.lang.ref.Reference;
Lines 71-83 Link Here
71
import org.netbeans.api.java.classpath.GlobalPathRegistry;
70
import org.netbeans.api.java.classpath.GlobalPathRegistry;
72
import org.netbeans.api.java.project.JavaProjectConstants;
71
import org.netbeans.api.java.project.JavaProjectConstants;
73
import org.netbeans.api.project.Project;
72
import org.netbeans.api.project.Project;
74
import org.netbeans.api.project.ProjectInformation;
75
import org.netbeans.api.project.ProjectManager;
73
import org.netbeans.api.project.ProjectManager;
76
import org.netbeans.api.project.SourceGroup;
74
import org.netbeans.api.project.SourceGroup;
77
import org.netbeans.api.project.ant.AntArtifact;
75
import org.netbeans.api.project.ant.AntArtifact;
78
import org.netbeans.api.project.ant.AntBuildExtender;
76
import org.netbeans.api.project.ant.AntBuildExtender;
79
import org.netbeans.api.queries.FileBuiltQuery.Status;
77
import org.netbeans.api.queries.FileBuiltQuery.Status;
80
import org.netbeans.modules.java.api.common.SourceRoots;
78
import org.netbeans.modules.java.api.common.SourceRoots;
79
import org.netbeans.modules.java.api.common.ant.ProjectInfoImpl;
81
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
80
import org.netbeans.modules.java.api.common.ant.UpdateHelper;
82
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
81
import org.netbeans.modules.java.api.common.ant.UpdateImplementation;
83
import org.netbeans.modules.java.api.common.classpath.ClassPathModifier;
82
import org.netbeans.modules.java.api.common.classpath.ClassPathModifier;
Lines 97-105 Link Here
97
import org.netbeans.spi.project.support.LookupProviderSupport;
96
import org.netbeans.spi.project.support.LookupProviderSupport;
98
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
97
import org.netbeans.spi.project.ant.AntBuildExtenderImplementation;
99
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
98
import org.netbeans.spi.project.support.ant.AntBasedProjectRegistration;
100
import org.netbeans.spi.project.support.ant.AntProjectEvent;
101
import org.netbeans.spi.project.support.ant.AntProjectHelper;
99
import org.netbeans.spi.project.support.ant.AntProjectHelper;
102
import org.netbeans.spi.project.support.ant.AntProjectListener;
103
import org.netbeans.spi.project.support.ant.EditableProperties;
100
import org.netbeans.spi.project.support.ant.EditableProperties;
104
import org.netbeans.spi.project.support.ant.FilterPropertyProvider;
101
import org.netbeans.spi.project.support.ant.FilterPropertyProvider;
105
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
102
import org.netbeans.spi.project.support.ant.GeneratedFilesHelper;
Lines 130-136 Link Here
130
import org.openide.util.lookup.Lookups;
127
import org.openide.util.lookup.Lookups;
131
import org.w3c.dom.Document;
128
import org.w3c.dom.Document;
132
import org.w3c.dom.Element;
129
import org.w3c.dom.Element;
133
import org.w3c.dom.Text;
134
import org.w3c.dom.Node;
130
import org.w3c.dom.Node;
135
import org.w3c.dom.NodeList;
131
import org.w3c.dom.NodeList;
136
132
Lines 146-152 Link Here
146
    privateName=J2SEProjectType.PRIVATE_CONFIGURATION_NAME,
142
    privateName=J2SEProjectType.PRIVATE_CONFIGURATION_NAME,
147
    privateNamespace= J2SEProjectType.PRIVATE_CONFIGURATION_NAMESPACE
143
    privateNamespace= J2SEProjectType.PRIVATE_CONFIGURATION_NAMESPACE
148
)
144
)
149
public final class J2SEProject implements Project, AntProjectListener {
145
public final class J2SEProject implements Project {
150
    
146
    
151
    private static final Icon J2SE_PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/java/j2seproject/ui/resources/j2seProject.png", false); // NOI18N
147
    private static final Icon J2SE_PROJECT_ICON = ImageUtilities.loadImageIcon("org/netbeans/modules/java/j2seproject/ui/resources/j2seProject.png", false); // NOI18N
152
    private static final Logger LOG = Logger.getLogger(J2SEProject.class.getName());
148
    private static final Logger LOG = Logger.getLogger(J2SEProject.class.getName());
Lines 194-200 Link Here
194
        final J2SEActionProvider actionProvider = new J2SEActionProvider( this, this.updateHelper );
190
        final J2SEActionProvider actionProvider = new J2SEActionProvider( this, this.updateHelper );
195
        lookup = createLookup(aux, actionProvider);
191
        lookup = createLookup(aux, actionProvider);
196
        actionProvider.startFSListener();
192
        actionProvider.startFSListener();
197
        helper.addAntProjectListener(this);
198
    }
193
    }
199
    
194
    
200
    private ClassPathModifier.Callback createClassPathModifierCallback() {
195
    private ClassPathModifier.Callback createClassPathModifierCallback() {
Lines 317-325 Link Here
317
        @SuppressWarnings("deprecation") Object cpe = new org.netbeans.modules.java.api.common.classpath.ClassPathExtender(
312
        @SuppressWarnings("deprecation") Object cpe = new org.netbeans.modules.java.api.common.classpath.ClassPathExtender(
318
            cpMod, ProjectProperties.JAVAC_CLASSPATH, null);
313
            cpMod, ProjectProperties.JAVAC_CLASSPATH, null);
319
        J2SESources srcs = new J2SESources(this, helper, eval, getSourceRoots(), getTestSourceRoots());
314
        J2SESources srcs = new J2SESources(this, helper, eval, getSourceRoots(), getTestSourceRoots());
315
        ProjectInfoImpl projectInfo = new ProjectInfoImpl(this, helper, J2SEProjectType.PROJECT_CONFIGURATION_NAMESPACE, J2SE_PROJECT_ICON);
320
        final Lookup base = Lookups.fixed(
316
        final Lookup base = Lookups.fixed(
321
            J2SEProject.this,
317
            J2SEProject.this,
322
            new Info(),
318
            projectInfo,
323
            aux,
319
            aux,
324
            helper.createCacheDirectoryProvider(),
320
            helper.createCacheDirectoryProvider(),
325
            helper.createAuxiliaryProperties(),
321
            helper.createAuxiliaryProperties(),
Lines 372-390 Link Here
372
        return this.cpMod;
368
        return this.cpMod;
373
    }
369
    }
374
370
375
    public void configurationXmlChanged(AntProjectEvent ev) {
376
        if (ev.getPath().equals(AntProjectHelper.PROJECT_XML_PATH)) {
377
            // Could be various kinds of changes, but name & displayName might have changed.
378
            Info info = (Info)getLookup().lookup(ProjectInformation.class);
379
            info.firePropertyChange(ProjectInformation.PROP_NAME);
380
            info.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME);
381
        }
382
    }
383
384
    public void propertiesChanged(AntProjectEvent ev) {
385
        // currently ignored (probably better to listen to evaluator() if you need to)
386
    }
387
    
388
    // Package private methods -------------------------------------------------
371
    // Package private methods -------------------------------------------------
389
    
372
    
390
    /**
373
    /**
Lines 452-524 Link Here
452
    }
435
    }
453
    
436
    
454
    // Private innerclasses ----------------------------------------------------
437
    // Private innerclasses ----------------------------------------------------
455
    //when #110886 gets implemented, this class is obsolete
456
    private final class Info implements ProjectInformation {
457
        
458
        private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
459
        private WeakReference<String> cachedName = null;
460
        
461
        Info() {}
462
        
463
        void firePropertyChange(String prop) {
464
            pcs.firePropertyChange(prop, null, null);
465
            synchronized (pcs) {
466
                cachedName = null;
467
            }
468
        }
469
        
470
        public String getName() {
471
            return PropertyUtils.getUsablePropertyName(getDisplayName());
472
        }
473
        
474
        public String getDisplayName() {
475
            synchronized (pcs) {
476
                if (cachedName != null) {
477
                    String dn = cachedName.get();
478
                    if (dn != null) {
479
                        return dn;
480
                    }
481
                }
482
            }
483
            String dn = ProjectManager.mutex().readAccess(new Mutex.Action<String>() {
484
                public String run() {
485
                    Element data = updateHelper.getPrimaryConfigurationData(true);
486
                    // XXX replace by XMLUtil when that has findElement, findText, etc.
487
                    NodeList nl = data.getElementsByTagNameNS(J2SEProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N
488
                    if (nl.getLength() == 1) {
489
                        nl = nl.item(0).getChildNodes();
490
                        if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) {
491
                            String val = ((Text) nl.item(0)).getNodeValue();
492
                            return val != null ? val : "???";   //NOI18N
493
                        }
494
                    }
495
                    return "???"; // NOI18N
496
                }
497
            });
498
            synchronized (pcs) {
499
                cachedName = new WeakReference<String>(dn);
500
            }
501
            return dn;
502
        }
503
        
504
        public Icon getIcon() {
505
            return J2SE_PROJECT_ICON;
506
        }
507
        
508
        public Project getProject() {
509
            return J2SEProject.this;
510
        }
511
        
512
        public void addPropertyChangeListener(PropertyChangeListener listener) {
513
            pcs.addPropertyChangeListener(listener);
514
        }
515
        
516
        public void removePropertyChangeListener(PropertyChangeListener listener) {
517
            pcs.removePropertyChangeListener(listener);
518
        }
519
        
520
    }
521
    
522
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
438
    private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook {
523
        
439
        
524
        ProjectXmlSavedHookImpl() {}
440
        ProjectXmlSavedHookImpl() {}

Return to bug 110886