diff --git a/maven.embedder/nbproject/project.xml b/maven.embedder/nbproject/project.xml --- a/maven.embedder/nbproject/project.xml +++ b/maven.embedder/nbproject/project.xml @@ -158,6 +158,7 @@ + org.netbeans.modules.maven.util org.netbeans.modules.deploy.ios org.javeleon.netbeans diff --git a/maven.model/nbproject/project.xml b/maven.model/nbproject/project.xml --- a/maven.model/nbproject/project.xml +++ b/maven.model/nbproject/project.xml @@ -151,6 +151,7 @@ + org.netbeans.modules.maven.util org.netbeans.modules.deploy.ios org.javeleon.netbeans org.netbeans.modules.groovy.support diff --git a/maven.util/arch.xml b/maven.util/arch.xml new file mode 100644 --- /dev/null +++ b/maven.util/arch.xml @@ -0,0 +1,1081 @@ + + +]> + + + + &api-questions; + + + + +

The purpose of this module is to provide an easy way to read and set Maven + plugin properties in POM.xml project file without having implementation + dependencies on several Maven modules. +

+

+

+
+ + + + + +

+ All public API methods will be covered by unit tests. +

+
+ + + + + +

+ 2 man days. +

+
+ + + + + +

+ The main use case is implementing a panel to be added to Maven project properties + window to adjust properties of a Maven plugin used in that project. +

+
+ + + + + +

+ Read and set Maven project properties. +

+
+ + + + + + + + + + + + +

+ This module does not deprecate nor replace any existing APIs. +

+
+ + + + + +

+ Does not apply. +

+
+ + + + + +

+ Does not apply. +

+
+ + + + + +

+ Future versions of this module should be backwards compatible. +

+
+ + + + + +

+ Same as the rest of the IDE. +

+
+ + + + + +

+ JDK required. +

+
+ + + + + + + + + + + + +

+ No extra dependencies. +

+
+ + + + + +

+ All platforms the IDE supports. +

+
+ + + + + +

+ No special dependencies. +

+
+ + + + + +

+ Only JAR. +

+
+ + + + + +

+ Yes. +

+
+ + + + + +

+ There are public packages in this module. + +

+
+ + + + + +

+ No special installation requirements. +

+
+ + + + + +

+ No ant tasks. +

+
+ + + + + +

+ No custom class loaders. +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ All API methods are thread safe. +

+
+ + + + + +

+ No clipboard interaction. +

+
+ + + + + +

+ No dnd. +

+
+ + + + + +

+ No direct disk access. +

+
+ + + + + +

+ Uses Lookup passed into project customizer to find Maven model handle. +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No UI components. +

+
+ + + + + +

+ No menus. +

+
+ + + + + +

+ No long running tasks. +

+
+ + + + + +

+ Does not apply. +

+
+ + + + + +

+ No plugged in code. +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ + + + + +

+ No +

