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