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

(-)api.java/apichanges.xml (+17 lines)
Lines 76-81 Link Here
76
<!-- ACTUAL CHANGES BEGIN HERE: -->
76
<!-- ACTUAL CHANGES BEGIN HERE: -->
77
77
78
<changes>
78
<changes>
79
    <change id="api-project-modification">
80
            <api name="queries"/>
81
            <summary>New API <code>ProjectModificationImplementation</code></summary>
82
            <version major="1" minor="46"/>
83
            <date day="10" month="4" year="2013"/>
84
            <author login="mkozeny"/>
85
            <compatibility semantic="compatible" source="compatible" binary="compatible"/>
86
            <description>
87
                <p>
88
                    Added new API <code>ProjectModificationImplementation</code>, which provides methods
89
                    <code>getPackagesToExport</code>, <code>exportPackageAction</code> and <code>isExportSelectedPackages</code>.
90
                    This API is used by <code>ExportPackageAction</code> located in non-public package <code>org.netbeans.spi.java.queries.impl</code>
91
                    which is action implemented for exporting package(s) from NetBeans Module Project.
92
                </p>
93
            </description>
94
            <issue number="202329"/>
95
        </change>
79
        <change id="JDK8-profiles">
96
        <change id="JDK8-profiles">
80
            <api name="queries"/>
97
            <api name="queries"/>
81
            <summary>The <code>SourceLevelQuery</code> supports JDK 8 profiles</summary>
98
            <summary>The <code>SourceLevelQuery</code> supports JDK 8 profiles</summary>
(-)api.java/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.api.java/1
2
OpenIDE-Module: org.netbeans.api.java/1
3
OpenIDE-Module-Specification-Version: 1.46
3
OpenIDE-Module-Specification-Version: 1.47
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/java/queries/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/api/java/queries/Bundle.properties
5
AutoUpdate-Show-In-Client: false
5
AutoUpdate-Show-In-Client: false
6
6
(-)api.java/nbproject/project.xml (+17 lines)
Lines 68-73 Link Here
68
                    </run-dependency>
68
                    </run-dependency>
69
                </dependency>
69
                </dependency>
70
                <dependency>
70
                <dependency>
71
                    <code-name-base>org.netbeans.modules.projectapi</code-name-base>
72
                    <build-prerequisite/>
73
                    <compile-dependency/>
74
                    <run-dependency>
75
                        <release-version>1</release-version>
76
                        <specification-version>1.53</specification-version>
77
                    </run-dependency>
78
                </dependency>
79
                <dependency>
80
                    <code-name-base>org.openide.awt</code-name-base>
81
                    <build-prerequisite/>
82
                    <compile-dependency/>
83
                    <run-dependency>
84
                        <specification-version>7.58</specification-version>
85
                    </run-dependency>
86
                </dependency>
87
                <dependency>
71
                    <code-name-base>org.openide.filesystems</code-name-base>
88
                    <code-name-base>org.openide.filesystems</code-name-base>
72
                    <build-prerequisite/>
89
                    <build-prerequisite/>
73
                    <compile-dependency/>
90
                    <compile-dependency/>
