diff options
| author | cbrun | 2015-10-05 09:05:00 +0000 |
|---|---|---|
| committer | Cedric Brun | 2015-10-06 15:26:50 +0000 |
| commit | d727426be4cf852efe745f37f0d108979ae9a0c6 (patch) | |
| tree | dd9e94e507ec3ab750b440c5248428f519de1952 | |
| parent | 040b81f3df11343dd3c8cf8c5a339496ac4ec8d3 (diff) | |
| download | org.eclipse.sirius-d727426be4cf852efe745f37f0d108979ae9a0c6.tar.gz org.eclipse.sirius-d727426be4cf852efe745f37f0d108979ae9a0c6.tar.xz org.eclipse.sirius-d727426be4cf852efe745f37f0d108979ae9a0c6.zip | |
[479019] Introduce and use a MetamodelDescriptorProvider2 API
This API extends the original MetamodelDescriptorProvider API so that
it can be called even when no Viewpoint is enabled. This allow
implementers to declare accessible metamodels in a systematic way and is
used by Sirius itself so that the Ecore models capturing representation
data are known by the interpreters even if no Viewpoint has been
selected.
Bug: 479019
Change-Id: I6243f43470522c3e1f6496bde4ac63c9a890e0ff
Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
12 files changed, 142 insertions, 36 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/metamodel/SequenceDiagramMetamodelsProvider.java b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/metamodel/SequenceDiagramMetamodelsProvider.java index fb54ebd849..81ea9b94ac 100644 --- a/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/metamodel/SequenceDiagramMetamodelsProvider.java +++ b/plugins/org.eclipse.sirius.diagram.sequence/src/org/eclipse/sirius/diagram/sequence/business/internal/metamodel/SequenceDiagramMetamodelsProvider.java @@ -12,9 +12,10 @@ package org.eclipse.sirius.diagram.sequence.business.internal.metamodel; import java.util.Collection; +import java.util.Collections; import java.util.Set; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.description.Viewpoint; @@ -27,10 +28,10 @@ import com.google.common.collect.Sets; * @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a> * */ -public class SequenceDiagramMetamodelsProvider implements MetamodelDescriptorProvider { +public class SequenceDiagramMetamodelsProvider implements MetamodelDescriptorProvider2 { @Override - public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vp) { Set<MetamodelDescriptor> result = Sets.newLinkedHashSet(); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.diagram.sequence.SequencePackage.eINSTANCE)); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.diagram.sequence.description.DescriptionPackage.eINSTANCE)); @@ -39,5 +40,10 @@ public class SequenceDiagramMetamodelsProvider implements MetamodelDescriptorPro result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.diagram.sequence.template.TemplatePackage.eINSTANCE)); return result; } + + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor>emptyList(); + } } diff --git a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/DiagramMetamodelsProvider.java b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/DiagramMetamodelsProvider.java index cb4d2eb094..79321ed66a 100644 --- a/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/DiagramMetamodelsProvider.java +++ b/plugins/org.eclipse.sirius.diagram/src-core/org/eclipse/sirius/diagram/business/internal/dialect/DiagramMetamodelsProvider.java @@ -12,9 +12,10 @@ package org.eclipse.sirius.diagram.business.internal.dialect; import java.util.Collection; +import java.util.Collections; import java.util.Set; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.description.Viewpoint; @@ -27,10 +28,10 @@ import com.google.common.collect.Sets; * @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a> * */ -public class DiagramMetamodelsProvider implements MetamodelDescriptorProvider { +public class DiagramMetamodelsProvider implements MetamodelDescriptorProvider2 { @Override - public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vps) { Set<MetamodelDescriptor> result = Sets.newLinkedHashSet(); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.diagram.DiagramPackage.eINSTANCE)); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.diagram.description.DescriptionPackage.eINSTANCE)); @@ -41,4 +42,9 @@ public class DiagramMetamodelsProvider implements MetamodelDescriptorProvider { return result; } + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor>emptyList(); + } + } diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html index e8f639440c..78d302be50 100644 --- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html +++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html @@ -387,6 +387,10 @@ <li><span class="label label-success">Added</span> The class <code>org.eclipse.sirius.common.tools.api.interpreter.StandardServices</code> has been added. This class owns methods used for service: interpreter. </li> + <li><span class="label label-success">Added</span> The class + <code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been added and should be prefered instead of implementing + <code>MetamodelDescriptorProvider</code>. + </li> <li><span class="label label-info">Modified</span> <code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority.canDeleteInstance(EObject)</code> when called for an object will not be called for children of this object as we know it will return true because if we can delete a parent object we can delete its children. </li> diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile index e3c44d5169..f4b05e52dc 100644 --- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile +++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile @@ -106,6 +106,7 @@ h4. Changes in @org.eclipse.sirius@ * <span class="label label-success">Added</span> The method @addEvaluateSelectionExpressionTask@ has been added in class @org.eclipse.sirius.tools.api.command.AbstractCommandFactory@ to allow selection after tool execution. * <span class="label label-success">Added</span> The class @org.eclipse.sirius.common.tools.api.interpreter.StandardServices@ has been added. This class owns methods used for service: interpreter. +* <span class="label label-success">Added</span> The class @org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2@ has been added and should be prefered instead of implementing @MetamodelDescriptorProvider@. * <span class="label label-info">Modified</span> @org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority.canDeleteInstance(EObject)@ when called for an object will not be called for children of this object as we know it will return true because if we can delete a parent object we can delete its children. * <span class="label label-info">Modified</span> @org.eclipse.sirius.tools.api.command.DCommand@ no more inherits of @IUndoableCommand@ because useless since undo/redo is managed by EMF Transaction. * <span class="label label-danger">Removed</span> @org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()@ methods removed because they are useless since undo/redo is managed by EMF Transaction. diff --git a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/api/accessor/MetamodelDescriptor.java b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/api/accessor/MetamodelDescriptor.java index 10cb3de01b..272fbc55b3 100644 --- a/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/api/accessor/MetamodelDescriptor.java +++ b/plugins/org.eclipse.sirius.ecore.extender/src/org/eclipse/sirius/ecore/extender/business/api/accessor/MetamodelDescriptor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2009 THALES GLOBAL SERVICES. + * Copyright (c) 2007, 2015 THALES GLOBAL SERVICES 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 @@ -10,9 +10,11 @@ *******************************************************************************/ package org.eclipse.sirius.ecore.extender.business.api.accessor; -//TODOCBR comment this ! /** - * . + * A Marker interface for descriptors representing metamodels. These instances + * will be passed around by Sirius from the MetamodelDescriptorProviders to the + * interpreters and model accessors which have to query for a more specific type + * they can handle. * * @author cbrun */ diff --git a/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/TableMetamodelsProvider.java b/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/TableMetamodelsProvider.java index 6c7a33e5d9..2299648808 100644 --- a/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/TableMetamodelsProvider.java +++ b/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/TableMetamodelsProvider.java @@ -12,9 +12,10 @@ package org.eclipse.sirius.table.business.internal.dialect; import java.util.Collection; +import java.util.Collections; import java.util.Set; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.description.Viewpoint; @@ -27,14 +28,19 @@ import com.google.common.collect.Sets; * @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a> * */ -public class TableMetamodelsProvider implements MetamodelDescriptorProvider { +public class TableMetamodelsProvider implements MetamodelDescriptorProvider2 { @Override - public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vp) { Set<MetamodelDescriptor> result = Sets.newLinkedHashSet(); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.table.metamodel.table.TablePackage.eINSTANCE)); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.table.metamodel.table.description.DescriptionPackage.eINSTANCE)); return result; } + + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor>emptyList(); + } } diff --git a/plugins/org.eclipse.sirius.tree/src/org/eclipse/sirius/tree/business/internal/dialect/TreeMetamodelsProvider.java b/plugins/org.eclipse.sirius.tree/src/org/eclipse/sirius/tree/business/internal/dialect/TreeMetamodelsProvider.java index 1a77432fd8..d72fe1e723 100644 --- a/plugins/org.eclipse.sirius.tree/src/org/eclipse/sirius/tree/business/internal/dialect/TreeMetamodelsProvider.java +++ b/plugins/org.eclipse.sirius.tree/src/org/eclipse/sirius/tree/business/internal/dialect/TreeMetamodelsProvider.java @@ -12,9 +12,10 @@ package org.eclipse.sirius.tree.business.internal.dialect; import java.util.Collection; +import java.util.Collections; import java.util.Set; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.description.Viewpoint; @@ -27,14 +28,18 @@ import com.google.common.collect.Sets; * @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a> * */ -public class TreeMetamodelsProvider implements MetamodelDescriptorProvider { +public class TreeMetamodelsProvider implements MetamodelDescriptorProvider2 { @Override - public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vp) { Set<MetamodelDescriptor> result = Sets.newLinkedHashSet(); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.tree.TreePackage.eINSTANCE)); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.tree.description.DescriptionPackage.eINSTANCE)); return result; } + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor> emptyList(); + } } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider.java index f6af82e2ee..220ec0959e 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider.java @@ -18,16 +18,24 @@ import org.eclipse.sirius.viewpoint.description.Viewpoint; /** * Provider able to return a list of MetamodelDescriptor from viewpoints. * + * This interfaces is deprecated, MetamodelDescriptorProvider2 should be used + * instead as it provides the ability to handle several Viewpoints at once. + * * @author cbrun * */ +@Deprecated public interface MetamodelDescriptorProvider { /** * return the list of metamodel descritor provided by the viewpoint. * + * This method is deprecated and will not be called if the class implements + * {@link MetamodelDescriptorProvider2}. + * * @param vp * any representation description. * @return the list of metamodel descritor provided by the viewpoint. */ + @Deprecated Collection<MetamodelDescriptor> provides(Viewpoint vp); } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider2.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider2.java new file mode 100644 index 0000000000..b8ab794921 --- /dev/null +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/api/extender/MetamodelDescriptorProvider2.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2015 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.sirius.business.api.extender; + +import java.util.Collection; + +import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; +import org.eclipse.sirius.viewpoint.description.Viewpoint; + +/** + * Provider able to return a list of MetamodelDescriptor from viewpoints. This + * is an evolution of the {@link MetamodelDescriptorProvider} API so that + * implementers can declare MetamodelDescriptors even if no Viewpoint is + * enabled. + * + * @author cbrun + * + */ +public interface MetamodelDescriptorProvider2 extends MetamodelDescriptorProvider { + /** + * Return the list of metamodel descritor provided by the selected + * viewpoints. + * + * @param vps + * A list of selected Viewpoints. This list might be empty and + * yet the adopter might want to provide metamodel descriptors + * anyway. + * @return the list of metamodel descritor provided by the viewpoint. + */ + Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vps); +} diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/dialect/ViewpointMetamodelsProvider.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/dialect/ViewpointMetamodelsProvider.java index 2aa601c4fa..99729d845a 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/dialect/ViewpointMetamodelsProvider.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/dialect/ViewpointMetamodelsProvider.java @@ -12,9 +12,10 @@ package org.eclipse.sirius.business.internal.dialect; import java.util.Collection; +import java.util.Collections; import java.util.Set; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.description.Viewpoint; @@ -27,10 +28,10 @@ import com.google.common.collect.Sets; * @author <a href="mailto:cedric.brun@obeo.fr">Cedric Brun</a> * */ -public class ViewpointMetamodelsProvider implements MetamodelDescriptorProvider { +public class ViewpointMetamodelsProvider implements MetamodelDescriptorProvider2 { @Override - public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(Collection<Viewpoint> vp) { Set<MetamodelDescriptor> result = Sets.newLinkedHashSet(); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.viewpoint.ViewpointPackage.eINSTANCE)); result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.viewpoint.description.DescriptionPackage.eINSTANCE)); @@ -41,5 +42,10 @@ public class ViewpointMetamodelsProvider implements MetamodelDescriptorProvider result.add(new EcoreMetamodelDescriptor(org.eclipse.sirius.description.contribution.ContributionPackage.eINSTANCE)); return result; } + + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor>emptyList(); + } } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/EcoreIntrinsicMetamodelDescriptorProvider.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/EcoreIntrinsicMetamodelDescriptorProvider.java index 3031604b03..ccb4ccfe7f 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/EcoreIntrinsicMetamodelDescriptorProvider.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/EcoreIntrinsicMetamodelDescriptorProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2010 THALES GLOBAL SERVICES. + * Copyright (c) 2008, 2015 THALES GLOBAL SERVICES 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 @@ -12,9 +12,10 @@ package org.eclipse.sirius.business.internal.extender; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import org.eclipse.emf.ecore.EPackage; -import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.business.api.query.ViewpointQuery; import org.eclipse.sirius.ecore.extender.business.api.accessor.EcoreMetamodelDescriptor; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; @@ -28,23 +29,25 @@ import org.eclipse.sirius.viewpoint.description.Viewpoint; * @author cbrun * */ -public class EcoreIntrinsicMetamodelDescriptorProvider implements MetamodelDescriptorProvider { +public class EcoreIntrinsicMetamodelDescriptorProvider implements MetamodelDescriptorProvider2 { /** * * {@inheritDoc} */ - public Collection<MetamodelDescriptor> provides(final Viewpoint vp) { + public Collection<MetamodelDescriptor> provides(final Collection<Viewpoint> vps) { final Collection<MetamodelDescriptor> result = new ArrayList<MetamodelDescriptor>(); - for (final RepresentationDescription desc : new ViewpointQuery(vp).getAllRepresentationDescriptions()) { - for (final EPackage pak : desc.getMetamodel()) { - result.add(getMetamodelDescriptor(pak)); + for (Viewpoint vp : vps) { + for (final RepresentationDescription desc : new ViewpointQuery(vp).getAllRepresentationDescriptions()) { + for (final EPackage pak : desc.getMetamodel()) { + result.add(getMetamodelDescriptor(pak)); + } } - } - - for (final RepresentationExtensionDescription ext : vp.getOwnedRepresentationExtensions()) { - for (final EPackage pak : ext.getMetamodel()) { - result.add(getMetamodelDescriptor(pak)); + + for (final RepresentationExtensionDescription ext : vp.getOwnedRepresentationExtensions()) { + for (final EPackage pak : ext.getMetamodel()) { + result.add(getMetamodelDescriptor(pak)); + } } } @@ -60,5 +63,10 @@ public class EcoreIntrinsicMetamodelDescriptorProvider implements MetamodelDescr return new EcoreMetamodelDescriptor(pak); } } + + @Override + public Collection<MetamodelDescriptor> provides(Viewpoint vp) { + return Collections.<MetamodelDescriptor>emptyList(); + } } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/MetamodelDescriptorManagerImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/MetamodelDescriptorManagerImpl.java index 12d9837d33..2b2e99b6ad 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/MetamodelDescriptorManagerImpl.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/extender/MetamodelDescriptorManagerImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 THALES GLOBAL SERVICES. + * Copyright (c) 2008, 2015 THALES GLOBAL SERVICES 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 @@ -12,16 +12,19 @@ package org.eclipse.sirius.business.internal.extender; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.List; import org.eclipse.sirius.business.api.extender.MetamodelDescriptorManager; import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider; +import org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2; import org.eclipse.sirius.common.tools.api.util.EclipseUtil; import org.eclipse.sirius.ecore.extender.business.api.accessor.MetamodelDescriptor; import org.eclipse.sirius.viewpoint.SiriusPlugin; import org.eclipse.sirius.viewpoint.description.Viewpoint; +import com.google.common.collect.Iterables; +import com.google.common.collect.Sets; + /** * Implementation for the manager. * @@ -58,12 +61,24 @@ public class MetamodelDescriptorManagerImpl implements MetamodelDescriptorManage * {@inheritDoc} */ public Collection<MetamodelDescriptor> provides(final Collection<Viewpoint> enabledViewpoints) { - final Collection<MetamodelDescriptor> result = new HashSet<MetamodelDescriptor>(); + final Collection<MetamodelDescriptor> result = Sets.newLinkedHashSet(); + for (MetamodelDescriptorProvider2 provider : Iterables.filter(providers, MetamodelDescriptorProvider2.class)) { + final Collection<MetamodelDescriptor> provided = provider.provides(enabledViewpoints); + if (provided != null) { + result.addAll(provided); + } + } for (Viewpoint vp : enabledViewpoints) { for (MetamodelDescriptorProvider provider : providers) { - final Collection<MetamodelDescriptor> provided = provider.provides(vp); - if (provided != null) { - result.addAll(provided); + /* + * Implementers of MetamodelDescriptorProvider2 have been called + * before. + */ + if (!(provider instanceof MetamodelDescriptorProvider2)) { + final Collection<MetamodelDescriptor> provided = provider.provides(vp); + if (provided != null) { + result.addAll(provided); + } } } } |
