blob: fc53f436c49e198d1edbc99f929b0c8d3e04a852 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.maven.jaxws;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.maven.artifact.Artifact;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.project.JavaProjectConstants;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.modules.maven.api.ModelUtils;
import org.netbeans.modules.maven.api.NbMavenProject;
import org.netbeans.modules.maven.model.ModelOperation;
import org.netbeans.modules.maven.model.Utilities;
import org.netbeans.modules.maven.model.pom.Dependency;
import org.netbeans.modules.maven.model.pom.Repository;
import org.openide.filesystems.FileObject;
import javax.xml.namespace.QName;
import org.apache.maven.project.MavenProject;
import org.netbeans.modules.javaee.specs.support.api.JaxWs;
import org.netbeans.modules.maven.model.pom.Build;
import org.netbeans.modules.maven.model.pom.Configuration;
import org.netbeans.modules.maven.model.pom.POMExtensibilityElement;
import org.netbeans.modules.maven.model.pom.POMModel;
import org.netbeans.modules.maven.model.pom.POMQName;
import org.netbeans.modules.maven.model.pom.Plugin;
import org.netbeans.modules.maven.model.pom.PluginExecution;
import org.netbeans.modules.maven.model.pom.Resource;
import org.netbeans.modules.websvc.wsstack.api.WSStack;
/**
*
* @author mkuchtiak
*/
public final class MavenModelUtils {
private static final String WSIPMORT_GENERATE_PREFIX = "wsimport-generate-"; //NOI18N
private static final String STALE_FILE_DIRECTORY = "${project.build.directory}/jaxws/stale/"; //NOI18N
private static final String STALE_FILE_EXTENSION = ".stale"; //NOI18N
public static final String JAXWS_GROUP_ID = "org.jvnet.jax-ws-commons"; //NOI18N
public static final String JAXWS_ARTIFACT_ID = "jaxws-maven-plugin"; //NOI18N
public static final String JAXWS_PLUGIN_KEY = JAXWS_GROUP_ID+":"+JAXWS_ARTIFACT_ID; //NOI18N
private static final String JAXWS_CATALOG = "jax-ws-catalog.xml"; //NOI18N
public static final String JAX_WS_PLUGIN_VERSION = "2.3"; //NOI18N
/**
* adds jaxws plugin, requires the model to have a transaction started,
* eg. by calling as part of Utilities.performPOMModelOperations(ModelOperation<POMModel>)
* @param model POMModel
* @return JAX-WS Plugin instance
*/
public static Plugin addJaxWSPlugin(POMModel model) {
return MavenModelUtils.addJaxWSPlugin(model, null);
}
/**
* adds jaxws plugin, requires the model to have a transaction started,
* eg. by calling as part of Utilities.performPOMModelOperations(ModelOperation<POMModel>)
* @param model POMModel
* @param jaxWsVersion version of sources to generate. Value null means default version.
* @return JAX-WS Plugin instance
*/
public static Plugin addJaxWSPlugin(POMModel model, String jaxWsVersion) {
assert model.isIntransaction() : "need to call model modifications under transaction."; //NOI18N
Build bld = model.getProject().getBuild();
if (bld == null) {
bld = model.getFactory().createBuild();
model.getProject().setBuild(bld);
}
Plugin plugin = bld.findPluginById(JAXWS_GROUP_ID, JAXWS_ARTIFACT_ID);
if (plugin != null) {
//TODO CHECK THE ACTUAL PARAMETER VALUES..
return plugin;
}
plugin = model.getFactory().createPlugin();
plugin.setGroupId(JAXWS_GROUP_ID);
plugin.setArtifactId(JAXWS_ARTIFACT_ID);
plugin.setVersion(JAX_WS_PLUGIN_VERSION);
bld.addPlugin(plugin);
// setup global configuration
Configuration config = plugin.getConfiguration();
if (config == null) {
config = model.getFactory().createConfiguration();
plugin.setConfiguration(config);
}
config.setSimpleParameter("sourceDestDir", "${project.build.directory}/generated-sources/jaxws-wsimport"); //NOI18N
config.setSimpleParameter("xnocompile", "true"); //NOI18N
config.setSimpleParameter("verbose", "true"); //NOI18N
config.setSimpleParameter("extension", "true"); //NOI18N
config.setSimpleParameter("catalog", "${basedir}/" + MavenJAXWSSupportImpl.CATALOG_PATH);
if (jaxWsVersion != null) {
config.setSimpleParameter("target", jaxWsVersion); //NOI18N
}
Dependency webservicesDep = model.getFactory().createDependency();
webservicesDep.setGroupId("javax.xml"); //NOI18N
webservicesDep.setArtifactId("webservices-api"); //NOI18N
webservicesDep.setVersion("2.0"); //NOI18N
plugin.addDependency(webservicesDep);
return plugin;
}
/** Adds WAR plugin.
*
* @param model
* @return WAR plugin
*/
public static Plugin addWarPlugin(POMModel model, boolean client) {
assert model.isIntransaction() : "need to call model modifications under transaction."; //NOI18N
Build bld = model.getProject().getBuild();
if (bld == null) {
bld = model.getFactory().createBuild();
model.getProject().setBuild(bld);
}
Plugin plugin = bld.findPluginById("org.apache.maven.plugins", "maven-war-plugin"); //NOI18N
if (plugin == null) {
plugin = model.getFactory().createPlugin();
plugin.setGroupId("org.apache.maven.plugins"); //NOI18N
plugin.setArtifactId("maven-war-plugin"); //NOI18N
plugin.setVersion("2.0.2"); //NOI18N
bld.addPlugin(plugin);
}
Configuration config = plugin.getConfiguration();
if (config == null) {
config = model.getFactory().createConfiguration();
plugin.setConfiguration(config);
}
POMExtensibilityElement webResources = findChild(config.getConfigurationElements(), "webResources");
if (webResources == null) {
webResources = model.getFactory().createPOMExtensibilityElement(
POMQName.createQName("webResources", model.getPOMQNames().isNSAware()));
config.addExtensibilityElement(webResources);
}
//check for resource containing jax-ws-catalog.xml
List<String> includes = new ArrayList<String>(2);
Collections.addAll(includes, JAXWS_CATALOG, "wsdl/**"); // NOI18N
if (!hasResource(webResources, JAXWS_CATALOG, "WEB-INF")) { // NOI18N
addResource(model, webResources, "WEB-INF", includes); // NOI18N
}
if (client && !hasResource(webResources, JAXWS_CATALOG, "WEB-INF/classes/META-INF")) { // NOI18N
addResource(model, webResources, "WEB-INF/classes/META-INF", includes); // NOI18N
}
return plugin;
}
/** Adds wsdl Resource.
*
* @param handle ModelHandle object
*/
public static void addWsdlResources(POMModel model) {
assert model.isIntransaction();
Build bld = model.getProject().getBuild();
if (bld == null) {
return;
}
boolean foundResourceForMetaInf = false;
boolean mainResourcesFound = false;
List<Resource> resources = bld.getResources();
if (resources != null) {
for (Resource resource : resources) {
if ("META-INF".equals(resource.getTargetPath())
&& ("src".equals(resource.getDirectory()) || "${basedir}/src".equals(resource.getDirectory()))) { //NOI18N
foundResourceForMetaInf = true;
//TODO shall we chckf or jax-ws-catalog.xml + wsdl includes?
}
else if ( "src/main/resources".equals(resource.getDirectory())){
mainResourcesFound = true;
}
}
}
if (!foundResourceForMetaInf) {
Resource res = model.getFactory().createResource();
res.setTargetPath("META-INF"); //NOI18N
res.setDirectory("src"); //NOI18N
res.addInclude("jax-ws-catalog.xml"); //NOI18N
res.addInclude("wsdl/**"); //NOI18N
bld.addResource(res);
}
if ( !mainResourcesFound ){
Resource res = model.getFactory().createResource();
res.setDirectory("src/main/resources"); //NOI18N
bld.addResource(res);
}
}
private static POMExtensibilityElement findChild(List<POMExtensibilityElement> elems, String name) {
for (POMExtensibilityElement e : elems) {
if (name.equals(e.getQName().getLocalPart())) {
return e;
}
}
return null;
}
private static POMExtensibilityElement findElementForValue(List<POMExtensibilityElement> elems, String value) {
for (POMExtensibilityElement e : elems) {
if (value.equals(e.getElementText())) {
return e;
}
}
return null;
}
public static void addWsimportExecution(Plugin plugin, String id, String wsdlPath, String originalUrl) {
addWsimportExecution(plugin, id, wsdlPath, originalUrl, null);
}
public static void addWsimportExecution(Plugin plugin, String id, String wsdlPath,
String originalUrl, String packageName ) {
POMModel model = plugin.getModel();
assert model.isIntransaction();
PluginExecution exec = model.getFactory().createExecution();
String uniqueId = getUniqueId(plugin, id);
exec.setId(WSIPMORT_GENERATE_PREFIX+uniqueId);
exec.setPhase("generate-sources"); //NOI18N
exec.addGoal("wsimport"); //NOI18N
plugin.addExecution(exec);
Configuration config = model.getFactory().createConfiguration();
exec.setConfiguration(config);
QName qname = POMQName.createQName("wsdlFiles", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement wsdlFiles = model.getFactory().createPOMExtensibilityElement(qname);
config.addExtensibilityElement(wsdlFiles);
if (packageName != null) {
qname = POMQName.createQName("packageName", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement packageNameElement = model.getFactory().createPOMExtensibilityElement(qname);
packageNameElement.setElementText(packageName);
config.addExtensibilityElement(packageNameElement);
}
qname = POMQName.createQName("wsdlFile", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement wsdlFile = model.getFactory().createPOMExtensibilityElement(qname);
wsdlFile.setElementText(wsdlPath);
wsdlFiles.addExtensibilityElement(wsdlFile);
//adding <vmArgs><vmArg>-Djavax.xml.accessExternalSchema=all</vmArg></vmArgs>; see issue #244891
qname = POMQName.createQName("vmArgs", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement vmArgs = model.getFactory().createPOMExtensibilityElement(qname);
config.addExtensibilityElement(vmArgs);
qname = POMQName.createQName("vmArg", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement vmArg = model.getFactory().createPOMExtensibilityElement(qname);
vmArg.setElementText("-Djavax.xml.accessExternalSchema=all"); //NOI18N
vmArgs.addExtensibilityElement(vmArg);
if ( originalUrl != null ){
qname = POMQName.createQName("wsdlLocation", model.getPOMQNames().
isNSAware()); //NOI18N
POMExtensibilityElement wsdlLocation =
model.getFactory().createPOMExtensibilityElement(qname);
wsdlLocation.setElementText(originalUrl);
config.addExtensibilityElement(wsdlLocation);
}
qname = POMQName.createQName("staleFile", model.getPOMQNames().isNSAware()); //NOI18N
POMExtensibilityElement staleFile = model.getFactory().createPOMExtensibilityElement(qname);
staleFile.setElementText(STALE_FILE_DIRECTORY+uniqueId+STALE_FILE_EXTENSION);
config.addExtensibilityElement(staleFile);
}
public static void addBindingFile(POMModel model, String id, String bindingFilePath) {
assert model.isIntransaction();
Build bld = model.getProject().getBuild();
if (bld == null) {
return;
}
Plugin plugin = bld.findPluginById(JAXWS_GROUP_ID, JAXWS_ARTIFACT_ID);
if (plugin != null) {
List<PluginExecution> executions = plugin.getExecutions();
String execId = WSIPMORT_GENERATE_PREFIX+id;
for (PluginExecution exec : executions) {
if (execId.equals(exec.getId())) {
Configuration config = exec.getConfiguration();
if (config != null) {
QName qname = POMQName.createQName("bindingDirectory", model.getPOMQNames().isNSAware()); //NOI18N
if (config.getChildElementText(qname) == null) {
POMExtensibilityElement bindingDir = model.getFactory().createPOMExtensibilityElement(qname);
bindingDir.setElementText("${basedir}/src/jaxws-bindings");
config.addExtensibilityElement(bindingDir);
}
POMExtensibilityElement bindingFiles =
findChild(config.getConfigurationElements(), "bindingFiles"); //NOI18N
if (bindingFiles == null) {
qname = POMQName.createQName("bindingFiles", model.getPOMQNames().isNSAware()); //NOI18N
bindingFiles = model.getFactory().createPOMExtensibilityElement(qname);
config.addExtensibilityElement(bindingFiles);
}
POMExtensibilityElement bindingFile =
findElementForValue(bindingFiles.getExtensibilityElements(), bindingFilePath);
if (bindingFile == null) {
qname = POMQName.createQName("bindingFile", model.getPOMQNames().isNSAware()); //NOI18N
bindingFile = model.getFactory().createPOMExtensibilityElement(qname);
bindingFile.setElementText(bindingFilePath);
bindingFiles.addExtensibilityElement(bindingFile);
}
}
break;
}
}
}
}
public static void removeWsimportExecution(POMModel model, String id) {
assert model.isIntransaction();
Build bld = model.getProject().getBuild();
if (bld == null) {
return;
}
Plugin plugin = bld.findPluginById(JAXWS_GROUP_ID, JAXWS_ARTIFACT_ID);
if (plugin != null) {
List<PluginExecution> executions = plugin.getExecutions();
if (executions != null) {
for (PluginExecution exec : executions) {
String execId = WSIPMORT_GENERATE_PREFIX+id;
if (execId.equals(exec.getId())) {
plugin.removeExecution(exec);
break;
}
}
}
}
}
public static void renameWsdlFile(POMModel model, String oldId, String newId, String oldWsdlPath, String newWsdlPath) {
assert model.isIntransaction();
Build bld = model.getProject().getBuild();
if (bld == null) {
return;
}
Plugin plugin = bld.findPluginById(JAXWS_GROUP_ID, JAXWS_ARTIFACT_ID);
if (plugin != null) {
List<PluginExecution> executions = plugin.getExecutions();
String execId = WSIPMORT_GENERATE_PREFIX+oldId;
for (PluginExecution exec : executions) {
Configuration config = exec.getConfiguration();
if (config != null && execId.equals(exec.getId())) {
// replace wsdlFile element
POMExtensibilityElement wsdlFiles = findChild(config.getConfigurationElements(), "wsdlFiles"); //NOI18N
if (wsdlFiles != null) {
List<POMExtensibilityElement> files = wsdlFiles.getExtensibilityElements();
for (POMExtensibilityElement el : files) {
if ("wsdlFile".equals(el.getQName().getLocalPart()) && //NOI18N
oldWsdlPath.equals(el.getElementText())) {
el.setElementText(newWsdlPath);
break;
}
}
}
// replace staleFile element
POMExtensibilityElement staleFile = findChild(config.getConfigurationElements(), "staleFile"); //NOI18N
if (staleFile != null) {
staleFile.setElementText(STALE_FILE_DIRECTORY+newId+STALE_FILE_EXTENSION);
}
// replace exec id
exec.setId(WSIPMORT_GENERATE_PREFIX+newId);
break;
}
}
}
}
/** Add Metro Library.
*
* @param project Project
*/
public static void addMetroLibrary(Project project) {
WSStack<JaxWs> wsStack = new WSStackUtils(project).getWsStack(JaxWs.class);
String scope = null;
if (wsStack != null && wsStack.isFeatureSupported(JaxWs.Feature.WSIT)) {
scope = Artifact.SCOPE_PROVIDED;
}
ModelUtils.addDependency(project.getProjectDirectory().getFileObject("pom.xml"),
"org.glassfish.metro",
"webservices-rt",
"2.3",
null, scope, null, false);
}
/** Detect JAX-WS Library in project.
*
* @param project Project
* @return true if library was detected
*/
public static boolean hasJaxWsAPI(Project project) {
SourceGroup[] srcGroups = ProjectUtils.getSources(project).getSourceGroups(
JavaProjectConstants.SOURCES_TYPE_JAVA);
if (srcGroups.length > 0) {
ClassPath classPath = ClassPath.getClassPath(srcGroups[0].getRootFolder(), ClassPath.BOOT);
FileObject wsFeature = classPath.findResource("javax/xml/ws/WebServiceFeature.class"); // NOI18N
if (wsFeature == null) {
classPath = ClassPath.getClassPath(srcGroups[0].getRootFolder(), ClassPath.COMPILE);
wsFeature = classPath.findResource("javax/xml/ws/WebServiceFeature.class"); // NOI18N
if (wsFeature == null) {
return false;
}
}
}
return true;
}
/** Add Javadoc to project
* @param project Project
*/
public static void addJavadoc(final Project project) {
NbMavenProject mavenProject = project.getLookup().lookup(NbMavenProject.class);
if (mavenProject != null) {
mavenProject.downloadDependencyAndJavadocSource(false);
}
}
/** get list of wsdl files in Maven project
*
* @param project Maven project instance
* @return list of wsdl files
*/
static List<WsimportPomInfo> getWsdlFiles(Project project) {
MavenProject mavenProject = project.getLookup().lookup(NbMavenProject.class).getMavenProject();
assert mavenProject != null;
@SuppressWarnings("unchecked")
List<org.apache.maven.model.Plugin> plugins = mavenProject.getBuildPlugins();
List<WsimportPomInfo> wsdlList = new ArrayList<WsimportPomInfo>();
for (org.apache.maven.model.Plugin plg : plugins) {
if (JAXWS_PLUGIN_KEY.equalsIgnoreCase(plg.getKey())) {
@SuppressWarnings("unchecked")
List<org.apache.maven.model.PluginExecution> executions = plg.getExecutions();
for (org.apache.maven.model.PluginExecution exec : executions) {
Xpp3Dom conf = (Xpp3Dom)exec.getConfiguration();
if (conf != null) {
Xpp3Dom wsdlFiles = conf.getChild("wsdlFiles"); //NOI18N
if (wsdlFiles != null) {
Xpp3Dom wsdlFile = wsdlFiles.getChild("wsdlFile"); //NOI18N
if (wsdlFile != null) {
WsimportPomInfo pomInfo = new WsimportPomInfo(wsdlFile.getValue());
// detect handler binding file
Xpp3Dom bindingFiles = conf.getChild("bindingFiles"); //NOI18N
if (bindingFiles != null) {
String bindingPath = findHandler(bindingFiles);
if (bindingPath != null) {
pomInfo.setHandlerFile(bindingPath);
}
}
String execId = exec.getId();
if (execId != null) {
if (execId.startsWith(WSIPMORT_GENERATE_PREFIX)) {
pomInfo.setId(execId.substring(WSIPMORT_GENERATE_PREFIX.length()));
} else {
pomInfo.setId(execId);
}
}
wsdlList.add(pomInfo);
}
}
}
}
}
}
return wsdlList;
}
private static String findHandler(Xpp3Dom parent) {
for (Xpp3Dom child : parent.getChildren("bindingFile")) { //NOI18N
String bindingPath = child.getValue();
if (bindingPath != null && bindingPath.endsWith("_handler.xml")) { //NOI18N
return bindingPath;
}
}
return null;
}
private static void updateLibraryScope(POMModel model, String groupId, String targetScope) {
assert model.isIntransaction() : "need to call model modifications under transaction."; //NOI18N
Dependency wsDep = model.getProject().findDependencyById(groupId, "webservices-rt", null); //NOI18N
if (wsDep != null) {
wsDep.setScope(targetScope);
}
}
/** Update dependency scope for webservices-rt.
*
* @param prj Project
*/
static void reactOnServerChanges(final Project prj) {
NbMavenProject nb = prj.getLookup().lookup(NbMavenProject.class);
@SuppressWarnings("unchecked")
List<org.apache.maven.model.Dependency> deps = nb.getMavenProject().getDependencies();
String metroScope = null;
boolean foundMetroDep = false;
String groupId = null;
for (org.apache.maven.model.Dependency dep:deps) {
if ("com.sun.xml.ws".equals(dep.getGroupId()) && "webservices-rt".equals(dep.getArtifactId())) { //NOI18N
String scope = dep.getScope();
metroScope = scope == null ? "compile" : scope; //NOI18N
foundMetroDep = true;
groupId = "com.sun.xml.ws";
break;
} else if ("org.glassfish.metro".equals(dep.getGroupId()) && "webservices-rt".equals(dep.getArtifactId())) { //NOI18N
String scope = dep.getScope();
metroScope = scope == null ? "compile" : scope; //NOI18N
foundMetroDep = true;
groupId = "org.glassfish.metro";
break;
}
}
String updateScopeTo = null;
if (foundMetroDep) {
WSStack<JaxWs> wsStack = new WSStackUtils(prj).getWsStack(JaxWs.class);
if (wsStack != null) {
if (wsStack.isFeatureSupported(JaxWs.Feature.WSIT)) {
if ("compile".equals(metroScope)) { //NOI18N
updateScopeTo = "provided"; //NOI18N
}
} else {
if ("provided".equals(metroScope)) {
updateScopeTo = "compile"; //NOI18N
}
}
}/*
Fix for BZ#198531 - Netbeans automatically modifies dependency scope of webservices-rt in pom.xml
else {
if ("compile".equals(metroScope)) { //NOI18N
updateScopeTo = "provided"; //NOI18N
}
}*/
if (updateScopeTo != null) {
final String targetScope = updateScopeTo;
final String grpId = groupId;
ModelOperation<POMModel> operation = new ModelOperation<POMModel>() {
@Override
public void performOperation(POMModel model) {
// update webservices-rt library dependency scope (provided or compile)
// depending whether J2EE Server contains metro jars or not
updateLibraryScope(model, grpId, targetScope);
}
};
Utilities.performPOMModelOperations(prj.getProjectDirectory().getFileObject("pom.xml"), //NOI18N
Collections.singletonList(operation));
}
}
}
private static void addResource(POMModel model, POMExtensibilityElement webResources,
String targetPath, List<String> includes) {
POMExtensibilityElement res = model.getFactory().createPOMExtensibilityElement(
POMQName.createQName("resource", model.getPOMQNames().isNSAware()));
webResources.addExtensibilityElement(res);
POMExtensibilityElement dir = model.getFactory().createPOMExtensibilityElement(
POMQName.createQName("directory", model.getPOMQNames().isNSAware()));
dir.setElementText("src");
res.addExtensibilityElement(dir);
POMExtensibilityElement tp = model.getFactory().createPOMExtensibilityElement(POMQName.createQName("targetPath",
model.getPOMQNames().isNSAware()));
tp.setElementText(targetPath);
res.addExtensibilityElement(tp);
POMExtensibilityElement in = model.getFactory().createPOMExtensibilityElement(POMQName.createQName("includes",
model.getPOMQNames().isNSAware()));
res.addExtensibilityElement(in);
for (String includeString : includes) {
POMExtensibilityElement include = model.getFactory().createPOMExtensibilityElement(POMQName.createQName("include",
model.getPOMQNames().isNSAware()));
include.setElementText(includeString);
in.addExtensibilityElement(include);
}
}
private static boolean hasResource(POMExtensibilityElement webResources, String resourceName, String targetPath) {
List<POMExtensibilityElement> resources = webResources.getChildren(POMExtensibilityElement.class);
for (POMExtensibilityElement res : resources) {
POMExtensibilityElement targetPathEl = findChild(res.getExtensibilityElements(), "targetPath"); //NOI18N
if (targetPathEl != null && targetPath.equals(targetPathEl.getElementText())) {
POMExtensibilityElement includesEl = findChild(res.getExtensibilityElements(), "includes"); //NOI18N
if (includesEl != null) {
List<POMExtensibilityElement> includes = includesEl.getChildren(POMExtensibilityElement.class);
for (POMExtensibilityElement include : includes) {
if (resourceName.equals(include.getElementText())) {
return true;
}
}
}
}
}
return false;
}
public static String getUniqueId(Plugin plugin, String id) {
String result = id;
List<PluginExecution> executions = plugin.getExecutions();
if (executions != null) {
Set<String> execIdSet = new HashSet<String>();
for (PluginExecution ex : executions) {
String execId = ex.getId();
if (execId != null) {
if (execId.startsWith(WSIPMORT_GENERATE_PREFIX)) {
execIdSet.add(execId.substring(WSIPMORT_GENERATE_PREFIX.length()));
} else {
execIdSet.add(execId);
}
}
}
int i=1;
while (execIdSet.contains(result)) {
result = id+"_"+String.valueOf(i++); //NOI18N
}
}
return result;
}
}