(-)api.java/src/org/netbeans/spi/java/queries/ProjectModifierImplementation.java (+77 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2013 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.spi.java.queries;
43
44
import java.util.Collection;
45
import org.netbeans.api.annotations.common.NonNull;
46
import org.openide.filesystems.FileObject;
47
48
/**
49
 * Provide API for manipulating with project packages.
50
 * @author mkozeny
51
 * @since 1.47
52
 */
53
public interface ProjectModifierImplementation {
54
    
55
    /**
56
     * Returns collection of packages to export or unexport
57
     * @param selectedPackages set of selected packages
58
     * @return collection of packages which are able to export or unexport
59
     */
60
    public @NonNull Collection<String> getPackagesToExport(Collection<FileObject> selectedPackages);
61
    
62
    /**
63
     * Check whether passed set of packages should be exported or unexported
64
     * @param packagesToExport set of packages to export or to unexport
65
     * @return true or false according to whether collection of packages
66
     * passed as parameter contains at least one non-public package
67
     */
68
    public boolean isExportSelectedPackages(Collection<String> packagesToExport);
69
    
70
    /**
71
     * Do the export or unexport of passed set of packages
72
     * @param packagesToExport set of packages to export or to unexport
73
     * @param export whether passed set of packages should be export or unexport
74
     */
75
    public void exportPackageAction(@NonNull Collection<String> packagesToExport, boolean export);
76
    
77
}
(-)api.java/src/org/netbeans/spi/java/queries/impl/ExportPackageAction.java (+126 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2013 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.spi.java.queries.impl;
43
44
import java.awt.event.ActionEvent;
45
import java.util.Collection;
46
import javax.swing.AbstractAction;
47
import javax.swing.Action;
48
import org.netbeans.api.project.FileOwnerQuery;
49
import org.netbeans.api.project.Project;
50
import org.netbeans.spi.java.queries.ProjectModifierImplementation;
51
import org.openide.awt.ActionID;
52
import org.openide.awt.ActionReference;
53
import org.openide.awt.ActionReferences;
54
import org.openide.awt.ActionRegistration;
55
import org.openide.awt.DynamicMenuContent;
56
import org.openide.filesystems.FileObject;
57
import org.openide.util.ContextAwareAction;
58
import org.openide.util.Lookup;
59
import org.openide.util.NbBundle.Messages;
60
61
/**
62
 * Submenu which permits the user to export or unexport appropriate package.
63
 * Must be locate in NetBeans Module Project.
64
 */
65
@ActionID(
66
        category = "Project",
67
        id = "org.netbeans.modules.apisupport.project.ExportPackageAction")
68
@ActionRegistration(
69
        displayName = "#CTL_ExportPackageAction", lazy = false)
70
@ActionReferences({
71
    @ActionReference(path = "Projects/package/Actions", position = 100),
72
})
73
@Messages({"CTL_UnexportPackageAction=Unexport Package","CTL_ExportPackageAction=Export Package"})
74
public final class ExportPackageAction extends AbstractAction implements ContextAwareAction{
75
76
    @Override
77
    public void actionPerformed(ActionEvent ev) {
78
        //well, since someone can assign a shortcut ti the action, the invokation is unvaiodable, make it noop        
79
        //assert false : "Action should never be called without a context";
80
    }
81
82
    @Override
83
    public Action createContextAwareInstance(Lookup actionContext) {
84
        Collection<FileObject> selectedPackages = (Collection<FileObject>) actionContext.lookupAll(FileObject.class);
85
        Project project = FileOwnerQuery.getOwner(selectedPackages.iterator().hasNext()?selectedPackages.iterator().next():null);
86
        ProjectModifierImplementation pmi = null;
87
        if((pmi = project.getLookup().lookup(ProjectModifierImplementation.class)) != null) {
88
            Collection<String> packagesToExport = pmi.getPackagesToExport(selectedPackages);
89
            return new ExportPackageAction.ContextAction(pmi, packagesToExport, pmi.isExportSelectedPackages(packagesToExport));
90
        }
91
        return new ExportPackageAction.ContextAction();
92
    }
93
94
    /**
95
     * The particular instance of this action for a given package(s).
96
     */
97
    private static final class ContextAction extends AbstractAction {
98
99
        private Collection<String> packagesToExport; 
100
        private boolean export;
101
        private ProjectModifierImplementation pmi;
102
        
103
        public ContextAction() {
104
            this(true, false);
105
        }
106
        
107
        public ContextAction(ProjectModifierImplementation pmi, Collection<String> packagesToExport, boolean export) {
108
            this(export, packagesToExport!=null && !packagesToExport.isEmpty());
109
            this.pmi = pmi;
110
            this.packagesToExport = packagesToExport;
111
            this.export = export;
112
        }
113
        
114
        private ContextAction(boolean export, boolean enable) {
115
            super(export?Bundle.CTL_ExportPackageAction():Bundle.CTL_UnexportPackageAction());
116
            this.putValue(DynamicMenuContent.HIDE_WHEN_DISABLED, true);
117
            this.setEnabled(enable);
118
        }
119
        
120
        @Override
121
        public void actionPerformed(ActionEvent evt) {
122
            pmi.exportPackageAction(packagesToExport, export);
123
        }
124
        
125
    }
126
}

Return to bug 200833