/*************************************************************************************
* Copyright (c) 2014 Red Hat, Inc. 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:
* JBoss by Red Hat - Initial implementation.
************************************************************************************/
package org.jboss.tools.runtime.ui;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.jboss.tools.foundation.ui.xpl.taskwizard.WizardFragment;
import org.jboss.tools.runtime.core.model.DownloadRuntime;
import org.jboss.tools.runtime.ui.wizard.IWorkflowProvider;
/**
* Loads all extensions declared by this plugin
*/
public class RuntimeUIExtensionManager {
private static HashMap<String, IWorkflowProvider> providerMap = null;
public static WizardFragment[] createFragmentsForRuntime(DownloadRuntime dr) {
ensureLoaded();
ArrayList<WizardFragment> toReturn = new ArrayList<WizardFragment>();
Set<String> keys = providerMap.keySet();
Iterator<String> keyIt = keys.iterator();
while(keyIt.hasNext()) {
IWorkflowProvider p = providerMap.get(keyIt.next());
if( p.canProvideWorkflow(dr)) {
WizardFragment[] fragList = p.createFragmentsForRuntime(dr);
if( fragList != null )
toReturn.addAll(Arrays.asList(fragList));
}
}
return (WizardFragment[]) toReturn.toArray(new WizardFragment[toReturn.size()]);
}
/*
* Load the extension point
*/
private static void ensureLoaded() {
if( providerMap != null )
return;
providerMap = new HashMap<String, IWorkflowProvider>();
IExtensionRegistry registry = Platform.getExtensionRegistry();
IConfigurationElement[] cf = registry.getConfigurationElementsFor(RuntimeUIActivator.PLUGIN_ID, "workflowProvider"); //$NON-NLS-1$
for( int i = 0; i < cf.length; i++ ) {
try {
String id = cf[i].getAttribute("id");
Object o = cf[i].createExecutableExtension("class");
providerMap.put(id, (IWorkflowProvider)o);
} catch(CoreException ce) {
RuntimeUIActivator.getDefault().getLog().log(ce.getStatus());
}
}
}
}