Java tutorial
/******************************************************************************* * 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); } } }