diff options
author | vlorenzo | 2012-02-09 17:05:09 +0000 |
---|---|---|
committer | vlorenzo | 2012-02-09 17:05:09 +0000 |
commit | 238340bb02b2a55586b5bc51c0330284f7ab0fc7 (patch) | |
tree | 67eba6e9ae85358df8844177b5fa5a54b150bd5d /sandbox | |
parent | 31c34edb86c488bfd4a21748d9afa665c8942972 (diff) | |
download | org.eclipse.papyrus-238340bb02b2a55586b5bc51c0330284f7ab0fc7.tar.gz org.eclipse.papyrus-238340bb02b2a55586b5bc51c0330284f7ab0fc7.tar.xz org.eclipse.papyrus-238340bb02b2a55586b5bc51c0330284f7ab0fc7.zip |
A save of my work
Diffstat (limited to 'sandbox')
14 files changed, 468 insertions, 567 deletions
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/plugin.xml b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/plugin.xml index 75ced15498b..962c29af83a 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/plugin.xml +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/plugin.xml @@ -4,19 +4,15 @@ <plugin>
<extension point="org.eclipse.compare.contentMergeViewers">
<viewer
- class="org.eclipse.papyrus.infra.emf.compare.ui.viewer.TransactionalContentMergeViewerCreator"
- extensions="uml,ecore"
+ class="org.eclipse.papyrus.infra.emf.compare.ui.viewer.PapyrusContentMergeViewerCreator"
+ extensions="uml"
id="org.eclipse.papyrus.infra.emf.compare.ui.papyrus.viewer"
- label="INFRA Papyrus Viewer">
+ label="Papyrus Content Merge Viewer">
</viewer>
</extension>
<extension point="org.eclipse.compare.structureMergeViewers">
- <viewer class="org.eclipse.papyrus.infra.emf.compare.ui.structural.viewer.PapyrusStructureMergeViewerCreator" extensions="uml,ecore" id="org.eclipse.papyrus.infra.emf.compare.ui.structural.viewer" label="INFRA Papyrus Structure Merge Viewer">
+ <viewer class="org.eclipse.papyrus.infra.emf.compare.ui.structural.viewer.PapyrusStructureMergeViewerCreator" extensions="uml" id="org.eclipse.papyrus.infra.emf.compare.ui.structural.viewer" label="Papyrus Structure Merge Viewer">
</viewer>
</extension>
-
- <extension point="org.eclipse.emf.facet.infra.browser.custom.core.registration">
- <browserCustomization
- file="resources/diffElement.uiCustom"/>
- </extension>
+ </plugin>
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/resources/diffElement.uiCustom b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/resources/diffElement.uiCustom deleted file mode 100644 index 9fd044c9524..00000000000 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/resources/diffElement.uiCustom +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="ASCII"?>
-<uicustom:MetamodelView xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uicustom="http://www.eclipse.org/EmfFacet/infra/browser/custom/0.8" metamodelURI="http://www.eclipse.org/emf/compare/diff/1.1">
- <types metaclassName="diff.AbstractDiffExtension">
- <customizedFeatures customizedFeature="hideMetaclassName">
- <defaultValue xsi:type="uicustom:StaticFeatureValue" value="true"/>
- </customizedFeatures>
- </types>
- <types metaclassName="diff.UpdateAttribute">
- <customizedFeatures customizedFeature="color">
- <defaultValue xsi:type="uicustom:StaticFeatureValue" value="(0,128,0)"/>
- </customizedFeatures>
- </types>
-</uicustom:MetamodelView>
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/actions/CustomizationAction.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/actions/CustomizationAction.java index 353e656a395..f2cc249aefc 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/actions/CustomizationAction.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/actions/CustomizationAction.java @@ -16,28 +16,20 @@ package org.eclipse.papyrus.infra.emf.compare.ui.actions; import java.util.Collection;
import java.util.List;
-import org.eclipse.compare.internal.CompareEditor;
-import org.eclipse.compare.internal.ViewerDescriptor;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.facet.infra.browser.custom.MetamodelView;
import org.eclipse.emf.facet.infra.browser.custom.ui.dialogs.LoadCustomizationsDialog;
import org.eclipse.emf.facet.infra.browser.uicore.CustomizationManager;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.window.Window;
-import org.eclipse.papyrus.infra.core.utils.EditorUtils;
import org.eclipse.papyrus.infra.emf.compare.ui.Activator;
-import org.eclipse.papyrus.infra.emf.compare.ui.provider.IRefreshViewer;
+import org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer;
import org.eclipse.papyrus.infra.emf.compare.ui.utils.LabelProviderUtil;
import org.eclipse.papyrus.infra.emf.compare.ui.utils.Utils;
import org.eclipse.swt.widgets.Display;
-import org.eclipse.team.internal.ui.synchronize.SaveablesCompareEditorInput;
-import org.eclipse.team.ui.synchronize.SaveableCompareEditorInput;
-import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
/**
*
@@ -104,6 +96,6 @@ public class CustomizationAction extends Action { customizationManager.loadCustomizations();
}
//we refresh the viewers in the editor
- ((IRefreshViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(Utils.getCurrentEditor())).refreshViewer();
+ ((ILabelProviderRefreshingViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(Utils.getCurrentEditor())).refreshViewer();
}
}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/PapyrusLabelProvider.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/EMFCompareLabelProvider.java index 932e709d533..362e6732921 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/PapyrusLabelProvider.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/EMFCompareLabelProvider.java @@ -18,34 +18,34 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.HashSet; +import org.eclipse.core.resources.IFile; +import org.eclipse.emf.compare.diff.metamodel.AbstractDiffExtension; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.facet.infra.browser.uicore.CustomizableModelLabelProvider; import org.eclipse.emf.facet.infra.browser.uicore.CustomizationManager; import org.eclipse.emf.facet.infra.browser.uicore.internal.AppearanceConfiguration; import org.eclipse.emf.facet.infra.browser.uicore.internal.model.ITreeElement; import org.eclipse.emf.facet.infra.browser.uicore.internal.model.ModelElementItem; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.papyrus.infra.emf.compare.ui.Activator; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Display; - +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; /** - * PapyrusLabelProvider provides the same labels and icons as one can find in the Model Explorer. + * PLabelProvider provides the same labels and icons as one can find in + * the Model Explorer. */ -// Not placed in the UI plugin because it is used in the subclasses of AbstractDiffExtension, in getText() method -public class PapyrusLabelProvider extends CustomizableModelLabelProvider implements IRefreshViewer { - +public class EMFCompareLabelProvider extends CustomizableModelLabelProvider implements ILabelProviderRefreshingViewer { /** The configuration. */ private final AppearanceConfiguration configuration; - //TODO merge ModelStructureLabelProvider with this provider! - private final ModelStructureLabelProvider provider = new ModelStructureLabelProvider(); + /** the list of the registered viewer */ + private Collection<TreeViewer> viewers = null; /** * Constructor. @@ -53,41 +53,11 @@ public class PapyrusLabelProvider extends CustomizableModelLabelProvider impleme * @param customizationManager * the customization manager */ - public PapyrusLabelProvider(final CustomizationManager customizationManager) { + public EMFCompareLabelProvider(final CustomizationManager customizationManager) { super(customizationManager); this.configuration = getAppearanceConfiguration(customizationManager); } - // /** - // * Instantiates a new papyrus label provider. - // */ - // public PapyrusLabelProvider() { - // this(initCustomizationManager()); - // } - - // /** - // * Inits the customization manager. - // * - // * @return the customization manager - // */ - // private static CustomizationManager initCustomizationManager() { - // CustomizationManager manager = new CustomizationManager(); - // try { - // List<MetamodelView> registryDefaultCustomizations = CustomizationsCatalog.getInstance().getRegistryDefaultCustomizations(); - // for(MetamodelView metamodelView : registryDefaultCustomizations) { - // manager.registerCustomization(metamodelView); - // } - // manager.loadCustomizations(); - // - // } catch (Throwable e) { - // //TODO - //// Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error initializing customizations", e)); //$NON-NLS-1$ - // } - // manager.setShowFullQualifiedNames(false); - // manager.setShowURI(true); - // manager.setShowDerivedLinks(false); - // return manager; - // } /** * Gets the appearance configuration. @@ -105,16 +75,15 @@ public class PapyrusLabelProvider extends CustomizableModelLabelProvider impleme return (AppearanceConfiguration)getApperanceConfigurationMethod.invoke(customizationManager2); } } catch (final SecurityException e) { - //TODO - // Activator.logError(e); + Activator.log.error(e); } catch (final NoSuchMethodException e) { - // Activator.logError(e); + Activator.log.error(e); } catch (final IllegalArgumentException e) { - // Activator.logError(e); + Activator.log.error(e); } catch (final IllegalAccessException e) { - // Activator.logError(e); + Activator.log.error(e); } catch (final InvocationTargetException e) { - // Activator.logError(e); + Activator.log.error(e); } return new AppearanceConfiguration(null); // default one. } @@ -128,33 +97,46 @@ public class PapyrusLabelProvider extends CustomizableModelLabelProvider impleme */ @Override public String getText(final Object element) { - if(element == null) { - return ""; //$NON-NLS-1$ + String text = ""; + if(element instanceof AbstractDiffExtension) { + text = ((AbstractDiffExtension)element).getText(); + } else if(element instanceof IFile) { + text = ((IFile)element).getName(); + } else if(element instanceof Resource) { + text = ((Resource)element).getURI().lastSegment(); } if(element instanceof EObject) { final ITreeElement treeElement = getTreeElement((EObject)element); - return super.getText(treeElement); + text = super.getText(treeElement); + } else { + text = super.getText(element); } - return super.getText(element); + return text; } /* * (non-Javadoc) * - * @see org.eclipse.emf.facet.infra.browser.uicore.CustomizableModelLabelProvider#getImage(java.lang.Object) + * @see + * org.eclipse.emf.facet.infra.browser.uicore.CustomizableModelLabelProvider + * #getImage(java.lang.Object) */ @Override public Image getImage(final Object element) { - if(element == null) { - return null; - } - if(element instanceof EObject) { + Image image = null; + if(element instanceof AbstractDiffExtension) { + image = (Image)((AbstractDiffExtension)element).getImage(); + } else if(element instanceof IFile) { + image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE); + } else if(element instanceof EObject) { final ITreeElement treeElement = getTreeElement((EObject)element); - return super.getImage(treeElement); + image = super.getImage(treeElement); + } else { + image = super.getImage(element); } - return super.getImage(element); - } + return image; + } /** * Gets the tree element. @@ -170,36 +152,36 @@ public class PapyrusLabelProvider extends CustomizableModelLabelProvider impleme return new ModelElementItem(eObject, getTreeElement(eObject.eContainer()), this.configuration); } -// //TODO for test only! -// @Override -// public Color getBackground(final Object element) { -// final RGB rgb = new RGB(255, 200, 0); -// final Device device = Display.getDefault(); -// final Color color = new Color(device, rgb); -// // TODO Auto-generated method stub -// return color; -// } - private Collection<TreeViewer> viewers = null; - //TODO supprimer ces viewers quand ils seront disposés! + + /** + * + * @see org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer#registerViewer(org.eclipse.jface.viewers.TreeViewer) + * + * @param viewer + */ public void registerViewer(final TreeViewer viewer) { - // TODO Auto-generated method stub if(viewers == null) { viewers = new HashSet<TreeViewer>(); } final DisposeListener listener = new DisposeListener() { public void widgetDisposed(DisposeEvent e) { - viewer.getTree().removeDisposeListener(this); - viewers.remove(viewer); + viewer.getTree().removeDisposeListener(this); + unregisterViewer(viewer); } }; viewer.getTree().addDisposeListener(listener); viewers.add(viewer); } + /** + * + * @see org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer#refreshViewer() + * + */ public void refreshViewer() { for(TreeViewer current : viewers) { if(!current.getTree().isDisposed()) { @@ -208,5 +190,14 @@ public class PapyrusLabelProvider extends CustomizableModelLabelProvider impleme } } + /** + * + * @see org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer#unregisterViewer(org.eclipse.jface.viewers.TreeViewer) + * + * @param viewer + */ + public void unregisterViewer(TreeViewer viewer) { + viewers.remove(viewer); + } } diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ILabelProviderRefreshingViewer.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ILabelProviderRefreshingViewer.java new file mode 100644 index 00000000000..ed297e4d4f2 --- /dev/null +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ILabelProviderRefreshingViewer.java @@ -0,0 +1,46 @@ +/*****************************************************************************
+ * Copyright (c) 2012 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:
+ * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.emf.compare.ui.provider;
+
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+
+/**
+ *
+ * The classes implements this interface when they are in charge of resfreshing Viewer
+ *
+ */
+public interface ILabelProviderRefreshingViewer extends IBaseLabelProvider{
+
+ /**
+ * Register a viewer to refresh it
+ *
+ * @param viewer
+ * a viewer
+ */
+ public void registerViewer(TreeViewer viewer);
+
+ /**
+ * viewer are refresh in this methods
+ */
+ public void refreshViewer();
+
+ /**
+ * Unregister a viewer
+ *
+ * @param viewer
+ * a viewer
+ */
+ public void unregisterViewer(final TreeViewer viewer);
+}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/IRefreshViewer.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/IRefreshViewer.java deleted file mode 100644 index b02f7c49c32..00000000000 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/IRefreshViewer.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.eclipse.papyrus.infra.emf.compare.ui.provider;
-
-import org.eclipse.jface.viewers.TreeViewer;
-
-
-public interface IRefreshViewer {
-
- public void registerViewer(TreeViewer viewer);
-
- public void refreshViewer();
-}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ModelStructureLabelProvider.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ModelStructureLabelProvider.java deleted file mode 100644 index 03e80d5813e..00000000000 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/provider/ModelStructureLabelProvider.java +++ /dev/null @@ -1,106 +0,0 @@ -/*****************************************************************************
- * Copyright (c) 2011 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:
- * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-package org.eclipse.papyrus.infra.emf.compare.ui.provider;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.emf.compare.diff.metamodel.AbstractDiffExtension;
-import org.eclipse.emf.compare.util.AdapterUtils;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-
-//FIXME : duplicated code from ModelStructureMergeViewer::ModelStructureLabelProvider
-/**
- * {@link LabelProvider} of this viewer.
- *
- * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
- */
-public class ModelStructureLabelProvider extends LabelProvider {
-
- /**
- * We use this generic label provider, but we want to customize some aspects that's why we choose to
- * aggregate it.
- */
- /* package */AdapterFactoryLabelProvider adapterProvider;
-
- /**
- * Default constructor.
- */
- public ModelStructureLabelProvider() {
- adapterProvider = new AdapterFactoryLabelProvider(AdapterUtils.getAdapterFactory());
-
- }
-
- /**
- * Returns the platform icon for a given {@link IFile}. If not an {@link IFile}, delegates to the {@link AdapterFactoryLabelProvider} to get the
- * {@link Image}.
- *
- * @param object
- * Object to get the {@link Image} for.
- * @return The platform icon for the given object.
- * @see AdapterFactoryLabelProvider#getImage(Object)
- */
- @Override
- public Image getImage(Object object) {
- Image image = null;
- if(object instanceof AbstractDiffExtension) {
- image = (Image)((AbstractDiffExtension)object).getImage();
- } else if(object instanceof IFile) {
- image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
- }
-
- // fallback to ItemProvider
- if(image == null) {
- image = adapterProvider.getImage(object);
- }
-
- return image;
- }
-
- /**
- * Returns the name of the given {@link IFile}, delegates to {@link AdapterFactoryLabelProvider#getText(Object)} if not an {@link IFile}.
- *
- * @param object
- * Object we seek the name for.
- * @return The name of the given object.
- * @see AdapterFactoryLabelProvider#getText(Object)
- */
- @Override
- public String getText(Object object) {
- String text = null;
- if(object instanceof AbstractDiffExtension) {
- text = ((AbstractDiffExtension)object).getText();
- text = getDiffExtensionText((AbstractDiffExtension)object);
- } else if(object instanceof IFile) {
- text = ((IFile)object).getName();
- } else if(object instanceof Resource) {
- text = ((Resource)object).getURI().lastSegment();
- }
-
- // fallback to ItemProvider
- if(text == null || "".equals(text)) { //$NON-NLS-1$
- text = adapterProvider.getText(object);
- }
-
- return text;
- }
-
- public String getDiffExtensionText(AbstractDiffExtension extension){
-
- return extension.getText();
- }
-}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/structural/viewer/PapyrusParameterizedStructureMergeViewer.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/structural/viewer/PapyrusParameterizedStructureMergeViewer.java index 83b36fc3f23..05f1d4ed577 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/structural/viewer/PapyrusParameterizedStructureMergeViewer.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/structural/viewer/PapyrusParameterizedStructureMergeViewer.java @@ -14,6 +14,7 @@ package org.eclipse.papyrus.infra.emf.compare.ui.structural.viewer;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import org.eclipse.compare.CompareConfiguration;
@@ -26,7 +27,7 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.papyrus.infra.emf.compare.ui.actions.CustomizationAction;
-import org.eclipse.papyrus.infra.emf.compare.ui.provider.IRefreshViewer;
+import org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer;
import org.eclipse.papyrus.infra.emf.compare.ui.utils.LabelProviderUtil;
import org.eclipse.papyrus.infra.emf.compare.ui.utils.Utils;
import org.eclipse.swt.events.DisposeEvent;
@@ -47,6 +48,11 @@ public class PapyrusParameterizedStructureMergeViewer extends ParameterizedStruc private Collection<EPackage> metamodels;
/**
+ * The label provider
+ */
+ private ILabelProviderRefreshingViewer labelProvider;
+
+ /**
*
* Constructor.
* see {@link ParameterizedStructureMergeViewer#ParameterizedStructureMergeViewer(Composite, CompareConfiguration)}
@@ -87,17 +93,23 @@ public class PapyrusParameterizedStructureMergeViewer extends ParameterizedStruc metamodels = new HashSet<EPackage>();
}
//we add an action to change the applied cuztomization
- final IAction customizationAction = new CustomizationAction(metamodels);
+ final IAction customizationAction = new CustomizationAction(Collections.unmodifiableCollection(metamodels));
final ActionContributionItem customizationContributionItem = new ActionContributionItem(customizationAction);
tbm.insert(1, customizationContributionItem);
tbm.update(true);
}
-
+ /**
+ *
+ * @see org.eclipse.emf.compare.ui.viewer.structure.ModelStructureMergeViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
+ *
+ * @param event
+ */
@Override
protected void handleDispose(DisposeEvent event) {
- // TODO Auto-generated method stub
+ metamodels.clear();
+ labelProvider.unregisterViewer(this);
super.handleDispose(event);
}
@@ -108,8 +120,8 @@ public class PapyrusParameterizedStructureMergeViewer extends ParameterizedStruc */
protected LabelProvider createLabelProvider() {
final IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
- IRefreshViewer refreshViewer = (IRefreshViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(activeEditor);
- refreshViewer.registerViewer(this);
- return (LabelProvider)refreshViewer;
+ labelProvider = (ILabelProviderRefreshingViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(activeEditor);
+ labelProvider.registerViewer(this);
+ return (LabelProvider)labelProvider;
}
}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/utils/LabelProviderUtil.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/utils/LabelProviderUtil.java index f49b3aadeb0..0318edc9bed 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/utils/LabelProviderUtil.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/utils/LabelProviderUtil.java @@ -3,46 +3,76 @@ package org.eclipse.papyrus.infra.emf.compare.ui.utils; import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.compare.internal.CompareEditor;
import org.eclipse.emf.facet.infra.browser.custom.MetamodelView;
import org.eclipse.emf.facet.infra.browser.custom.core.CustomizationsCatalog;
import org.eclipse.emf.facet.infra.browser.uicore.CustomizationManager;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.papyrus.infra.emf.compare.ui.Activator;
-import org.eclipse.papyrus.infra.emf.compare.ui.provider.PapyrusLabelProvider;
+import org.eclipse.papyrus.infra.emf.compare.ui.provider.EMFCompareLabelProvider;
import org.eclipse.ui.IEditorPart;
-
-
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ *
+ * This class provides usefull methods to get a LabelProvider for the Editor.
+ * It allows to instanciate only 1 LabelProvider and one CustomizationManager for 1 Editor even if there are 2 customizable viewers in the editor
+ *
+ */
public class LabelProviderUtil {
- private final Map<IEditorPart, ILabelProvider> map;
+ /**
+ * This map associates an IEditorPart with an ILabelProvider
+ */
+ private final Map<IEditorPart, IBaseLabelProvider> labelProviderMap;
+ /**
+ * This map associates an IEditorPart with a CustomizationManager
+ */
private final Map<IEditorPart, CustomizationManager> customizationMap;
+ /** LabelProviderUtil is a singleton */
public final static LabelProviderUtil INSTANCE = new LabelProviderUtil();
+ /**
+ * Constructor
+ */
private LabelProviderUtil() {
- map = new HashMap<IEditorPart, ILabelProvider>();
+ labelProviderMap = new HashMap<IEditorPart, IBaseLabelProvider>();
customizationMap = new HashMap<IEditorPart, CustomizationManager>();
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(new CloseCompareEditorListener());
}
- public ILabelProvider getLabelProviderFor(final IEditorPart editor/* , final Set<EPackage> packages */) {
- ILabelProvider provider = map.get(editor);
+ /**
+ *
+ * @param editor
+ * an editor
+ * @return
+ * the ILabelProvider associated to this editor
+ */
+ public IBaseLabelProvider getLabelProviderFor(final IEditorPart editor/* , final Set<EPackage> packages */) {
+ IBaseLabelProvider provider = labelProviderMap.get(editor);
if(provider == null) {
CustomizationManager customizationManager = getCustomizationManager(editor);
- provider = new PapyrusLabelProvider(customizationManager);
- map.put(editor, provider);
+ provider = new EMFCompareLabelProvider(customizationManager);
+ labelProviderMap.put(editor, provider);
}
return provider;
}
- public void destroyLabelProvider(final IEditorPart editor) {
- map.remove(editor);
+ /**
+ * Remove the LabelProvider and the CustomizationManager registered for this editor
+ *
+ * @param editor
+ * an editor
+ */
+ public void destroyConfigurationFor(final IEditorPart editor) {
+ labelProviderMap.remove(editor);
+ customizationMap.remove(editor);
}
/**
@@ -69,8 +99,7 @@ public class LabelProviderUtil { // loadFacetsForCustomizations(registryDefaultCustomizations,customizationManager);
} catch (final Throwable e) {
- //TODO
- // Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Error initializing customizations", e)); //$NON-NLS-1$
+ Activator.log.error(e);
}
}
@@ -90,4 +119,67 @@ public class LabelProviderUtil { }
return manager;
}
+
+ /**
+ *
+ * This listener allows to listen the close of the CompareEditor to remove it from the map
+ *
+ *
+ */
+ public class CloseCompareEditorListener implements IPartListener {
+
+ /**
+ *
+ * @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
+ *
+ * @param part
+ */
+ public void partActivated(IWorkbenchPart part) {
+ //nothing to do
+ }
+
+ /**
+ *
+ * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart)
+ *
+ * @param part
+ */
+ public void partBroughtToTop(IWorkbenchPart part) {
+ //nothing to do
+ }
+
+ /**
+ *
+ * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
+ *
+ * @param part
+ */
+ public void partClosed(IWorkbenchPart part) {
+ if(part instanceof CompareEditor) {
+ customizationMap.remove(part);
+ labelProviderMap.remove(part);
+ }
+ }
+
+ /**
+ *
+ * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart)
+ *
+ * @param part
+ */
+ public void partDeactivated(IWorkbenchPart part) {
+ //nothing to do
+ }
+
+ /**
+ *
+ * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
+ *
+ * @param part
+ */
+ public void partOpened(IWorkbenchPart part) {
+ //nothing to do
+ }
+
+ }
}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalContentMergeViewerCreator.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusContentMergeViewerCreator.java index 3923fdcb317..8b3539d52e8 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalContentMergeViewerCreator.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusContentMergeViewerCreator.java @@ -23,13 +23,26 @@ import org.eclipse.swt.widgets.Composite; * This class allows to create the MergeViewer
*
*/
-public class TransactionalContentMergeViewerCreator implements IViewerCreator {
+public class PapyrusContentMergeViewerCreator implements IViewerCreator {
- public TransactionalContentMergeViewerCreator() {
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public PapyrusContentMergeViewerCreator() {
//nothing to do
}
+ /**
+ *
+ * @see org.eclipse.compare.IViewerCreator#createViewer(org.eclipse.swt.widgets.Composite, org.eclipse.compare.CompareConfiguration)
+ *
+ * @param parent
+ * @param config
+ * @return
+ */
public Viewer createViewer(Composite parent, CompareConfiguration config) {
- return new TransactionalModelContentMergeViewer(parent, config);
+ return new PapyrusModelContentMergeViewer(parent, config);
}
}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusModelContentMergeTabFolder.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusModelContentMergeTabFolder.java new file mode 100644 index 00000000000..853d108f172 --- /dev/null +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusModelContentMergeTabFolder.java @@ -0,0 +1,197 @@ +/***************************************************************************** + * Copyright (c) 2010 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: + * Tatiana Fesenko (CEA LIST) - Initial API and implementation + * Vincent Lorenzo (CEA LIST) - 349650: [Papyrus Merge] IndexOfBoundException + *****************************************************************************/ +package org.eclipse.papyrus.infra.emf.compare.ui.viewer; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.compare.diff.metamodel.ComparisonSnapshot; +import org.eclipse.emf.compare.ui.TypedElementWrapper; +import org.eclipse.emf.compare.ui.viewer.content.ModelContentMergeViewer; +import org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab; +import org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder; +import org.eclipse.emf.compare.ui.viewer.content.part.diff.ModelContentMergeDiffTab; +import org.eclipse.emf.compare.util.AdapterUtils; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.papyrus.infra.emf.compare.ui.provider.ILabelProviderRefreshingViewer; +import org.eclipse.papyrus.infra.emf.compare.ui.utils.LabelProviderUtil; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.PlatformUI; + + +/** + * The Class UMLModelContentMergeTabFolder. + */ +public class PapyrusModelContentMergeTabFolder extends ModelContentMergeTabFolder { + + /** The my uml viewer. */ + protected final PapyrusModelContentMergeViewer myUMLViewer; + + /** the label provider */ + private ILabelProviderRefreshingViewer labelProvider; + + /** the diff tab */ + private ModelContentMergeDiffTab diffTab; + + /** + * Instantiates a new uML model content merge tab folder. + * + * @param viewer + * the viewer + * @param composite + * the composite + * @param side + * the side + */ + public PapyrusModelContentMergeTabFolder(ModelContentMergeViewer viewer, Composite composite, int side) { + super(viewer, composite, side); + myUMLViewer = (PapyrusModelContentMergeViewer)viewer; + } + + /** + * + * @see org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder#createModelContentMergeDiffTab(org.eclipse.swt.widgets.Composite) + * + * @param parent + * @return + */ + @Override + protected IModelContentMergeViewerTab createModelContentMergeDiffTab(Composite parent) { + diffTab = new ModelContentMergeDiffTab(parent, partSide, this); + diffTab.setContentProvider(createDiffTabContentProvider()); + IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); + labelProvider = (ILabelProviderRefreshingViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(activeEditor); + labelProvider.registerViewer(diffTab); + diffTab.setLabelProvider((IBaseLabelProvider)labelProvider); + return diffTab; + + } + + /** + * + * @see org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder#dispose() + * + */ + @Override + public void dispose() { + labelProvider.unregisterViewer(diffTab); + diffTab = null; + labelProvider = null; + super.dispose(); + } + + /** + * + * @return + */ + protected IContentProvider createDiffTabContentProvider() { + return new ModelContentMergeDiffTabContentProvider(AdapterUtils.getAdapterFactory()); + } + + + /** + * This implementation of an {@link AdapterFactoryContentProvider} will strip ComparisonSnapshots out of + * the view. + * + * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> + */ + //duplicate code from EMF-Compare :ModelContentMergeDiffTab.ModelContentMergeDiffTabContentProvider + public class ModelContentMergeDiffTabContentProvider extends AdapterFactoryContentProvider { + + /** + * Default constructor. Delegates to the super implementation. + * + * @param factory + * Factory to get labels and icons from. + */ + public ModelContentMergeDiffTabContentProvider(AdapterFactory factory) { + super(factory); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getElements(java.lang.Object) + */ + @SuppressWarnings("unchecked") + @Override + public Object[] getElements(Object object) { + // overwritten to ensure contents of ResourceSets, List<Resource>, and Resource are correclty + // returned. + Object[] result = null; + if(object instanceof ResourceSet) { + final List<Resource> resources = ((ResourceSet)object).getResources(); + final List<Resource> elements = new ArrayList<Resource>(resources.size()); + for(final Resource resource : resources) { + if(resource.getContents().isEmpty() || !(resource.getContents().get(0) instanceof ComparisonSnapshot)) { + elements.add(resource); + } + } + result = elements.toArray(); + } else if(object instanceof TypedElementWrapper) { + result = new Object[]{ ((EObject)object).eResource(), }; + } else if(object instanceof List) { + // we may also display a list of resources + result = ((List)object).toArray(); + } else if(object instanceof Resource) { + // return contents of resource + result = ((Resource)object).getContents().toArray(); + } else { + result = super.getElements(object); + } + return result; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getChildren(java.lang.Object) + */ + @Override + public Object[] getChildren(Object object) { + if(object instanceof Resource) { + return ((Resource)object).getContents().toArray(); + } + return super.getChildren(object); + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#hasChildren(java.lang.Object) + */ + @Override + public boolean hasChildren(Object object) { + if(object instanceof Resource) { + return ((Resource)object).getContents().size() > 0; + } + return super.hasChildren(object); + } + } + + @Override + protected void fireSelectionChanged(SelectionChangedEvent event) { + // TODO Auto-generated method stub + super.fireSelectionChanged(event); + } +} diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeViewer.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusModelContentMergeViewer.java index 2d8326cc9b7..288dfd720e5 100644 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeViewer.java +++ b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/PapyrusModelContentMergeViewer.java @@ -14,6 +14,7 @@ package org.eclipse.papyrus.infra.emf.compare.ui.viewer;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import org.eclipse.compare.CompareConfiguration;
@@ -24,13 +25,11 @@ import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.papyrus.infra.emf.compare.ui.actions.CustomizationAction;
-import org.eclipse.papyrus.infra.emf.compare.ui.utils.LabelProviderUtil;
import org.eclipse.papyrus.infra.emf.compare.ui.utils.Utils;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IEditorPart;
-public class TransactionalModelContentMergeViewer extends ModelContentMergeViewer {
+public class PapyrusModelContentMergeViewer extends ModelContentMergeViewer {
/** the list of the metamodels referenced in the compared files. this field is used by the Customization Manager */
private Collection<EPackage> metamodels;
@@ -42,7 +41,7 @@ public class TransactionalModelContentMergeViewer extends ModelContentMergeViewe * @param parent
* @param config
*/
- public TransactionalModelContentMergeViewer(final Composite parent, final CompareConfiguration config) {
+ public PapyrusModelContentMergeViewer(final Composite parent, final CompareConfiguration config) {
super(parent, config);
}
@@ -70,7 +69,7 @@ public class TransactionalModelContentMergeViewer extends ModelContentMergeViewe */
@Override
protected ModelContentMergeTabFolder createModelContentMergeTabFolder(final Composite composite, final int side) {
- return new TransactionalModelContentMergeTabFolder(this, composite, side);
+ return new PapyrusModelContentMergeTabFolder(this, composite, side);
}
@@ -84,30 +83,25 @@ public class TransactionalModelContentMergeViewer extends ModelContentMergeViewe */
@Override
protected void createToolItems(final ToolBarManager tbm) {
-
//we add an action to change the applied customization
if(metamodels == null) {
metamodels = new HashSet<EPackage>();
}
- final IAction customizationAction = new CustomizationAction(metamodels);
+ final IAction customizationAction = new CustomizationAction(Collections.unmodifiableCollection(metamodels));
final ActionContributionItem customizationContributionItem = new ActionContributionItem(customizationAction);
tbm.insert(1, customizationContributionItem);
super.createToolItems(tbm);
-
}
-
/**
*
- * {@inheritDoc}
- *
+ * @see org.eclipse.emf.compare.ui.viewer.content.ModelContentMergeViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
+ *
* @param event
*/
@Override
- protected void handleDispose(final DisposeEvent event) {
- //TODO : et si l'éditeur que l'on ferme n'est pas celui au premier plan...
- final IEditorPart editor = org.eclipse.papyrus.infra.emf.compare.ui.utils.Utils.getCurrentEditor();
- LabelProviderUtil.INSTANCE.destroyLabelProvider(editor);
+ protected void handleDispose(DisposeEvent event) {
+ metamodels.clear();
super.handleDispose(event);
}
}
diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeDiffTab.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeDiffTab.java deleted file mode 100644 index 1810d734961..00000000000 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeDiffTab.java +++ /dev/null @@ -1,43 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2010 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: - * Tatiana Fesenko (CEA LIST) - Initial API and implementation - * - *****************************************************************************/ -package org.eclipse.papyrus.infra.emf.compare.ui.viewer; - -import org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder; -import org.eclipse.emf.compare.ui.viewer.content.part.diff.ModelContentMergeDiffTab; -import org.eclipse.swt.widgets.Composite; - - -/** - * The Structure Tab in the Merge Viewer. - */ -//duplicate code from tatiana -//TODO : verify the super class - -//TODO : useful? -public class TransactionalModelContentMergeDiffTab extends ModelContentMergeDiffTab { - - /** - * Instantiates a new uML model content merge diff tab. - * - * @param parentComposite - * the parent composite - * @param side - * the side - * @param parentFolder - * the parent folder - */ - public TransactionalModelContentMergeDiffTab(Composite parentComposite, int side, ModelContentMergeTabFolder parentFolder) { - super(parentComposite, side, parentFolder); - } -} diff --git a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeTabFolder.java b/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeTabFolder.java deleted file mode 100644 index dac0548da4e..00000000000 --- a/sandbox/org.eclipse.papyrus.infra.emf.compare.ui/src/org/eclipse/papyrus/infra/emf/compare/ui/viewer/TransactionalModelContentMergeTabFolder.java +++ /dev/null @@ -1,259 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2010 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: - * Tatiana Fesenko (CEA LIST) - Initial API and implementation - * Vincent Lorenzo (CEA LIST) - 349650: [Papyrus Merge] IndexOfBoundException - *****************************************************************************/ -package org.eclipse.papyrus.infra.emf.compare.ui.viewer; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.emf.common.notify.AdapterFactory; -import org.eclipse.emf.compare.diff.metamodel.ComparisonSnapshot; -import org.eclipse.emf.compare.ui.TypedElementWrapper; -import org.eclipse.emf.compare.ui.viewer.content.ModelContentMergeViewer; -import org.eclipse.emf.compare.ui.viewer.content.part.IModelContentMergeViewerTab; -import org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder; -import org.eclipse.emf.compare.util.AdapterUtils; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; -import org.eclipse.emf.facet.infra.browser.uicore.CustomizationManager; -import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.IContentProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.papyrus.infra.emf.compare.ui.provider.IRefreshViewer; -import org.eclipse.papyrus.infra.emf.compare.ui.provider.PapyrusLabelProvider; -import org.eclipse.papyrus.infra.emf.compare.ui.utils.LabelProviderUtil; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.PlatformUI; - - -/** - * The Class UMLModelContentMergeTabFolder. - */ -//duplicate code from tatiana -//TODO verify the super class -public class TransactionalModelContentMergeTabFolder extends ModelContentMergeTabFolder { - - /** The my uml viewer. */ - protected final TransactionalModelContentMergeViewer myUMLViewer; - - /** - * Instantiates a new uML model content merge tab folder. - * - * @param viewer the viewer - * @param composite the composite - * @param side the side - */ - public TransactionalModelContentMergeTabFolder(ModelContentMergeViewer viewer, Composite composite, int side) { - super(viewer, composite, side); - myUMLViewer = (TransactionalModelContentMergeViewer)viewer; - } - - - @Override - protected IModelContentMergeViewerTab createModelContentMergeDiffTab(Composite parent) { -// IModelContentMergeViewerTab tab = super.createModelContentMergeDiffTab(parent); - TransactionalModelContentMergeDiffTab diffTab = new TransactionalModelContentMergeDiffTab(parent, partSide, this); - diffTab.setContentProvider(createDiffTabContentProvider()); - IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); -// CustomizationManager manager = LabelProviderUtil.getCustomizationManager(activeEditor); -// diffTab.setLabelProvider(new PapyrusLabelProvider(manager)); - IRefreshViewer refresher = (IRefreshViewer)LabelProviderUtil.INSTANCE.getLabelProviderFor(activeEditor); - refresher.registerViewer(diffTab); - diffTab.setLabelProvider((IBaseLabelProvider)refresher); - return diffTab; - - } - - @Override - public void dispose() { -// Activator.getDefault(). - super.dispose(); - } -// -// /* (non-Javadoc) -// * @see org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder#createModelContentMergeViewerTab(org.eclipse.swt.widgets.Composite) -// */ -// @Override -// protected IModelContentMergeViewerTab createModelContentMergeViewerTab(Composite parent) { -// ModelContentMergePropertyTab propertyTab = new ModelContentMergePropertyTab(parent, partSide, this); -// propertyTab.setContentProvider(new UMLPropertyContentProvider()); -// return propertyTab; -// } -// -// /** -// * Creates the diff tab content provider. -// * -// * @return the i content provider -// */ -// protected IContentProvider createDiffTabContentProvider() { -// ComposedAdapterFactory adapterFactory = new UMLAdapterFactory(); -// AdapterFactoryContentProvider result = new AdapterFactoryContentProvider(adapterFactory) { -// -// @Override -// public Object[] getElements(Object object) { -// if(object instanceof RootObject) { -// return new Object[]{ ((RootObject)object).object }; -// } -// return super.getElements(object); -// } -// }; -// -// return result; -// } -// -// /* (non-Javadoc) -// * @see org.eclipse.emf.compare.ui.viewer.content.part.ModelContentMergeTabFolder#findMatchFromElement(org.eclipse.emf.ecore.EObject) -// */ -// protected EObject findMatchFromElement(EObject element) { -// EObject matchElement = super.findMatchFromElement(element); -// if(!myUMLViewer.isShowAllProperties() && matchElement instanceof Match2Elements) { -// if(myUMLViewer.getCurrentSelection().size()!=0){//see bug 349650 -// return new Match2ElementsWithDiff((Match2Elements)matchElement, myUMLViewer.getCurrentSelection().get(0)); -// } -// } -// return matchElement; -// } -// -// /** -// * Gets the selected tab. -// * -// * @return the selected tab -// */ -// public int getSelectedTab() { -// return tabFolder.getSelectionIndex(); -// } -// -// /** -// * Checks if is property tab. -// * -// * @param index the index -// * @return true, if is property tab -// */ -// public boolean isPropertyTab(int index) { -// final IModelContentMergeViewerTab currentTab = tabs.get(index); -// return (currentTab == getPropertyPart()); -// } - -//TODO : use the content provider from the new EMF-Compare - protected IContentProvider createDiffTabContentProvider() { -// private ModelContentMergeDiffTabContentProvider createContentProvider() { - - return new ModelContentMergeDiffTabContentProvider(AdapterUtils.getAdapterFactory()); -// } - - // ComposedAdapterFactory adapterFactory = new UMLAdapterFactory(); -// ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(); -// AdapterFactoryContentProvider result = new AdapterFactoryContentProvider(adapterFactory) { -// -// @Override -// public Object[] getElements(Object object) { -//// if(object instanceof RootObject) { -//// return new Object[]{ ((RootObject)object).object }; -//// } -// return super.getElements(object); -// } -// } - -// return result; - } - - - /** - * This implementation of an {@link AdapterFactoryContentProvider} will strip ComparisonSnapshots out of - * the view. - * - * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> - */ - //duplicate code from EMF-Compare :ModelContentMergeDiffTab.ModelContentMergeDiffTabContentProvider - public class ModelContentMergeDiffTabContentProvider extends AdapterFactoryContentProvider { - /** - * Default constructor. Delegates to the super implementation. - * - * @param factory - * Factory to get labels and icons from. - */ - public ModelContentMergeDiffTabContentProvider(AdapterFactory factory) { - super(factory); - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getElements(java.lang.Object) - */ - @SuppressWarnings("unchecked") - @Override - public Object[] getElements(Object object) { - // overwritten to ensure contents of ResourceSets, List<Resource>, and Resource are correclty - // returned. - Object[] result = null; - if (object instanceof ResourceSet) { - final List<Resource> resources = ((ResourceSet)object).getResources(); - final List<Resource> elements = new ArrayList<Resource>(resources.size()); - for (final Resource resource : resources) { - if (resource.getContents().isEmpty() - || !(resource.getContents().get(0) instanceof ComparisonSnapshot)) { - elements.add(resource); - } - } - result = elements.toArray(); - } else if (object instanceof TypedElementWrapper) { - result = new Object[] {((EObject)object).eResource(), }; - } else if (object instanceof List) { - // we may also display a list of resources - result = ((List)object).toArray(); - } else if (object instanceof Resource) { - // return contents of resource - result = ((Resource)object).getContents().toArray(); - } else { - result = super.getElements(object); - } - return result; - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#getChildren(java.lang.Object) - */ - @Override - public Object[] getChildren(Object object) { - if (object instanceof Resource) { - return ((Resource)object).getContents().toArray(); - } - return super.getChildren(object); - } - - /** - * {@inheritDoc} - * - * @see org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider#hasChildren(java.lang.Object) - */ - @Override - public boolean hasChildren(Object object) { - if (object instanceof Resource) { - return ((Resource)object).getContents().size() > 0; - } - return super.hasChildren(object); - } - } - - @Override - protected void fireSelectionChanged(SelectionChangedEvent event) { - // TODO Auto-generated method stub - super.fireSelectionChanged(event); - } -} |