/* * Copyright (c) 2008, 2010 Borland Software Corporation and others * * 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: * Artem Tikhomirov (Borland) - initial API and implementation */ package org.eclipse.gmf.tooling.tests.xtend.rt; import java.util.LinkedList; import org.eclipse.emf.common.util.EList; import org.eclipse.gef.EditPart; import org.eclipse.gef.RootEditPart; import org.eclipse.gmf.codegen.gmfgen.GenCommonBase; import org.eclipse.gmf.codegen.gmfgen.GenEditorGenerator; import org.eclipse.gmf.codegen.gmfgen.GenLink; import org.eclipse.gmf.codegen.gmfgen.GenNode; import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint; import org.eclipse.gmf.runtime.diagram.core.services.ViewService; import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DecorationEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DecorationEditPolicy.DecoratorTarget; import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.DefaultNodeEditPart; import org.eclipse.gmf.runtime.diagram.ui.internal.services.decorator.DecoratorService; import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorProvider; import org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPartService; import org.eclipse.gmf.runtime.emf.ui.services.modelingassistant.ModelingAssistantService; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.NotationFactory; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.gmf.tests.ConfiguredTestCase; import org.eclipse.gmf.tests.setup.GenProjectSetup; import org.eclipse.gmf.tests.setup.GeneratorConfiguration; import org.eclipse.gmf.tests.setup.SessionSetup; import org.eclipse.gmf.tooling.tests.xtend.setup.RuntimeBasedGeneratorConfigurationXtend; import org.osgi.framework.Bundle; import org.osgi.framework.BundleException; /** * Check meta-information for GMF RT providers prevents bundle from activation * @author artem */ public class BundleActivationTestXtend extends ConfiguredTestCase { private final PreferencesHint prefHint = new PreferencesHint("a.b.c"); public final static class CustomSetup extends SessionSetup { public CustomSetup() { super(new RuntimeBasedGeneratorConfigurationXtend()); } @Override protected GenProjectSetup createGenProject(GeneratorConfiguration generatorConfiguration) throws BundleException { return new GenProjectSetup(generatorConfiguration) { @Override public GenProjectSetup init(GenEditorGenerator genEditor) throws BundleException { try { int vid = 0x10000; LinkedList<GenCommonBase> vidHolders = new LinkedList<GenCommonBase>(); vidHolders.add(genEditor.getDiagram()); vidHolders.addAll(genEditor.getDiagram().getTopLevelNodes()); vidHolders.addAll(genEditor.getDiagram().getChildNodes()); vidHolders.addAll(genEditor.getDiagram().getCompartments()); vidHolders.addAll(genEditor.getDiagram().getLinks()); for (GenNode n : genEditor.getDiagram().getAllNodes()) { vidHolders.addAll(n.getLabels()); } for (GenLink l : genEditor.getDiagram().getLinks()) { vidHolders.addAll(l.getLabels()); } for (GenCommonBase cb : vidHolders) { cb.setVisualID(vid++); } genEditor.getDiagram().getShortcutsProvidedFor().add(genEditor.getModelID()); generateAndCompile(genEditor); getBundle().start(Bundle.START_TRANSIENT | Bundle.START_ACTIVATION_POLICY); } catch (Exception ex) { throw new RuntimeException(ex); } // !!! do not start bundle nor register it's extensions return this; } }.init(getGenModel()); } }; public BundleActivationTestXtend(String name) { super(name); } private boolean isBundleStarted() throws Exception { return getSetup().getGeneratedPlugin().getState() == Bundle.ACTIVE; } private void assertBundleNotStarted(String msg) throws Exception { assertFalse(msg, isBundleStarted()); } public void testViewService() throws Exception { if (!isBundleStarted()) { assertBundleNotStarted("[sanity]"); Diagram d = NotationFactory.eINSTANCE.createDiagram(); ViewService.createNode(d, "a-hint", prefHint); final String msg = "View creation should not trigger generated ViewProvider and plugin activation"; assertBundleNotStarted(msg); Node n = NotationFactory.eINSTANCE.createNode(); @SuppressWarnings("unchecked") EList<View> children = d.getTransientChildren(); children.add(n); ViewService.createEdge(d, n, "b-hint", prefHint); assertBundleNotStarted(msg); } } public void testEditPartService() throws Exception { if (!isBundleStarted()) { assertBundleNotStarted("[sanity]"); Diagram d = NotationFactory.eINSTANCE.createDiagram(); RootEditPart p = EditPartService.getInstance().createRootEditPart(d); assertNotNull(p); assertBundleNotStarted("RootEditPart"); Node n = NotationFactory.eINSTANCE.createNode(); EditPart ep = EditPartService.getInstance().createGraphicEditPart(n); assertNotNull(ep); assertBundleNotStarted("Regular EditPart"); } } /** * There are two possible extensions for decoratorProviders extp: shortcut icon and validation markers */ public void testDecoratorService() throws Exception { if (!isBundleStarted()) { assertTrue("[sanity]", getSetup().getGenModel().getGenDiagram().generateShortcutIcon()); assertBundleNotStarted("[sanity]"); DecorationEditPolicy decorationEditPolicy = new DecorationEditPolicy(); decorationEditPolicy.setHost(new ShapeEditPart(null) { }); DecoratorTarget dt = decorationEditPolicy.new DecoratorTarget(); IDecoratorProvider dp = DecoratorService.getInstance(); dp.createDecorators(dt); assertBundleNotStarted("DecoratorService"); } } public void testModelAssistantService() throws Exception { if (!isBundleStarted()) { assertBundleNotStarted("[sanity]"); EditPart ep = new DefaultNodeEditPart(NotationFactory.eINSTANCE.createNode()); ModelingAssistantService.getInstance().getTypesForPopupBar(ep); assertBundleNotStarted("ModelAssistantService#getTypesForPopupBar(EditPart)"); } } }