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 253355
Collapse All | Expand All

(-)a/projectapi/apichanges.xml (-3 / +16 lines)
Lines 107-114 Link Here
107
    <!-- ACTUAL CHANGES BEGIN HERE: -->
107
    <!-- ACTUAL CHANGES BEGIN HERE: -->
108
108
109
    <changes>
109
    <changes>
110
        
110
        <change id="SharabilityQueryMerger">
111
111
            <api name="general"/>
112
            <summary>Added a <code>LookupMerger</code> for <code>SharabilityQueryImplementation2</code></summary>
113
            <version major="1" minor="64"/>
114
            <date day="8" month="6" year="2015"/>
115
            <author login="tzezula"/>
116
            <compatibility addition="yes"/>
117
            <description>
118
                <p>
119
                    Added a factory method into the <code>LookupProviderSupport</code> creating a
120
                    <code>LookupMerger</code> for <code>SharabilityQueryImplementation2</code>.
121
                </p>
122
            </description>
123
            <class package="org.netbeans.spi.project.support" name="LookupProviderSupport"/>
124
            <issue number="253355"/>
125
        </change>
112
        <change id="ProjectManagerImplementation">
126
        <change id="ProjectManagerImplementation">
113
            <api name="general"/>
127
            <api name="general"/>
114
            <summary>SPI interface for <code>ProjectManager</code></summary>
128
            <summary>SPI interface for <code>ProjectManager</code></summary>
Lines 126-132 Link Here
126
            <class package="org.netbeans.api.project" name="ProjectManager"/>
140
            <class package="org.netbeans.api.project" name="ProjectManager"/>
127
            <issue number="210465"/>
141
            <issue number="210465"/>
128
        </change>
142
        </change>
129
        
130
         <change id="ProjectManager.Result">
143
         <change id="ProjectManager.Result">
131
            <api name="general"/>
144
            <api name="general"/>
132
            <summary>More information in <code>ProjectManager.Result</code></summary>
145
            <summary>More information in <code>ProjectManager.Result</code></summary>
(-)a/projectapi/manifest.mf (-1 / +1 lines)
Lines 1-6 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.modules.projectapi/1
2
OpenIDE-Module: org.netbeans.modules.projectapi/1
3
OpenIDE-Module-Specification-Version: 1.63
3
OpenIDE-Module-Specification-Version: 1.64
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/projectapi/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/projectapi/Bundle.properties
5
OpenIDE-Module-Layer: org/netbeans/modules/projectapi/layer.xml
5
OpenIDE-Module-Layer: org/netbeans/modules/projectapi/layer.xml
6
OpenIDE-Module-Recommends: cnb.org.netbeans.modules.projectapi.nb
6
OpenIDE-Module-Recommends: cnb.org.netbeans.modules.projectapi.nb
(-)a/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java (+48 lines)
Lines 44-49 Link Here
44
44
45
package org.netbeans.spi.project.support;
45
package org.netbeans.spi.project.support;
46
46
47
import java.net.URI;
47
import java.util.ArrayList;
48
import java.util.ArrayList;
48
import java.util.Arrays;
49
import java.util.Arrays;
49
import java.util.Collection;
50
import java.util.Collection;
Lines 51-61 Link Here
51
import java.util.Set;
52
import java.util.Set;
52
import javax.swing.event.ChangeEvent;
53
import javax.swing.event.ChangeEvent;
53
import javax.swing.event.ChangeListener;
54
import javax.swing.event.ChangeListener;
55
import org.netbeans.api.annotations.common.NonNull;
54
import org.netbeans.api.project.SourceGroup;
56
import org.netbeans.api.project.SourceGroup;
55
import org.netbeans.api.project.Sources;
57
import org.netbeans.api.project.Sources;
58
import org.netbeans.api.queries.SharabilityQuery;
56
import org.netbeans.spi.project.ActionProvider;
59
import org.netbeans.spi.project.ActionProvider;
57
import org.netbeans.spi.project.LookupMerger;
60
import org.netbeans.spi.project.LookupMerger;
58
import org.netbeans.spi.project.LookupProvider;
61
import org.netbeans.spi.project.LookupProvider;
62
import org.netbeans.spi.queries.SharabilityQueryImplementation2;
59
import org.openide.util.ChangeSupport;
63
import org.openide.util.ChangeSupport;
60
import org.openide.util.Exceptions;
64
import org.openide.util.Exceptions;
61
import org.openide.util.Lookup;
65
import org.openide.util.Lookup;
Lines 130-135 Link Here
130
        return new ActionProviderMerger();
