package com.liferay.ide.project.ui.action; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.project.core.util.ProjectUtil; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Shell; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; public class NewElementWizardAction extends NewWizardAction { protected String validProjectTypes = null; public NewElementWizardAction( IConfigurationElement element ) { super( element ); setValidProjectTypes(getValidProjectTypesFromConfig(fConfigurationElement)); } public String getValidProjectTypes() { return validProjectTypes; } 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(TAG_NAME))) { return paramElement.getAttribute(TAG_VALUE); } } } } return null; } public void run() { IProject[] projects = CoreUtil.getAllProjects(); boolean hasValidProjectTypes = 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(id.startsWith( "liferay." ) && id.equals( "liferay." + validProjectType )) { //$NON-NLS-1$//$NON-NLS-2$ hasValidProjectTypes = true; break; } } } } } } if(hasValidProjectTypes) { super.run(); } else { Shell shell = getShell(); Boolean openNewLiferayProjectWizard = MessageDialog.openQuestion( shell, Msgs.newElement, Msgs.noSuitableLiferayProjects ); if(openNewLiferayProjectWizard) { Action[] actions = NewPluginProjectDropDownAction.getNewProjectActions(); if (actions.length > 0) { actions[0].run(); this.run(); } } } } public void setValidProjectTypes(String validProjectTypes) { this.validProjectTypes = validProjectTypes; } private static class Msgs extends NLS { public static String newElement; public static String noSuitableLiferayProjects; static { initializeMessages( NewElementWizardAction.class.getName(), Msgs.class ); } } }