+
+ +
diff --git a/maven.util/build.xml b/maven.util/build.xml new file mode 100644 --- /dev/null +++ b/maven.util/build.xml @@ -0,0 +1,5 @@ + + + Builds, tests, and runs the project org.netbeans.modules.maven.util + + diff --git a/maven.util/manifest.mf b/maven.util/manifest.mf new file mode 100644 --- /dev/null +++ b/maven.util/manifest.mf @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +OpenIDE-Module: org.netbeans.modules.maven.util/1 +OpenIDE-Module-Implementation-Version: 1 +OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/maven/util/Bundle.properties + diff --git a/maven.util/nbproject/project.properties b/maven.util/nbproject/project.properties new file mode 100644 --- /dev/null +++ b/maven.util/nbproject/project.properties @@ -0,0 +1,4 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial +javadoc.arch=${basedir}/arch.xml +spec.version.base=1.0 diff --git a/maven.util/nbproject/project.xml b/maven.util/nbproject/project.xml new file mode 100644 --- /dev/null +++ b/maven.util/nbproject/project.xml @@ -0,0 +1,64 @@ + + + org.netbeans.modules.apisupport.project + + + org.netbeans.modules.maven.util + + + org.netbeans.modules.maven + + + + 2 + + + + org.netbeans.modules.maven.embedder + + + + 2 + + + + org.netbeans.modules.maven.model + + + + 1 + + + + org.netbeans.modules.projectapi + + + + 1 + 1.54 + + + + org.netbeans.modules.xml.xam + + + + 1 + 1.25.0.1 + + + + org.openide.util.lookup + + + + 8.22 + + + + + org.netbeans.modules.maven.util + + + + diff --git a/maven.util/src/org/netbeans/modules/maven/util/Bundle.properties b/maven.util/src/org/netbeans/modules/maven/util/Bundle.properties new file mode 100644 --- /dev/null +++ b/maven.util/src/org/netbeans/modules/maven/util/Bundle.properties @@ -0,0 +1,1 @@ +OpenIDE-Module-Name=Maven Utilities diff --git a/maven.util/src/org/netbeans/modules/maven/util/PluginUtilities.java b/maven.util/src/org/netbeans/modules/maven/util/PluginUtilities.java new file mode 100644 --- /dev/null +++ b/maven.util/src/org/netbeans/modules/maven/util/PluginUtilities.java @@ -0,0 +1,157 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright 2013 Oracle and/or its affiliates. All rights reserved. + * + * Oracle and Java are registered trademarks of Oracle and/or its affiliates. + * Other names may be trademarks of their respective owners. + * + * The contents of this file are subject to the terms of either the GNU + * General Public License Version 2 only ("GPL") or the Common + * Development and Distribution License("CDDL") (collectively, the + * "License"). You may not use this file except in compliance with the + * License. You can obtain a copy of the License at + * http://www.netbeans.org/cddl-gplv2.html + * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the + * specific language governing permissions and limitations under the + * License. When distributing the software, include this License Header + * Notice in each file and include the License file at + * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the GPL Version 2 section of the License file that + * accompanied this code. If applicable, add the following below the + * License Header, with the fields enclosed by brackets [] replaced by + * your own identifying information: + * "Portions Copyrighted [year] [name of copyright owner]" + * + * If you wish your version of this file to be governed by only the CDDL + * or only the GPL Version 2, indicate your decision by adding + * "[Contributor] elects to include this software in this distribution + * under the [CDDL or GPL Version 2] license." If you do not indicate a + * single choice of license, a recipient has the option to distribute + * your version of this file under either the CDDL, the GPL Version 2 or + * to extend the choice of license to its licensees as provided above. + * However, if you add GPL Version 2 code and therefore, elected the GPL + * Version 2 license, then the option applies only if the new code is + * made subject to such option by the copyright holder. + * + * Contributor(s): + * + * Portions Copyrighted 2013 Sun Microsystems, Inc. + */ +package org.netbeans.modules.maven.util; + +import org.apache.maven.project.MavenProject; +import org.netbeans.api.project.Project; +import org.netbeans.modules.maven.api.NbMavenProject; +import org.netbeans.modules.maven.api.PluginPropertyUtils; +import org.netbeans.modules.maven.api.customizer.ModelHandle2; +import org.netbeans.modules.maven.model.ModelOperation; +import org.netbeans.modules.maven.model.pom.Build; +import org.netbeans.modules.maven.model.pom.Configuration; +import org.netbeans.modules.maven.model.pom.POMComponentFactory; +import org.netbeans.modules.maven.model.pom.POMModel; +import org.netbeans.modules.maven.model.pom.Plugin; +import org.netbeans.modules.maven.model.pom.Properties; +import org.openide.util.Lookup; + + +/** + * Convenience methods to retrieve and set plugin properties in Maven POM. + * + * @author S. Aubrecht + */ +public class PluginUtilities { + + + /** + * Retrieve Maven plugin version info. + * @param project Maven project. + * @param groupId Plugin's group id. + * @param artifactId Plugin's artifact id. + * @return Version number for the given plugin or null. + */ + public static String getPluginVersion( Project project, String groupId, String artifactId ) { + NbMavenProject nbMaven = project.getLookup().lookup( NbMavenProject.class ); + + return PluginPropertyUtils.getPluginVersion( nbMaven.getMavenProject(), groupId, artifactId ); + } + + /** + * Retrieve Maven plugin configuration property. + * @param project Maven project. + * @param groupId Plugin's group id. + * @param artifactId Plugin's artifact id. + * @param propertyName Property name. + * @return Property value or null if the plugin isn't present in the POM or the property isn't defined. + */ + public static String getPluginProperty( Project project, String groupId, String artifactId, String propertyName ) { + NbMavenProject nbMaven = project.getLookup().lookup( NbMavenProject.class ); + MavenProject prj = nbMaven.getMavenProject(); + String res = prj.getProperties().getProperty( propertyName ); + if( res == null ) { + res = PluginPropertyUtils.getPluginProperty( prj, groupId, artifactId, propertyName, null, null ); + } + return res; + } + + /** + * Change/add property for the given Maven plugin. + * @param projectCustomizerLookup Lookup passed into Project customizer. + * @param groupId Plugin's group id. + * @param artifactId Plugin's artifact id. + * @param propertyName Property name + * @param propertyValue Property value + * + * @see org.netbeans.spi.project.ui.support.ProjectCustomizer + */ + public static void setPluginProperty( Lookup projectCustomizerLookup, String groupId, String artifactId, String propertyName, String propertyValue ) { + ModelHandle2 mh = projectCustomizerLookup.lookup( ModelHandle2.class); + mh.addPOMModification( new ParameterOperation( groupId, artifactId, propertyName, propertyValue)); + } + + + private static class ParameterOperation implements ModelOperation { + + private final String groupId; + private final String artifactId; + private final String name; + private final String value; + + public ParameterOperation( String groupId, String artifacId, String paramName, String paramValue ) { + this.groupId = groupId; + this.artifactId = artifacId; + this.name = paramName; + this.value = paramValue; + } + + @Override + public void performOperation( POMModel model ) { + //new approach, assume all plugins conform to the new setting. + POMComponentFactory fact = model.getFactory(); + Properties props = model.getProject().getProperties(); + if( props != null ) { + props.setProperty( name, value ); + } + + //check if compiler/resources plugins are configured and update them to ${project.source.encoding expression + Build bld = model.getProject().getBuild(); + if( bld == null ) { + return; + } + + Plugin plugin = bld.findPluginById( groupId, artifactId ); + if( plugin != null ) { + Configuration conf = plugin.getConfiguration(); + if( conf == null ) { + conf = fact.createConfiguration(); + plugin.setConfiguration( conf ); + } + if( conf != null ) { + conf.setSimpleParameter( name, value ); + } + } + + } + }; +} diff --git a/maven/nbproject/project.xml b/maven/nbproject/project.xml --- a/maven/nbproject/project.xml +++ b/maven/nbproject/project.xml @@ -452,6 +452,7 @@ + org.netbeans.modules.maven.util org.netbeans.modules.deploy.ios org.javeleon.netbeans