/******************************************************************************* * Copyright (c) 2014 Obeo. * 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: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.compare.uml2.rcp.ui.tests.profile; import static com.google.common.base.Predicates.alwaysTrue; import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import java.io.IOException; import java.util.List; import java.util.regex.Pattern; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.compare.postprocessor.BasicPostProcessorDescriptorImpl; import org.eclipse.emf.compare.postprocessor.IPostProcessor; import org.eclipse.emf.compare.postprocessor.PostProcessorDescriptorRegistryImpl; import org.eclipse.emf.compare.provider.spec.CompareItemProviderAdapterFactorySpec; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.StructureMergeViewerFilter; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.CascadingDifferencesFilter; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.TechnicalitiesFilter; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.BasicDifferenceGroupImpl; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.provider.TreeItemProviderAdapterFactorySpec; import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup; import org.eclipse.emf.compare.tests.framework.AbstractInputData; import org.eclipse.emf.compare.uml2.internal.postprocessor.StereotypedElementChangePostProcessor; import org.eclipse.emf.compare.uml2.internal.postprocessor.UMLPostProcessor; import org.eclipse.emf.compare.uml2.internal.provider.custom.UMLCompareCustomItemProviderAdapterFactory; import org.eclipse.emf.compare.uml2.internal.provider.decorator.UMLCompareItemProviderDecoratorAdapterFactory; import org.eclipse.emf.compare.uml2.internal.provider.decorator.UMLProfileItemProviderAdapterFactoryDecorator; import org.eclipse.emf.compare.uml2.internal.provider.profile.ProfiledUMLCompareItemProviderAdapterFactory; import org.eclipse.emf.compare.uml2.profile.test.uml2comparetestprofile.provider.UML2CompareTestProfileItemProviderAdapterFactory; import org.eclipse.emf.compare.uml2.rcp.ui.internal.structuremergeviewer.filters.UMLRefinedElementsFilter; import org.eclipse.emf.compare.uml2.rcp.ui.tests.groups.AbstractDifferenceOrderTest; import org.eclipse.emf.compare.uml2.rcp.ui.tests.groups.NotifierScopeProvider; import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.tree.TreeNode; import org.eclipse.uml2.uml.edit.providers.UMLItemProviderAdapterFactory; import org.junit.Test; /** * Tests the display (label and icon) of UML elements on a model with a static profile applied. * <p> * This test uses the full integration of profiles in EMF Compare. That is to say: * <ul> * <li>The integration of {@link ProfileIntegrationItemProviderAdapterFactory}</li> * <li>The integration of {@link StereotypedElementChangePostProcessor}</li> * </ul> * </p> * * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a> */ public class StaticProfileIntegrationDisplayTest extends AbstractDifferenceOrderTest { @Override protected IPostProcessor.Descriptor.Registry<?> getPostProcessorRegistry() { PostProcessorDescriptorRegistryImpl<Object> postProcessorRegistry = new PostProcessorDescriptorRegistryImpl<Object>(); BasicPostProcessorDescriptorImpl umlPostProcessor = new BasicPostProcessorDescriptorImpl( new UMLPostProcessor(), Pattern.compile("http://www.eclipse.org/uml2/\\d.0.0/UML"), null); //$NON-NLS-1$ postProcessorRegistry.put(UMLPostProcessor.class.getName(), umlPostProcessor); BasicPostProcessorDescriptorImpl stereotypeElementPostProcessor = new BasicPostProcessorDescriptorImpl( new StereotypedElementChangePostProcessor(), Pattern.compile("http://www.eclipse.org/uml2/\\d.0.0/UML"), null); //$NON-NLS-1$ postProcessorRegistry.put(StereotypedElementChangePostProcessor.class.getName(), stereotypeElementPostProcessor); return postProcessorRegistry; } @Override protected List<AdapterFactory> getAdaptersFactory() { // Adds UML2CompareTestProfileItemProviderAdapterFactory item adapter factory to use the custom icon // defined in it. eventBus = new EventBus(); return Lists.<AdapterFactory> newArrayList(new ProfiledUMLCompareItemProviderAdapterFactory(), new UMLProfileItemProviderAdapterFactoryDecorator(), new CompareItemProviderAdapterFactorySpec(), new TreeItemProviderAdapterFactorySpec(new StructureMergeViewerFilter(eventBus)), new UMLCompareCustomItemProviderAdapterFactory(), new UML2CompareTestProfileItemProviderAdapterFactory(), new UMLItemProviderAdapterFactory(), new UMLCompareItemProviderDecoratorAdapterFactory(), new ReflectiveItemProviderAdapterFactory()); } @Override protected NotifierScopeProvider getInput() { return new DataInput(); } @Test public void testStaticProfileDisplay() throws IOException { getFilter().addFilter(new UMLRefinedElementsFilter()); getFilter().addFilter(new TechnicalitiesFilter()); getFilter().addFilter(new CascadingDifferencesFilter()); IDifferenceGroup group = new BasicDifferenceGroupImpl(getComparison(), alwaysTrue(), getCrossReferenceAdapter()); List<? extends TreeNode> roots = group.getChildren(); // Uncomment the following lines to reserialize the expected model // TestWriterHelper writerHelper = createTestHelper(); // writerHelper // .createExpectedModel( // "{$Git_REPO_PATH}/plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/profile/data/static_/expectedResult.nodes", // roots, true); compareTree(new ExpectedResult().getExpectedResult(), roots, true); } /** * Input data for this test. * * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a> */ private static class DataInput extends AbstractUMLInputData implements NotifierScopeProvider { public Resource getLeft() throws IOException { return loadFromClassLoader("data/static_/left.uml");//$NON-NLS-1$ } public Resource getRight() throws IOException { return loadFromClassLoader("data/static_/right.uml");//$NON-NLS-1$ } public Notifier getOrigin() throws IOException { return null; } } /** * Expected result data for this test. * * @author <a href="mailto:arthur.daussy@obeo.fr">Arthur Daussy</a> */ private static class ExpectedResult extends AbstractInputData { public Resource getExpectedResult() throws IOException { return loadFromClassLoader("data/static_/expectedResult.nodes");//$NON-NLS-1$ } } }