/***************************************************************************** * Copyright (c) 2009 CEA LIST. * * 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: * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.customization.palette.proxies; import java.util.HashMap; import java.util.Map; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.papyrus.customization.palette.dialog.PaletteAspectToolEntryProxy; import org.eclipse.papyrus.customization.palette.dialog.PaletteContainerProxy; import org.eclipse.papyrus.customization.palette.dialog.PaletteEntryProxy; import org.eclipse.papyrus.customization.palette.dialog.PaletteLocalDrawerProxy; import org.eclipse.papyrus.customization.palette.dialog.PaletteLocalSeparatorProxy; import org.eclipse.papyrus.customization.palette.dialog.PaletteLocalStackProxy; import org.eclipse.papyrus.uml.diagram.common.Activator; import org.eclipse.papyrus.uml.diagram.common.service.AbstractXMLDefinitionPaletteFactory; import org.eclipse.papyrus.uml.diagram.common.service.AspectCreationEntry; import org.eclipse.papyrus.uml.diagram.common.service.IPapyrusPaletteConstant; import org.eclipse.papyrus.uml.diagram.common.service.palette.IPaletteEntryProxy; import org.w3c.dom.Node; /** * Implementation that creates proxies used by the palette previewer in the customiza dialog */ public class XMLDefinitionPaletteProxyFactory extends AbstractXMLDefinitionPaletteFactory implements IPapyrusPaletteConstant { /** map of predefined entries */ protected final Map<String, PaletteEntry> predefinedEntries; /** root proxy */ protected PaletteContainerProxy containerProxy; /** registry of created nodes */ protected final Map<Node, IPaletteEntryProxy> registry; /** * Creates a new XMLDefinitionPaletteFactory * * @param root * the palette root to fill * @param predefinedEntries * existing predefined entries */ public XMLDefinitionPaletteProxyFactory(Map<String, PaletteEntry> predefinedEntries) { this.predefinedEntries = predefinedEntries; registry = new HashMap<Node, IPaletteEntryProxy>(); } /** * {@inheritDoc} */ @Override public void traverseContentNode(Node node) { containerProxy = new PaletteContainerProxy(null); registry.put(node, containerProxy); } /** * {@inheritDoc} */ @Override public void traverseDrawerNode(Node node) { String id = node.getAttributes().getNamedItem(ID).getNodeValue(); PaletteEntry entry = predefinedEntries.get(id); PaletteContainerProxy proxy; Node descriptionNode = node.getAttributes().getNamedItem(DESCRIPTION); proxy = new PaletteLocalDrawerProxy(node.getAttributes().getNamedItem(NAME).getNodeValue(), node.getAttributes().getNamedItem(ID).getNodeValue(), node.getAttributes().getNamedItem(ICON_PATH).getNodeValue(), (descriptionNode != null) ? descriptionNode.getNodeValue() : ""); getParentProxy(node).addChild(proxy); registry.put(node, proxy); } /** * Returns the parent proxy for the given node * * @param node * the node for which the parent is searched * @return the parent of this node */ protected PaletteContainerProxy getParentProxy(Node node) { return (PaletteContainerProxy)registry.get(node.getParentNode()); } /** * {@inheritDoc} */ @Override public void traverseSeparatorNode(Node node) { String id = node.getAttributes().getNamedItem(ID).getNodeValue(); PaletteLocalSeparatorProxy proxy = new PaletteLocalSeparatorProxy(id); getParentProxy(node).addChild(proxy); registry.put(node, proxy); } /** * {@inheritDoc} */ @Override public void traverseStackNode(Node node) { String id = node.getAttributes().getNamedItem(ID).getNodeValue(); PaletteLocalStackProxy proxy = new PaletteLocalStackProxy(id); getParentProxy(node).addChild(proxy); registry.put(node, proxy); } /** * {@inheritDoc} */ @Override public void traverseToolEntryNode(Node node) { String id = node.getAttributes().getNamedItem(ID).getNodeValue(); PaletteEntry entry = predefinedEntries.get(id); PaletteEntryProxy proxy = new PaletteEntryProxy(entry); getParentProxy(node).addChild(proxy); registry.put(node, proxy); } /** * {@inheritDoc} */ @Override public void traverseAspectToolEntryNode(Node node) { String id = node.getAttributes().getNamedItem(ID).getNodeValue(); PaletteEntry entry = predefinedEntries.get(id); if(entry instanceof AspectCreationEntry) { PaletteAspectToolEntryProxy proxy = new PaletteAspectToolEntryProxy((AspectCreationEntry)entry); getParentProxy(node).addChild(proxy); registry.put(node, proxy); } else { Activator.log.error("impossible to log class " + id, null); } } /** * Returns the root proxy for the created element * * @return the container proxy */ public PaletteContainerProxy getRootProxy() { return containerProxy; } }