/**
* Copyright (c) 2006 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
*/
package org.eclipse.emf.common.ui.wizard;
import java.util.ArrayList;
import java.util.List;
import org.osgi.framework.Bundle;
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.eclipse.emf.common.ui.CommonUIPlugin;
import org.eclipse.emf.common.util.URI;
/**
* <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 = URI.createURI(contentURI);
if (uri.isRelative())
{
uri = URI.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;
}
}
}
}
}