/******************************************************************************* * 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.action; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.ui.LiferayUIPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jdt.internal.ui.util.CoreUtility; import org.eclipse.jface.action.Action; import org.eclipse.jface.layout.PixelConverter; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; /** * @author Greg Amerson * @author Cindy Li * @author Kuo Zhang */ @SuppressWarnings( "restriction" ) public class NewWizardAction extends Action implements Comparable { public final static String ATT_CLASS = "class";//$NON-NLS-1$ public final static String ATT_ICON = "icon";//$NON-NLS-1$ public final static String ATT_MENUINDEX = "menuIndex";//$NON-NLS-1$ public final static String ATT_ID = "id";//$NON-NLS-1$ public final static String ATT_NAME = "name";//$NON-NLS-1$ public final static String ATT_PROJECTTYPE = "project_type"; //$NON-NLS-1$ public final static String TAG_CLASS = "class"; //$NON-NLS-1$ public final static String TAG_DESCRIPTION = "description"; //$NON-NLS-1$ public final static String TAG_NAME = "name";//$NON-NLS-1$ public final static String TAG_PARAMETER = "parameter";//$NON-NLS-1$ public final static String TAG_VALUE = "value";//$NON-NLS-1$ public final static String ATT_VALID_PROJECT_TYPES = "validProjectTypes"; //$NON-NLS-1$ protected IConfigurationElement fConfigurationElement; protected IStructuredSelection fSelection; protected Shell fShell; protected int menuIndex; protected String projectType = null; public NewWizardAction( IConfigurationElement element ) { fConfigurationElement = element; String description = getDescriptionFromConfig( fConfigurationElement ); setText( NLS.bind( Msgs.newAction, element.getAttribute( ATT_NAME ) ) ); setDescription( description ); setToolTipText( description ); setImageDescriptor( getIconFromConfig( fConfigurationElement ) ); setMenuIndex( getMenuIndexFromConfig( fConfigurationElement ) ); setId( element.getAttribute( ATT_ID ) ); } public int compareTo( Object o ) { NewWizardAction action = (NewWizardAction) o; return getMenuIndex() - action.getMenuIndex(); } public int getMenuIndex() { return menuIndex; } public String getProjectType() { return projectType; } public void run() { Shell shell = getShell(); try { INewWizard wizard = createWizard(); wizard.init( PlatformUI.getWorkbench(), getSelection() ); WizardDialog dialog = new WizardDialog( shell, wizard ); PixelConverter converter = new PixelConverter( JFaceResources.getDialogFont() ); dialog.setMinimumPageSize( converter.convertWidthInCharsToPixels( 70 ), converter.convertHeightInCharsToPixels( 20 ) ); dialog.create(); int res = dialog.open(); notifyResult( res == Window.OK ); } catch( CoreException e ) { } } public void setMenuIndex( int menuIndex ) { this.menuIndex = menuIndex; } public void setProjectType( String projectType ) { this.projectType = projectType; } public void setShell( Shell shell ) { fShell = shell; } private IStructuredSelection evaluateCurrentSelection() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if( window != null ) { ISelection selection = window.getSelectionService().getSelection(); if( selection instanceof IStructuredSelection ) { return (IStructuredSelection) selection; } } return StructuredSelection.EMPTY; } private String getDescriptionFromConfig( IConfigurationElement config ) { IConfigurationElement[] children = config.getChildren( TAG_DESCRIPTION ); if( children.length >= 1 ) { return children[0].getValue(); } return StringPool.EMPTY; } private ImageDescriptor getIconFromConfig( IConfigurationElement config ) { String iconName = config.getAttribute( ATT_ICON ); if( iconName != null ) { return LiferayUIPlugin.imageDescriptorFromPlugin( config.getContributor().getName(), iconName ); } return null; } private int getMenuIndexFromConfig( IConfigurationElement config ) { IConfigurationElement[] classElements = config.getChildren( TAG_CLASS ); if( classElements.length > 0 ) { for( IConfigurationElement classElement : classElements ) { IConfigurationElement[] paramElements = classElement.getChildren( TAG_PARAMETER ); for( IConfigurationElement paramElement : paramElements ) { if( ATT_MENUINDEX.equals( paramElement.getAttribute( TAG_NAME ) ) ) { return Integer.parseInt( paramElement.getAttribute( TAG_VALUE ) ); } } } } return Integer.MAX_VALUE; } private String getProjectTypeFromConfig( IConfigurationElement config ) { IConfigurationElement[] classElements = config.getChildren( TAG_CLASS ); if( classElements.length > 0 ) { for( IConfigurationElement classElement : classElements ) { IConfigurationElement[] paramElements = classElement.getChildren( TAG_PARAMETER ); for( IConfigurationElement paramElement : paramElements ) { if( ATT_PROJECTTYPE.equals( paramElement.getAttribute( TAG_NAME ) ) ) { return paramElement.getAttribute( TAG_VALUE ); } } } } return null; } protected INewWizard createWizard() throws CoreException { return (INewWizard) CoreUtility.createExtension( fConfigurationElement, ATT_CLASS ); } protected IStructuredSelection getSelection() { if( fSelection == null ) { return evaluateCurrentSelection(); } return fSelection; } protected Shell getShell() { if( fShell == null ) { return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); } return fShell; } private static class Msgs extends NLS { public static String newAction; static { initializeMessages( NewWizardAction.class.getName(), Msgs.class ); } } }