134
        return new ActionProviderMerger();
131
    }
135
    }
132
136
137
    /**
138
     * Factory method for creating {@link org.netbeans.spi.project.LookupMerger} instance that merges
139
     * {@link SharabilityQueryImplementation2} instances in the project lookup.
140
     * The first non {@link SharabilityQuery.Sharability#UNKNOWN} result returned by the {@link SharabilityQueryImplementation2}s
141
     * included in the project's {@link Lookup} is returned.
142
     * @return instance to include in project lookup
143
     * @since 1.64
144
     */
145
    public static LookupMerger<SharabilityQueryImplementation2> createSharabilityQueryMerger() {
146
        return new SharabilityQueryMerger();
147
    }
148
133
    private static class SourcesMerger implements LookupMerger<Sources> {
149
    private static class SourcesMerger implements LookupMerger<Sources> {
134
        public @Override Class<Sources> getMergeableClass() {
150
        public @Override Class<Sources> getMergeableClass() {
135
            return Sources.class;
151
            return Sources.class;
Lines 281-284 Link Here
281
        }
297
        }
282
298
283
    }
299
    }
300
301
    private static final class SharabilityQueryMerger implements LookupMerger<SharabilityQueryImplementation2> {
302
303
        @Override
304
        public Class<SharabilityQueryImplementation2> getMergeableClass() {
305
            return SharabilityQueryImplementation2.class;
306
        }
307
308
        @Override
309
        public SharabilityQueryImplementation2 merge(Lookup lookup) {
310
            return new MergedSharabilityQueryImplementation2(lookup);
311
        }
312
    }
313
314
    private static final class MergedSharabilityQueryImplementation2 implements SharabilityQueryImplementation2 {
315
        private final Lookup.Result<? extends SharabilityQueryImplementation2> lkpResult;
316
317
        MergedSharabilityQueryImplementation2(@NonNull final Lookup lkp) {
318
            this.lkpResult = lkp.lookupResult(SharabilityQueryImplementation2.class);
319
        }
320
321
        @Override
322
        public SharabilityQuery.Sharability getSharability(URI uri) {
323
            for (SharabilityQueryImplementation2 impl : lkpResult.allInstances()) {
324
                SharabilityQuery.Sharability res = impl.getSharability(uri);
325
                if (res != SharabilityQuery.Sharability.UNKNOWN) {
326
                    return res;
327
                }
328
            }
329
            return SharabilityQuery.Sharability.UNKNOWN;
330
        }
331
    }
284
}
332
}
(-)a/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java (+66 lines)
Lines 45-50 Link Here
45
package org.netbeans.spi.project.support;
45
package org.netbeans.spi.project.support;
46
46
47
import java.beans.PropertyChangeListener;
47
import java.beans.PropertyChangeListener;
48
import java.io.File;
49
import java.io.IOException;
50
import java.net.URI;
48
import java.util.ArrayList;
51
import java.util.ArrayList;
49
import java.util.Arrays;
52
import java.util.Arrays;
50
import java.util.Collections;
53
import java.util.Collections;
Lines 55-66 Link Here
55
import java.util.Map;
58
import java.util.Map;
56
import javax.swing.Icon;
59
import javax.swing.Icon;
57
import javax.swing.event.ChangeListener;
60
import javax.swing.event.ChangeListener;
61
import org.netbeans.api.annotations.common.NonNull;
58
import org.netbeans.api.project.SourceGroup;
62
import org.netbeans.api.project.SourceGroup;
59
import org.netbeans.api.project.Sources;
63
import org.netbeans.api.project.Sources;
64
import org.netbeans.api.queries.SharabilityQuery;
60
import org.netbeans.junit.NbTestCase;
65
import org.netbeans.junit.NbTestCase;
61
import org.netbeans.spi.project.ActionProvider;
66
import org.netbeans.spi.project.ActionProvider;
62
import org.netbeans.spi.project.LookupMerger;
67
import org.netbeans.spi.project.LookupMerger;
63
import org.netbeans.spi.project.LookupProvider;
68
import org.netbeans.spi.project.LookupProvider;
69
import org.netbeans.spi.queries.SharabilityQueryImplementation2;
64
import org.openide.filesystems.FileObject;
70
import org.openide.filesystems.FileObject;
65
import org.openide.util.Lookup;
71
import org.openide.util.Lookup;
66
import org.openide.util.lookup.AbstractLookup;
72
import org.openide.util.lookup.AbstractLookup;
Lines 252-257 Link Here
252
        assertEquals("[group1, group2, group3]", names.toString());
