/*******************************************************************************
* 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.ui.wizard;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.core.util.StringPool;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.project.ui.action.NewPluginProjectDropDownAction;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
/**
* @author Cindy Li
* @author Kuo Zhang
*/
public class ValidProjectChecker
{
private static final String ATT_ID = "id"; //$NON-NLS-1$
private static final String ATT_NAME = "name"; //$NON-NLS-1$
private static final String ATT_VALID_PROJECT_TYPES = "validProjectTypes"; //$NON-NLS-1$
private static final String TAG_NEW_WIZARDS = "newWizards"; //$NON-NLS-1$
private static final String TAG_PARAMETER = "parameter"; //$NON-NLS-1$
private static final String TAG_VALUE = "value"; //$NON-NLS-1$
private static final String TAG_WIZARD = "wizard"; //$NON-NLS-1$
protected boolean isJsfPortlet = false;
protected String validProjectTypes = null;
protected String wizardId = null;
protected String wizardName = null;
public ValidProjectChecker( String wizardId )
{
this.wizardId = wizardId;
init();
}
public void checkValidProjectTypes()
{
IProject[] projects = CoreUtil.getAllProjects();
boolean hasValidProjectTypes = false;
boolean hasJsfFacet = false;
for( IProject project : projects )
{
if( ProjectUtil.isLiferayFacetedProject( project ) )
{
Set<IProjectFacetVersion> facets = ProjectUtil.getFacetedProject( project ).getProjectFacets();
if( validProjectTypes != null && facets != null )
{
String[] validTypes = validProjectTypes.split( StringPool.COMMA );
for( String validProjectType : validTypes )
{
for( IProjectFacetVersion facet : facets )
{
String id = facet.getProjectFacet().getId();
if( isJsfPortlet && id.equals( "jst.jsf" ) ) //$NON-NLS-1$
{
hasJsfFacet = true;
}
if( id.startsWith( "liferay." ) && id.equals( "liferay." + validProjectType ) ) //$NON-NLS-1$ //$NON-NLS-2$
{
hasValidProjectTypes = true;
}
}
}
}
}
}
if( isJsfPortlet )
{
hasValidProjectTypes = hasJsfFacet && hasValidProjectTypes;
}
if( ! hasValidProjectTypes )
{
final Shell activeShell = Display.getDefault().getActiveShell();
Boolean openNewLiferayProjectWizard =
MessageDialog.openQuestion( activeShell, NLS.bind( Msgs.newElement, wizardName ),
NLS.bind( Msgs.noSuitableLiferayProjects, wizardName ) );
if( openNewLiferayProjectWizard )
{
final Action defaultAction = NewPluginProjectDropDownAction.getPluginProjectAction();
if( defaultAction != null )
{
defaultAction.run();
this.checkValidProjectTypes();
}
}
}
}
private String getValidProjectTypesFromConfig( IConfigurationElement config )
{
IConfigurationElement[] classElements = config.getChildren();
if( classElements.length > 0 )
{
for( IConfigurationElement classElement : classElements )
{
IConfigurationElement[] paramElements = classElement.getChildren( TAG_PARAMETER );
for( IConfigurationElement paramElement : paramElements )
{
if( ATT_VALID_PROJECT_TYPES.equals( paramElement.getAttribute( ATT_NAME ) ) )
{
return paramElement.getAttribute( TAG_VALUE );
}
}
}
}
return null;
}
protected void init()
{
if( wizardId != null && wizardId.equals( "com.liferay.ide.eclipse.portlet.jsf.ui.wizard.portlet" ) ) //$NON-NLS-1$
{
setJsfPortlet( true );
}
IExtensionPoint extensionPoint =
Platform.getExtensionRegistry().getExtensionPoint( PlatformUI.PLUGIN_ID, TAG_NEW_WIZARDS );
if( extensionPoint != null )
{
IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
for( IConfigurationElement element : elements )
{
if( element.getName().equals( TAG_WIZARD ) && element.getAttribute( ATT_ID ).equals( wizardId ) )
{
// getValidProjectTypesFromConfig( element )!=null && isLiferayArtifactWizard(element,
// "liferay_artifact")
setValidProjectTypes( getValidProjectTypesFromConfig( element ) );
wizardName = element.getAttribute( ATT_NAME );
break;
}
}
}
}
public void setJsfPortlet( boolean isJsfPortlet )
{
this.isJsfPortlet = isJsfPortlet;
}
public void setValidProjectTypes( String validProjectTypes )
{
this.validProjectTypes = validProjectTypes;
}
private static class Msgs extends NLS
{
public static String newElement;
public static String noSuitableLiferayProjects;
static
{
initializeMessages( ValidProjectChecker.class.getName(), Msgs.class );
}
}
}