/** * author: Marcel Genzmehr * 16.08.2011 */ package org.freeplane.plugin.workspace.creator; import java.util.Hashtable; import org.freeplane.n3.nanoxml.XMLElement; import org.freeplane.plugin.workspace.model.AWorkspaceNodeCreator; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; /** * */ public class LinkCreator extends AWorkspaceNodeCreator { private Hashtable<String, AWorkspaceNodeCreator> creatorTable = new Hashtable<String, AWorkspaceNodeCreator>(); /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ /*********************************************************************************** * METHODS **********************************************************************************/ public void addTypeCreator(final String typeName, final AWorkspaceNodeCreator creator) { if(creatorTable.containsKey(typeName)) { //TODO: maybe later changes to manage multiple creators for the same key creatorTable.remove(typeName); } creatorTable.put(typeName, creator); } public void endElement(final Object parent, final String tag, final Object userObject, final XMLElement lastBuiltElement) { String type = lastBuiltElement.getAttribute("type", null); if(type == null || !creatorTable.containsKey(type)) { return; } AWorkspaceNodeCreator creator = creatorTable.get(type); creator.endElement(parent, tag, userObject, lastBuiltElement); } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public AWorkspaceTreeNode getNode(XMLElement data) { String type = data.getAttribute("type", null); if(type == null || !creatorTable.containsKey(type)) { return null; } AWorkspaceNodeCreator creator = creatorTable.get(type); return creator.getNode(data); } }