blob: 873e2c99316d3c504caae758807fc7cfdae6159a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.m2e.wtp;
import java.io.IOException;
import java.io.InputStream;
import org.apache.maven.model.Plugin;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.core.project.MavenProjectUtils;
import org.eclipse.m2e.wtp.internal.Messages;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
/**
* maven-acr-plugin (application client maven plugin) configuration model.
*
* @see <a href="http://maven.apache.org/plugins/maven-acr-plugin/acr-mojo.html">http://maven.apache.org/plugins/maven-acr-plugin/acr-mojo.html</a>
*
* @provisional This class has been added as part of a work in progress.
* It is not guaranteed to work or remain the same in future releases.
* For more information contact <a href="mailto:m2e-wtp-dev@eclipse.org">m2e-wtp-dev@eclipse.org</a>.
*
* @author Fred Bricon
*/
public class AcrPluginConfiguration extends AbstractFilteringSupportMavenPlugin {
private static final IProjectFacetVersion DEFAULT_APPCLIENT_FACET_VERSION = IJ2EEFacetConstants.APPLICATION_CLIENT_50;
final IMavenProjectFacade mavenProjectFacade;
public AcrPluginConfiguration(IMavenProjectFacade facade) {
MavenProject mavenProject = facade.getMavenProject();
if (JEEPackaging.APP_CLIENT != JEEPackaging.getValue(mavenProject.getPackaging()))
throw new IllegalArgumentException(Messages.AcrPluginConfiguration_Error_Project_Not_appclient);
this.mavenProjectFacade = facade;
Plugin plugin = mavenProject.getPlugin("org.apache.maven.plugins:maven-acr-plugin"); //$NON-NLS-1$
if (plugin != null) {
setConfiguration((Xpp3Dom) plugin.getConfiguration());
}
}
public IProjectFacetVersion getFacetVersion() {
IFile applicationClientXml = getApplicationClientXml();
if(applicationClientXml != null && applicationClientXml.isAccessible()) {
try {
InputStream is = applicationClientXml.getContents();
try {
JavaEEQuickPeek jqp = new JavaEEQuickPeek(is);
switch(jqp.getVersion()) {
case J2EEVersionConstants.J2EE_1_2_ID:
return IJ2EEFacetConstants.APPLICATION_CLIENT_12;
case J2EEVersionConstants.J2EE_1_3_ID:
return IJ2EEFacetConstants.APPLICATION_CLIENT_13;
case J2EEVersionConstants.J2EE_1_4_ID:
return IJ2EEFacetConstants.APPLICATION_CLIENT_14;
case J2EEVersionConstants.JEE_5_0_ID:
return IJ2EEFacetConstants.APPLICATION_CLIENT_50;
case J2EEVersionConstants.JEE_6_0_ID:
return IJ2EEFacetConstants.APPLICATION_CLIENT_60;
}
} finally {
is.close();
}
} catch(IOException ex) {
// expected
} catch(CoreException ex) {
// expected
}
}
//If no application-client.xml found and the project depends on some java EE 6 jar then set application client facet to 6.0
if (WTPProjectsUtil.hasInClassPath(mavenProjectFacade.getProject(), "javax.servlet.annotation.WebServlet")) { //$NON-NLS-1$
return IJ2EEFacetConstants.APPLICATION_CLIENT_60;
}
return DEFAULT_APPCLIENT_FACET_VERSION;
}
/**
* @return the first application-client.xml file found under META-INF, in all the resource folders.
*/
public IFile getApplicationClientXml() {
IProject project = mavenProjectFacade.getProject();
String contentDir = null;
for (IPath path : mavenProjectFacade.getResourceLocations()) {
contentDir = path.toPortableString()+"/META-INF"; //$NON-NLS-1$
IFile applicationClientXml = project.getFolder(contentDir).getFile("application-client.xml"); //$NON-NLS-1$
if (applicationClientXml.exists()) {
return applicationClientXml;
}
}
return null;
}
/**
* @return the first resource location directory declared in pom.xml
*/
public String getContentDirectory(IProject project) {
IPath[] resources = MavenProjectUtils.getResourceLocations(project, mavenProjectFacade.getMavenProject().getResources());
return resources[0].toPortableString();
}
@Override
protected String getFilteringAttribute() {
return "filterDeploymentDescriptor"; //$NON-NLS-1$
}
}