blob: 669c4f3a37716be3d432d872fbf4092da7e35e0a [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 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 Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.publishing.ui.internal.wizards;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.epf.publishing.services.PublishManager;
import org.eclipse.epf.publishing.ui.PublishingUIPlugin;
import org.eclipse.epf.publishing.ui.wizards.IPublishConfigWizardExtender;
import org.eclipse.epf.ui.wizards.NewWizardPageContribution;
import org.eclipse.epf.ui.wizards.ReplaceWizardPageContribution;
import org.eclipse.jface.wizard.IWizardPage;
/**
* Manages the "org.eclipse.epf.publishing.ui.publishConfigWizard" extension
* point.
*
* @author Kelvin Low
* @since 1.0
*/
public class PublishConfigWizardExtensionManager {
/**
* The extension point namespace.
*/
public static final String EXTENSION_POINT_NAMESPACE = "org.eclipse.epf.publishing.ui"; //$NON-NLS-1$
/**
* The extension point name.
*/
public static final String EXTENSION_POINT_NAME = "publishConfigWizard"; //$NON-NLS-1$
// The shared instance.
private static PublishConfigWizardExtensionManager instance = new PublishConfigWizardExtensionManager();
// An extender of the Publish Method Configuration wizard.
private IPublishConfigWizardExtender wizardExtender;
/**
* Creates a new instance.
*/
private PublishConfigWizardExtensionManager() {
processExtensionPoint();
}
/**
* Returns the shared instance.
*
* @return the shared instance
*/
public static PublishConfigWizardExtensionManager getInstance() {
return instance;
}
/**
* Processes the "org.eclipse.epf.publishing.ui.publishConfigWizard"
* extension point.
*/
protected void processExtensionPoint() {
IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
IExtensionPoint extensionPoint = extensionRegistry.getExtensionPoint(
EXTENSION_POINT_NAMESPACE, EXTENSION_POINT_NAME);
if (extensionPoint != null) {
IExtension[] extensions = extensionPoint.getExtensions();
for (int i = 0; i < extensions.length; i++) {
IExtension extension = extensions[i];
IConfigurationElement[] configElements = extension
.getConfigurationElements();
for (int j = 0; j < configElements.length; j++) {
IConfigurationElement configElement = configElements[j];
try {
IPublishConfigWizardExtender extender = (IPublishConfigWizardExtender) configElement
.createExecutableExtension("class"); //$NON-NLS-1$
if (wizardExtender == null) {
wizardExtender = extender;
IConfigurationElement[] childConfigElements = configElement
.getChildren("wizardPage"); //$NON-NLS-1$
for (int k = 0; k < childConfigElements.length; k++) {
IConfigurationElement childConfigElement = childConfigElements[k];
IWizardPage wizardPage = (IWizardPage) childConfigElement
.createExecutableExtension("class"); //$NON-NLS-1$
String type = childConfigElement
.getAttribute("type"); //$NON-NLS-1$
String target = childConfigElement
.getAttribute("target"); //$NON-NLS-1$
String insert = childConfigElement
.getAttribute("insert"); //$NON-NLS-1$
if (wizardPage != null && type != null
&& type.length() > 0) {
if (type.equals("replace")) { //$NON-NLS-1$
wizardExtender
.addReplaceWizardPageContribution(new ReplaceWizardPageContribution(
wizardPage, target));
} else if (type.equals("new")) { //$NON-NLS-1$
boolean insertAfter = true;
if (insert != null
&& insert.equals("before")) { //$NON-NLS-1$
insertAfter = false;
}
wizardExtender
.addNewWizardPageContribution(new NewWizardPageContribution(
wizardPage, target,
insertAfter));
}
}
}
childConfigElements = configElement
.getChildren("publisher"); //$NON-NLS-1$
if (childConfigElements.length > 0) {
IConfigurationElement childConfigElement = childConfigElements[0];
PublishManager publisher = (PublishManager) childConfigElement
.createExecutableExtension("class"); //$NON-NLS-1$
wizardExtender.setPublisher(publisher);
}
return;
}
} catch (Exception e) {
PublishingUIPlugin.getDefault().getLogger().logError(e);
}
}
}
}
}
/**
* Gets the Publish Method Configuration wizard extender loaded via the
* "org.eclipse.epf.publishing.ui.publishConfigWizard" extension point.
*
* @return an Export MSP wizard extender or <code>null</code>
*/
public IPublishConfigWizardExtender getWizardExtender() {
return wizardExtender;
}
}