package LinGUIne.model;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import LinGUIne.extensions.IVisualization;
/**
* Container for all visualization plugins currently loaded in order to easily
* provide information about them to other parts of the application.
*
* @author Peter Dimou
*/
public class VisualizationPluginManager {
HashMap<IVisualization, String> visualizations;
/**
* Creates a new instance and populates it using the ExtensionRegistry.
* Builds the internal list of visualizations from the extension point
* schema definition.
*/
public VisualizationPluginManager() {
visualizations = new HashMap<IVisualization, String>();
IConfigurationElement[] visualizationElements = Platform
.getExtensionRegistry().getConfigurationElementsFor(
"LinGUIne.LinGUIne.extensions.IVisualization");
// Iterate over the visualizations
for (IConfigurationElement visualizationElement : visualizationElements) {
try {
IVisualization visualization = (IVisualization) visualizationElement
.createExecutableExtension("class");
String description = visualizationElement
.getAttribute("description");
visualizations.put(visualization, description);
} catch (CoreException e) {
// TODO: Error handling
e.printStackTrace();
}
}
}
/**
* Returns all visualizations currently loaded.
*
* @return A collection visualizations currently loaded into the
* application.
*/
public Collection<IVisualization> getVisualizations() {
return visualizations.keySet();
}
/**
* Returns all of the visualizations (by name) currently loaded into the
* application.
*
* @return The list of visualizations as a collection of strings.
*/
public Collection<String> getVisualizationNames() {
Collection<String> retVal = new LinkedList<String>();
for (IVisualization visualization : visualizations.keySet()) {
retVal.add(visualization.getName());
}
return retVal;
}
/**
* Returns a list of visualizations that support a given result type set.
* Duplicate result types are allowed and encouraged to further add
* specificity to the visualization requirements.
*
* @param resultTypeSet
* The result types to query the visualizations for.
* @return A collection of visualizations that support the given result
* type.
*/
public Collection<IVisualization> getVisualizationsBySupportedResultTypeSet(
Collection<Class<? extends Result>> resultTypeSet) {
Collection<IVisualization> retVal = new LinkedList<IVisualization>();
for (IVisualization visualization : visualizations.keySet()) {
Collection<Class<? extends Result>> supportedTypes = visualization
.getSupportedResultTypes();
boolean isSupported = supportedTypes.containsAll(resultTypeSet)
&& resultTypeSet.containsAll(supportedTypes);
if (isSupported) {
retVal.add(visualization);
}
}
return retVal;
}
/**
* Returns the visualization based on the name provided. If the
* visualization isn't found then null is returned.
*
* @param name
* The name of the visualization.
* @return The visualization requested by name.
*/
public IVisualization getVisualizationByName(String name) {
for (IVisualization visualization : visualizations.keySet()) {
if (visualization.getName().equals(name)) {
return visualization;
}
}
return null;
}
/**
* Returns the description of a visualization (as specified in the extension
* point schema definition) by the visualization's name. If the name is
* incorrect, null is returned.
*
* @param name
* The name of the visualization.
* @return The description of the visualization as specified in the
* extension point schema definition.
*/
public String getVisualizationDescriptionByName(String name) {
for (IVisualization visualization : visualizations.keySet()) {
if (visualization.getName().equals(name)) {
return visualizations.get(visualization);
}
}
return null;
}
}