/*******************************************************************************
* Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
* de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) – Initial implementation.
*
******************************************************************************/
package org.eclipse.papyrus.uml.diagram.common.providers.assistant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.Platform;
import org.eclipse.gef.EditPart;
import org.eclipse.papyrus.uml.diagram.common.util.ExtensionPointParser;
/**
* Registry that stores modeling assistants for editors. Created for the
* 'es.cv.gvcase.mdt.common.editorAssistantProvider' extension point.
*
* @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
*
*/
public class ModelingAssistantRegistry {
// Singleton registry
private static final ModelingAssistantRegistry Instance = new ModelingAssistantRegistry();
private ModelingAssistantRegistry() {
}
/**
* Singleton instance.
*
* @return
*/
// @unused
public static ModelingAssistantRegistry getInstance() {
return Instance;
}
// assistant extension point
private static final String modelingAssistantExtensionPointID = "org.eclipse.papyrus.uml.diagram.common.editorAssistantProvider";
private static final Class<Object>[] classes = new Class[]{ Assistant.class, AssistedEditPart.class, Include.class, Exclude.class, ElementType.class };
private static final Map<String, List<Assistant>> mapEditorID2Assistant = new HashMap<String, List<Assistant>>();
/**
* Retrieves from the registry an assistant for the given editor.
*
* @param editorID
* @return
*/
public List<Assistant> getAssistantForEditor(String editorID) {
if(getMapEditorID2Assistant().containsKey(editorID)) {
return getMapEditorID2Assistant().get(editorID);
}
return Collections.emptyList();
}
/**
* The registry of editors to assistants.
*
* @return
*/
public Map<String, List<Assistant>> getMapEditorID2Assistant() {
mapEditorID2Assistant.clear();
ExtensionPointParser parser = new ExtensionPointParser(modelingAssistantExtensionPointID, classes);
List<Object> extensions = parser.parseExtensionPoint();
for(Object object : extensions) {
Assistant assistant = (Assistant)Platform.getAdapterManager().getAdapter(object, Assistant.class);
if(assistant != null && assistant.editorID != null) {
if(!mapEditorID2Assistant.containsKey(assistant.editorID)) {
mapEditorID2Assistant.put(assistant.editorID, new ArrayList<Assistant>());
}
mapEditorID2Assistant.get(assistant.editorID).add(assistant);
}
}
return mapEditorID2Assistant;
}
// Types for an EditPart customization
/**
* Customizes the list of types for an edit part according to the
* extensions.
*
* @param editorID
* @param editPart
* @param types
* @return
*/
// @unused
public List customizeTypesForEditPart(String editorID, EditPart editPart, List types) {
for(Assistant assistant : getAssistantForEditor(editorID)) {
if(assistant != null) {
types = assistant.customizeTypesForEditPart(editPart, types);
}
}
return types;
}
}