/******************************************************************************* * 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.ILiferayPortal; import com.liferay.ide.core.IResourceBundleProject; import com.liferay.ide.core.IWebProject; import com.liferay.ide.project.core.FlexibleProject; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.apache.maven.project.MavenProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.m2e.core.project.IMavenProjectFacade; /** * @author Gregory Amerson * @author Cindy Li * @author Simon Jiang */ public class FacetedMavenProject extends LiferayMavenProject implements IWebProject, IResourceBundleProject { private final FlexibleProject flexibleProject; public FacetedMavenProject( IProject project ) { super( project ); this.flexibleProject = new FlexibleProject( project ) { @Override public IPath getLibraryPath( String filename ) { return null; } @Override public String getProperty( String key, String defaultValue ) { return null; } }; } 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( ILiferayPortal.class.equals( adapterType ) ) { final ILiferayPortal portal = new LiferayPortalMaven( this ); return adapterType.cast( portal ); } } return null; } @Override public IResource findDocrootResource( IPath path ) { return this.flexibleProject.findDocrootResource( path ); } @Override public IFolder getDefaultDocrootFolder() { return this.flexibleProject.getDefaultDocrootFolder(); } @Override public List<IFile> getDefaultLanguageProperties() { return flexibleProject.getDefaultLanguageProperties(); } @Override public IFile getDescriptorFile( String name ) { return this.flexibleProject.getDescriptorFile( name ); } public Collection<IFile> getOutputs( boolean buildIfNeeded, IProgressMonitor monitor ) throws CoreException { final Collection<IFile> outputs = new HashSet<IFile>(); if( buildIfNeeded ) { this.getProject().build( IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor ); new MavenProjectBuilder( this.getProject() ).runMavenGoal( getProject(), "package", monitor ); final IMavenProjectFacade projectFacade = MavenUtil.getProjectFacade( getProject(), monitor ); final MavenProject mavenProject = projectFacade.getMavenProject( monitor ); final String targetFolder = mavenProject.getBuild().getDirectory(); final String targetWar = mavenProject.getBuild().getFinalName() + "." + mavenProject.getPackaging(); final IFile output = getProject().getFile( new Path( targetFolder ).append( targetWar ) ); if( output.exists() ) { outputs.add( output ); } } return outputs; } }