/*******************************************************************************
* 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.project.core;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.sdk.core.SDKUtil;
import com.liferay.ide.server.util.ServerUtil;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.IFacetedProjectValidator;
import org.eclipse.wst.common.project.facet.core.runtime.internal.BridgedRuntime;
/**
* @author Kuo Zhang
* @author Simon Jiang
*/
@SuppressWarnings( "restriction" )
public class PluginsSDKProjectRuntimeValidator implements IFacetedProjectValidator
{
public static final String LOCATION_TARGETED_RUNTIMES = "Targeted Runtimes";
public static final String ID_PRIMARY_RUNTIME_NOT_SET = "primary-runtime-not-set";
public static final String ID_PRIMARY_RUNTIME_NOT_LIFERAY_RUNTIME = "primary-runtime-not-liferay-runtime";
public static final String ID_PLUGINS_SDK_NOT_SET = "plugins-sdk-not-set";
public static final String MSG_PRIMARY_RUNTIME_NOT_SET = Msgs.primaryRuntimeNotSet;
public static final String MSG_PRIMARY_RUNTIME_NOT_LIFERAY_RUNTIME = Msgs.primaryRuntimeNotLiferayRuntime;
public static final String LOCATION_TARGETED_SDK = "Targeted SDK";
public void validate( IFacetedProject fproj ) throws CoreException
{
final IProject proj = fproj.getProject();
if ( ProjectUtil.isLiferayFacetedProject( proj ) )
{
clearMarkers( proj );
if( SDKUtil.isSDKProject( fproj.getProject() ) )
{
IJavaProject javaProject = JavaCore.create( proj );
for( IClasspathEntry entry : javaProject.getRawClasspath() )
{
if( entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER &&
entry.getPath().segment( 0 ).equals( SDKClasspathContainer.ID ) )
{
return;
}
}
if( fproj.getPrimaryRuntime() == null )
{
setMarker(
proj, ProjectCore.LIFERAY_PROJECT_MARKER_TYPE, IMarker.SEVERITY_ERROR,
MSG_PRIMARY_RUNTIME_NOT_SET, LOCATION_TARGETED_RUNTIMES, ID_PRIMARY_RUNTIME_NOT_SET );
}
else
{
if( ! ServerUtil.isLiferayRuntime( (BridgedRuntime) fproj.getPrimaryRuntime() ) )
{
setMarker(
proj, ProjectCore.LIFERAY_PROJECT_MARKER_TYPE, IMarker.SEVERITY_ERROR,
MSG_PRIMARY_RUNTIME_NOT_LIFERAY_RUNTIME, LOCATION_TARGETED_RUNTIMES,
ID_PRIMARY_RUNTIME_NOT_LIFERAY_RUNTIME );
}
}
}
else if ( !ProjectUtil.isMavenProject( proj ) )
{
setMarker(
proj, ProjectCore.LIFERAY_PROJECT_MARKER_TYPE, IMarker.SEVERITY_ERROR, Msgs.pluginSDKNotSet,
LOCATION_TARGETED_SDK, ID_PLUGINS_SDK_NOT_SET );
}
}
}
private void clearMarkers( IProject proj )
{
try
{
if( proj.isOpen() )
{
IMarker[] markers =
proj.findMarkers( ProjectCore.LIFERAY_PROJECT_MARKER_TYPE, true, IResource.DEPTH_INFINITE );
for( IMarker marker : markers )
{
for( String id : getMarkerSourceIds() )
{
if( marker.getAttribute( IMarker.SOURCE_ID ).equals( id ) )
{
marker.delete();
break;
}
}
}
}
}
catch( CoreException e )
{
ProjectCore.logError( e );
}
}
private String[] getMarkerSourceIds()
{
return new String[] { ID_PRIMARY_RUNTIME_NOT_LIFERAY_RUNTIME, ID_PRIMARY_RUNTIME_NOT_SET,
ID_PLUGINS_SDK_NOT_SET };
}
private void setMarker(
IProject proj, String markerType, int markerSeverity, String markerMsg, String markerLocation,
String markerSourceId ) throws CoreException
{
IMarker marker = proj.createMarker( markerType );
marker.setAttribute( IMarker.SEVERITY, markerSeverity );
marker.setAttribute( IMarker.MESSAGE, markerMsg );
marker.setAttribute( IMarker.LOCATION, markerLocation );
marker.setAttribute( IMarker.SOURCE_ID, markerSourceId );
}
private static class Msgs extends NLS
{
public static String primaryRuntimeNotSet;
public static String primaryRuntimeNotLiferayRuntime;
public static String pluginSDKNotSet;
static
{
initializeMessages( PluginsSDKProjectRuntimeValidator.class.getName(), Msgs.class );
}
}
}