/******************************************************************************* * Copyright (c) 2011, 2012 Montages A.G. * 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: * Guillaume Hillairet (Montages A.G.) : initial implementation *******************************************************************************/ package org.eclipse.gmf.internal.bridge.genmodel; import org.eclipse.gmf.codegen.gmfgen.GenChildNode; import org.eclipse.gmf.codegen.gmfgen.GenCompartment; import org.eclipse.gmf.codegen.gmfgen.GenDiagram; import org.eclipse.gmf.codegen.gmfgen.GenLink; import org.eclipse.gmf.codegen.gmfgen.GenLinkLabel; import org.eclipse.gmf.codegen.gmfgen.GenNodeLabel; import org.eclipse.gmf.codegen.gmfgen.GenTopLevelNode; import org.eclipse.gmf.codegen.gmfgen.ToolGroup; import org.eclipse.gmf.internal.bridge.NaiveIdentifierDispenser; import org.eclipse.gmf.internal.bridge.VisualIdentifierDispenser; import org.eclipse.m2m.qvt.oml.blackbox.java.Operation; import org.eclipse.m2m.qvt.oml.blackbox.java.Operation.Kind; /** * {@link VisualIdentifierDispenserFacade} is a QVTO black box providing access to * a {@link VisualIdentifierDispenser}. * */ public class VisualIdentifierDispenserFacade { public VisualIdentifierDispenserFacade() {} @Operation(contextual = true, kind = Kind.QUERY) public int getVisualID(Object self) { VisualIdentifierDispenser dispenser = Provider.getDisenser(); assert dispenser != null; int visualID = -1; if (self instanceof GenDiagram) visualID = dispenser.get((GenDiagram) self); else if (self instanceof GenTopLevelNode) visualID = dispenser.get((GenTopLevelNode) self); else if (self instanceof GenChildNode) visualID = dispenser.get((GenChildNode) self); else if (self instanceof GenCompartment) visualID = dispenser.get((GenCompartment) self); else if (self instanceof GenNodeLabel) visualID = dispenser.get((GenNodeLabel) self); else if (self instanceof GenLink) visualID = dispenser.get((GenLink) self); else if (self instanceof GenLinkLabel) visualID = dispenser.get((GenLinkLabel) self); else if (self instanceof ToolGroup) visualID = dispenser.get((ToolGroup) self); return visualID; } /** * {@link Provider} is a singleton holding the current visual identifier dispenser. */ public static final class Provider { private static VisualIdentifierDispenser dispenser; public static VisualIdentifierDispenser getDisenser() { if (dispenser == null) { dispenser = new NaiveIdentifierDispenser(); } return dispenser; } public static void setDispenser(VisualIdentifierDispenser dispenser) { Provider.dispenser = dispenser; } } }