/* * 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 ); } } } }; }