258
        assertEquals("[group1, group2, group3]", names.toString());
253
    }
259
    }
254
260
261
262
263
    public void testSharabilityQueryMerger() throws IOException {
264
        final File wd = getWorkDir();
265
        final File f1 = new File (wd, "f1");    //NOI18N
266
        final File f2 = new File (wd, "f2");    //NOI18N
267
        final File f3 = new File (wd, "f3");    //NOI18N
268
        final File f4 = new File (wd, "f4");    //NOI18N
269
        final File f5 = new File (wd, "f5");    //NOI18N
270
271
        final SharabilityQueryImpl impl1 = new SharabilityQueryImpl(Collections.singletonMap(f1.toURI(), SharabilityQuery.Sharability.SHARABLE));
272
        final SharabilityQueryImpl impl2 = new SharabilityQueryImpl(Collections.singletonMap(f2.toURI(), SharabilityQuery.Sharability.NOT_SHARABLE));
273
        final SharabilityQueryImpl impl3 = new SharabilityQueryImpl(new HashMap<URI, SharabilityQuery.Sharability>(){{
274
            put(f3.toURI(),SharabilityQuery.Sharability.SHARABLE);
275
            put(f4.toURI(),SharabilityQuery.Sharability.NOT_SHARABLE);
276
        }});
277
        final SharabilityQueryImpl impl4 = new SharabilityQueryImpl(Collections.singletonMap(f2.toURI(), SharabilityQuery.Sharability.SHARABLE));
278
        Lookup base = Lookups.fixed(impl1, LookupProviderSupport.createSharabilityQueryMerger());
279
        LookupProviderImpl2 pro2 = new LookupProviderImpl2();
280
        LookupProviderImpl2 pro3 = new LookupProviderImpl2();
281
        LookupProviderImpl2 pro4 = new LookupProviderImpl2();
282
283
        InstanceContent provInst = new InstanceContent();
284
        Lookup providers = new AbstractLookup(provInst);
285
        provInst.add(pro2);
286
        provInst.add(pro3);
287
        provInst.add(pro4);
288
        pro2.ic.add(impl2);
289
        pro3.ic.add(impl3);
290
        pro4.ic.add(impl4);
291
        DelegatingLookupImpl del = new DelegatingLookupImpl(base, providers, "<irrelevant>");
292
        
293
        SharabilityQueryImplementation2 sharability = del.lookup(SharabilityQueryImplementation2.class);
294
        assertNotNull(sharability);
295
        assertEquals(SharabilityQuery.Sharability.SHARABLE, sharability.getSharability(f1.toURI()));
296
        assertEquals(SharabilityQuery.Sharability.NOT_SHARABLE, sharability.getSharability(f2.toURI()));
297
        assertEquals(SharabilityQuery.Sharability.SHARABLE, sharability.getSharability(f3.toURI()));
298
        assertEquals(SharabilityQuery.Sharability.NOT_SHARABLE, sharability.getSharability(f4.toURI()));
299
        assertEquals(SharabilityQuery.Sharability.UNKNOWN, sharability.getSharability(f5.toURI()));
300
    }
301
255
    private class LookupProviderImpl2 implements LookupProvider {
302
    private class LookupProviderImpl2 implements LookupProvider {
256
        InstanceContent ic = new InstanceContent();
303
        InstanceContent ic = new InstanceContent();
257
        AbstractLookup l;
304
        AbstractLookup l;
Lines 350-353 Link Here
350
            return res;
397
            return res;
351
        }
398
        }
352
    }
399
    }
400
401
    private static final class SharabilityQueryImpl implements SharabilityQueryImplementation2 {
402
403
        private final Map<URI,SharabilityQuery.Sharability> sharability;
404
405
        SharabilityQueryImpl(@NonNull final Map<URI,SharabilityQuery.Sharability> sharability) {
406
            this.sharability = sharability;
407
        }
408
409
        @Override
410
        @NonNull
411
        public SharabilityQuery.Sharability getSharability(@NonNull final URI uri) {
412
            SharabilityQuery.Sharability res = sharability.get(uri);
413
            if (res == null) {
414
                res = SharabilityQuery.Sharability.UNKNOWN;
415
            }
416
            return res;
417
        }
418
    }
353
}
419
}

Return to bug 253355