/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
*******************************************************************************/
package com.liferay.ide.maven.core;
import com.liferay.ide.core.BaseLiferayProject;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.IProjectBuilder;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.server.remote.IRemoteServerPublisher;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.model.Plugin;
import org.apache.maven.project.MavenProject;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
import org.eclipse.m2e.jdt.IClasspathManager;
import org.eclipse.m2e.jdt.MavenJdtPlugin;
/**
* @author Gregory Amerson
* @author Simon Jiang
*/
public abstract class LiferayMavenProject extends BaseLiferayProject implements IMavenProject
{
public LiferayMavenProject( IProject project )
{
super( project );
}
public <T> T adapt( Class<T> adapterType )
{
T adapter = super.adapt( adapterType );
if( adapter != null )
{
return adapter;
}
final IMavenProjectFacade facade = MavenUtil.getProjectFacade( getProject(), new NullProgressMonitor() );
if( facade != null )
{
if( IProjectBuilder.class.equals( adapterType ) )
{
final IProjectBuilder projectBuilder = new MavenProjectBuilder( getProject() );
return adapterType.cast( projectBuilder );
}
else if( IRemoteServerPublisher.class.equals( adapterType ) )
{
final IRemoteServerPublisher remoteServerPublisher =
new MavenProjectRemoteServerPublisher( getProject() );
return adapterType.cast( remoteServerPublisher );
}
}
return null;
}
public IPath getLibraryPath( String filename )
{
final IPath[] libs = getUserLibs();
if( ! CoreUtil.isNullOrEmpty( libs ) )
{
for( IPath lib : libs )
{
if( lib.removeFileExtension().lastSegment().startsWith( filename ) )
{
return lib;
}
}
}
return null;
}
public String getLiferayMavenPluginVersion()
{
String retval = null;
final IMavenProjectFacade projectFacade = MavenPlugin.getMavenProjectRegistry().getProject( getProject() );
if( projectFacade != null )
{
try
{
final NullProgressMonitor npm = new NullProgressMonitor();
final MavenProject mavenProject = projectFacade.getMavenProject( npm );
if( mavenProject != null )
{
final Plugin liferayMavenPlugin =
MavenUtil.getPlugin( projectFacade, ILiferayMavenConstants.LIFERAY_MAVEN_PLUGIN_KEY, npm );
retval = liferayMavenPlugin.getVersion();
}
}
catch( CoreException e )
{
}
}
return retval;
}
public String getProperty( String key, String defaultValue )
{
String retval = defaultValue;
if( ( "theme.type".equals( key ) || "theme.parent".equals( key ) ) &&
ProjectUtil.isThemeProject( getProject() ) )
{
final IMavenProjectFacade projectFacade = MavenUtil.getProjectFacade( getProject() );
if( projectFacade != null )
{
final MavenProject mavenProject = projectFacade.getMavenProject();
if( "theme.type".equals( key ) )
{
retval =
MavenUtil.getLiferayMavenPluginConfig(
mavenProject, ILiferayMavenConstants.PLUGIN_CONFIG_THEME_TYPE );
}
else
{
retval =
MavenUtil.getLiferayMavenPluginConfig(
mavenProject, ILiferayMavenConstants.PLUGIN_CONFIG_PARENT_THEME );
}
}
}
return retval;
}
public IFolder getSourceFolder( String classification )
{
IFolder retval = super.getSourceFolder( classification );
final List<IFolder> sourceFolders = CoreUtil.getSourceFolders( JavaCore.create( getProject() ) );
for( IFolder folder : sourceFolders )
{
if( folder.getName().equals( classification ) )
{
retval = folder;
break;
}
}
return retval;
}
public IPath[] getUserLibs()
{
final List<IPath> libs = new ArrayList<IPath>();
final IClasspathManager buildPathManager = MavenJdtPlugin.getDefault().getBuildpathManager();
try
{
final IClasspathEntry[] classpath =
buildPathManager.getClasspath(
getProject(), IClasspathManager.CLASSPATH_RUNTIME, true, new NullProgressMonitor() );
for( IClasspathEntry entry : classpath )
{
libs.add( entry.getPath() );
}
}
catch( CoreException e )
{
LiferayMavenCore.logError( "Unable to get maven classpath.", e ); //$NON-NLS-1$
}
return libs.toArray( new IPath[0] );
}
}