/** * <copyright> * * Copyright (c) 2006, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM - Initial API and implementation * * </copyright> * * $Id: ExampleInstallerWizard.java,v 1.4 2006/12/28 06:42:02 marcelop Exp $ */ package net.enilink.komma.common.ui.rcp.wizards; import java.util.ArrayList; import java.util.List; import net.enilink.komma.common.ui.CommonUIPlugin; import net.enilink.komma.core.URI; import net.enilink.komma.core.URIs; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExecutableExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.osgi.framework.Bundle; /** * <p> * Default implementation of {@link AbstractExampleInstallerWizard} which can be * declared directly in the plugin.xml using the * <tt>org.eclipse.ui.newWizards</tt> and * <tt>org.eclipse.emf.common.ui.examples</tt> extension points. * </p> * * <p> * When declaring this wizard, it is necessary to define a unique id for it. * </p> * * @since 2.2.0 */ public class ExampleInstallerWizard extends AbstractExampleInstallerWizard implements IExecutableExtension { protected IConfigurationElement wizardConfigurationElement; protected List<ProjectDescriptor> projectDescriptors; protected List<FileToOpen> filesToOpen; public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { wizardConfigurationElement = config; } @Override protected List<ProjectDescriptor> getProjectDescriptors() { if (projectDescriptors == null) { loadFromExtensionPoints(); } return projectDescriptors; } @Override protected List<FileToOpen> getFilesToOpen() { if (filesToOpen == null) { loadFromExtensionPoints(); } return filesToOpen; } protected void loadFromExtensionPoints() { projectDescriptors = new ArrayList<ProjectDescriptor>(); filesToOpen = new ArrayList<FileToOpen>(); String wizardID = wizardConfigurationElement.getAttribute("id"); IExtensionPoint extensionPoint = Platform.getExtensionRegistry() .getExtensionPoint(CommonUIPlugin.INSTANCE.getSymbolicName(), "examples"); IConfigurationElement[] exampleElements = extensionPoint .getConfigurationElements(); for (int i = 0; i < exampleElements.length; i++) { IConfigurationElement exampleElement = exampleElements[i]; if ("example".equals(exampleElement.getName()) && wizardID.equals(exampleElement.getAttribute("wizardID"))) { IConfigurationElement[] projectDescriptorElements = exampleElement .getChildren("projectDescriptor"); for (int j = 0; j < projectDescriptorElements.length; j++) { IConfigurationElement projectDescriptorElement = projectDescriptorElements[j]; String projectName = projectDescriptorElement .getAttribute("name"); if (projectName != null) { String contentURI = projectDescriptorElement .getAttribute("contentURI"); if (contentURI != null) { AbstractExampleInstallerWizard.ProjectDescriptor projectDescriptor = new AbstractExampleInstallerWizard.ProjectDescriptor(); projectDescriptor.setName(projectName); URI uri = URIs.createURI(contentURI); if (uri.isRelative()) { uri = URIs.createPlatformPluginURI( projectDescriptorElement .getContributor().getName() + "/" + contentURI, true); } projectDescriptor.setContentURI(uri); projectDescriptor .setDescription(projectDescriptorElement .getAttribute("description")); projectDescriptors.add(projectDescriptor); } } } if (!projectDescriptors.isEmpty()) { IConfigurationElement[] openElements = exampleElement .getChildren("fileToOpen"); for (int j = 0; j < openElements.length; j++) { IConfigurationElement openElement = openElements[j]; String location = openElement.getAttribute("location"); if (location != null) { AbstractExampleInstallerWizard.FileToOpen fileToOpen = new AbstractExampleInstallerWizard.FileToOpen(); fileToOpen.setLocation(location); fileToOpen.setEditorID(openElement .getAttribute("editorID")); filesToOpen.add(fileToOpen); } } String imagePath = exampleElement.getAttribute("pageImage"); if (imagePath != null) { imagePath = imagePath.replace('\\', '/'); if (!imagePath.startsWith("/")) { imagePath = "/" + imagePath; } Bundle pluginBundle = Platform.getBundle(exampleElement .getDeclaringExtension().getContributor() .getName()); try { ImageDescriptor imageDescriptor = ImageDescriptor .createFromURL(pluginBundle .getEntry(imagePath)); setDefaultPageImageDescriptor(imageDescriptor); } catch (Exception e) { // Ignore } } // Only one example per wizard break; } } } } }