Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Willink2019-11-23 17:40:09 +0000
committerEd Willink2019-11-25 11:42:19 +0000
commitdfc8c111212453569724afcc89b64122f585364f (patch)
tree59a5935bee9de96908b228bb16fce2d1f126dc10 /org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco
parentecc2d19d0671a378372c9a124fa181c437549aaa (diff)
downloadorg.eclipse.modisco-dfc8c111212453569724afcc89b64122f585364f.tar.gz
org.eclipse.modisco-dfc8c111212453569724afcc89b64122f585364f.tar.xz
org.eclipse.modisco-dfc8c111212453569724afcc89b64122f585364f.zip
[552988] Move GMT MoDisco Plugins to MoDisco
Diffstat (limited to 'org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco')
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/Messages.java189
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/MoDiscoBrowserPlugin.java120
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/BrowseAction.java33
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/DecreaseFontSizeAction.java36
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ExecuteSelectedQueryAction.java46
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IBrowserActionBarContributor.java20
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IncreaseFontSizeAction.java36
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadCustomizationsAction.java130
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadFacetsAction.java362
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenResourceInMoDiscoBrowserAction.java62
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenTableEditorAction.java100
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RefreshViewerAction.java45
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RemoveQueryAction.java49
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RestoreFontSizeAction.java36
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/SelectQueryAction.java83
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowBothPanelsAction.java36
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyInstancesPanelAction.java35
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyTypesPanelAction.java35
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowPropertiesViewAction.java46
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnLinkCommand.java170
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnModelElementCommand.java279
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropUtils.java55
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclass.java214
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclasses.java259
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ItemsFactoryEx.java41
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/LinkItemEx.java99
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/MetaclassList.java75
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ModelElementItemEx.java121
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/QueryItem.java200
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/SearchResults.java47
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/EnableDerivedLinksPromptDialog.java80
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/ErrorsDialog.java191
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/LoadCustomizationsDialog.java566
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserActionBarContributor.java787
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserConfiguration.java187
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserContentProvider.java155
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserEditingDomain.java82
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserLabelProvider.java212
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserNavigationLocation.java170
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserSettingsPersistence.java246
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserUtils.java281
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/DragAdapter.java63
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/EcoreBrowser.java3275
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/FacetTooltip.java174
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/IBrowserSelectionChangedListener.java23
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/LeftPane.java91
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassUnwrappingSelectionProvider.java37
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewToolBar.java221
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewer.java861
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewerMenuManager.java118
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/NonBlockingElementComputation.java133
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/ReadOnlyCommandStack.java63
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/TreeToolBar.java360
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/WorkspaceChangeListener.java118
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ColumnDescription.java86
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ITableEditor.java20
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditor.java1118
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorContentProvider.java36
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorFactory.java129
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorInput.java191
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorLabelProvider.java260
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorToolBar.java150
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElement.java23
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElementWithContext.java26
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableSorter.java118
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/LoadingDepthRegistry.java107
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/listeners/DoubleClickListener.java25
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/messages.properties169
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/opener/BrowserOpener.java71
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/BrowserPreferencePage.java72
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceConstants.java47
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceInitializer.java33
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQueriesManager.java104
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQuery.java94
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queryResultDisplayers/TableQueryResultDisplayer.java29
-rw-r--r--org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/util/EditingSupportUtil.java108
76 files changed, 0 insertions, 14569 deletions
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/Messages.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/Messages.java
deleted file mode 100644
index 003228179..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/Messages.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Payneau (Mia-Software) - Enable editability
- * Nicolas Guyomar (Mia-Software) - Code Synchronisation
- * Nicolas Guyomar (Mia_software) - Bug 333651 Remove of the MoDisco EPackage view and of the metamodel browsing button
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser;
-
-import org.eclipse.osgi.util.NLS;
-
-public final class Messages extends NLS {
- private static final String BUNDLE_NAME = "org.eclipse.gmt.modisco.infra.browser.messages"; //$NON-NLS-1$
-
- static {
- NLS.initializeMessages(Messages.BUNDLE_NAME, Messages.class);
- }
-
- private Messages() {
- // make uninstantiable
- }
-
- public static String DialogUriSelection_RegisteredEPackages;
- public static String DialogUriSelection_title_OpenModelFromEMFRegistry;
- public static String EcoreActionBarContributor_actionBrowse;
- public static String EcoreActionBarContributor_cannotOpenTableEditorNotModelElements;
- public static String EcoreActionBarContributor_decreaseFontSize;
- public static String EcoreActionBarContributor_elementsSelection;
- public static String EcoreActionBarContributor_elementsSelectionUnknowMetamodel;
- public static String EcoreActionBarContributor_increaseFontSize;
- public static String EcoreActionBarContributor_restoreFontSize;
- public static String EcoreBrowser_cannotFindEPackageWithThatURI;
- public static String EcoreBrowser_cannotOpenModelFromURI;
- public static String EcoreBrowser_chooseLoadProxiesDepth;
- public static String EcoreBrowser_error;
- public static String EcoreBrowser_errorLoadingModel;
- public static String EcoreBrowser_errorLoadingResource;
- public static String EcoreBrowser_errors;
- public static String EcoreBrowser_errorsAndWarnings;
- public static String EcoreBrowser_errorSavingResource;
- public static String EcoreBrowser_info;
- public static String EcoreBrowser_infos;
- public static String EcoreBrowser_instances;
- public static String EcoreBrowser_jobName_SearchInModelEditor;
- public static String EcoreBrowser_jobOpeningModelInMoDiscoBrowser;
- public static String EcoreBrowser_loadingModelPlaceholder;
- public static String EcoreBrowser_typeFilterText;
- public static String InstancesForMetaclass_notFound;
-
- public static String LoadCustomizationsDialog_Add;
- public static String LoadCustomizationsDialog_AddAll;
- public static String LoadCustomizationsDialog_Loading;
- public static String LoadCustomizationsDialog_loadReferencedFacetsCheckbox;
- public static String LoadCustomizationsDialog_Remove;
- public static String LoadCustomizationsDialog_RemoveAll;
- public static String LoadCustomizationsDialog_title_LoadCustomizations;
- public static String LoadFacetsAction_LoadingFacet;
- public static String LoadFacetsAction_LoadingFacets;
- public static String LoadFacetsDialog_LoadedCustomizations;
- public static String LoadFacetsDialog_AvailableCustomizationsLabel;
- public static String LoadFacetsDialog_FilterTextMessage;
- public static String LoadFacetsDialog_AddTooltip;
- public static String LoadFacetsDialog_RemoveTooltip;
- public static String LoadFacetsDialog_AddAllTooltip;
- public static String LoadFacetsDialog_RemoveAllTooltip;
- public static String LoadFacetsDialog_UpLabel;
- public static String LoadFacetsDialog_DownLabel;
-
- public static String BrowserActionBarContributor_chooseFacetToLoad;
- public static String BrowserActionBarContributor_chooseMetamodel;
- public static String BrowserActionBarContributor_delete;
- public static String BrowserActionBarContributor_deleteButNotUnlink;
- public static String BrowserActionBarContributor_deleteElement;
- public static String BrowserActionBarContributor_deleteOrRemove;
- public static String BrowserActionBarContributor_deleteOrRemove2;
- public static String BrowserActionBarContributor_dialogTitle_LoadFacets;
- public static String BrowserActionBarContributor_loadCustomization;
- public static String BrowserActionBarContributor_loadingCustomizationFailed;
- public static String BrowserActionBarContributor_loadFacets;
- public static String BrowserActionBarContributor_loadMetamodel;
- public static String BrowserActionBarContributor_missingRequiredFacet;
- public static String BrowserActionBarContributor_remove;
- public static String BrowserActionBarContributor_removeButNotDelete;
- public static String BrowserActionBarContributor_removeElement;
- public static String BrowserContentProvider_computingChildren;
- public static String BrowserNavigationLocation_emptySelection;
- public static String BrowserNavigationLocation_multiSelection;
- public static String BrowserNavigationLocation_singleSelection;
- public static String BrowserNavigationLocation_singleSelectionUnknownClass;
- public static String BrowserPreferencePage_askLoadingDepthEachTime;
- public static String BrowserPreferencePage_defaultLoadingDepth;
- public static String BrowserPreferencePage_overridesMetamodelSpecificSettings;
- public static String MetaclassViewerMenuManager_instancesOf;
- public static String MetaclassViewToolBar_displayInstancesOfSubclasses;
- public static String MetaclassViewToolBar_groupByPackage;
- public static String MetaclassViewToolBar_showDerivationTree;
- public static String MetaclassViewToolBar_showEmptyMetaclasses;
- public static String MetaclassViewToolBar_showFullQualifiedNames;
- public static String MetaclassViewToolBar_sortByCount;
- public static String MetaclassViewToolBar_sortByName;
- public static String MetaclassViewToolBar_showViewMenu;
- public static String ModelElementItem_nullQuerySelected;
-
- public static String openTableEditorOnSelection;
- public static String EcoreActionBarContributor_showPropertiesView;
- public static String RefreshViewerAction_refreshViewer;
-
- public static String EcoreBrowser_noObjectSelected;
- public static String EcoreBrowser_noSynchronisationExtensionFound;
- public static String EcoreBrowser_notAPositiveInteger;
- public static String EcoreBrowser_selectDepthReferencedResources;
- public static String EcoreBrowser_separator;
- public static String EcoreBrowser_singleObjectSelected;
- public static String EcoreBrowser_metaclasses;
- public static String EcoreBrowser_modelContainsProxies;
- public static String EcoreBrowser_MoDisco_Model_Browser;
- public static String EcoreBrowser_multiObjectSelected;
- public static String EcoreBrowser_refreshingModelViewers;
- public static String EcoreBrowser_ReloadingFacets;
- public static String EcoreBrowser_warning;
- public static String EcoreBrowser_warnings;
-
- public static String EnableDerivedLinksPromptDialog_enableDerivedLinks;
- public static String EnableDerivedLinksPromptDialog_enableDerivedLinksLong;
- public static String EnableDerivedLinksPromptDialog_rememberDecision;
- public static String SelectQueryAction_addQueryOnElement;
- public static String SelectQueryAction_addQueryOnElements;
- public static String ShowBothPanelsAction_title;
- public static String ShowOnlyInstancesPanelAction_title;
- public static String ShowOnlyTypesPanelAction_title;
-
- public static String ExecuteQueryAction_executeSelectedQuery;
- public static String ExecuteQueryAction_executeQueries;
-
- public static String RemoveQueryAction_removeQuery;
- public static String RemoveQueryAction_removeQueries;
-
- public static String TableEditor_browse;
- public static String TableEditor_columnName_Label;
- public static String TableEditor_columnName_Metaclass;
- public static String TableEditor_ColumnName_queryContext;
- public static String TableEditor_contentsDescription;
- public static String TableEditor_Description_modelQueryResults;
- public static String TableEditor_tableViewer;
- public static String TableEditorInput_editorName_TableViewer;
- public static String TableEditorInput_tooltip_TableViewer;
- public static String TableEditorLabelProvider_error;
- public static String TableEditorLabelProvider_indexOutOfBounds;
- public static String TableEditorLabelProvider_NA;
- public static String TableEditorLabelProvider_none;
- public static String TableEditorLabelProvider_nullContext;
- public static String TableEditorLabelProvider_unexpectedColumnType;
- public static String TableEditorToolBar_tooltip_HideEmtpyColumns;
- public static String TableEditorToolBar_tooltip_OnlyShowCommonColumns;
- public static String TableEditorToolBar_tooltip_sortColumnsByType;
- public static String TreeToolBar_collapseAll;
- public static String TreeToolBar_showAttributes;
- public static String TreeToolBar_showContainer;
- public static String TreeToolBar_showDerivedLinks;
- public static String TreeToolBar_showEmptyAttributes;
- public static String TreeToolBar_showEmptyLinks;
- public static String TreeToolBar_showFullQualifiedNames;
- public static String TreeToolBar_showMultiplicity;
- public static String TreeToolBar_showOppositeLinks;
- public static String TreeToolBar_showOrdering;
- public static String TreeToolBar_showTypeOfLinks;
- public static String TreeToolBar_sortInstances;
- public static String TreeToolBar_sortLinks;
- public static String TreeToolBar_sortLinksByType;
- public static String TreeToolBar_showElementIDs;
- public static String TreeToolBar_showURI;
- public static String TreeToolBar_synchronizeSourceCode;
-
- public static String UI_FileConflict_label;
- public static String WARN_FileConflict;
- public static String UI_ErrorFile_message;
- public static String UI_modiscoEditor_menu;
- public static String UI_CreateChild_menu_item;
-
- public static String ErrorsDialog_errors;
-
- // public static String UI_CreateSibling_menu_item;
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/MoDiscoBrowserPlugin.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/MoDiscoBrowserPlugin.java
deleted file mode 100644
index cac36f45d..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/MoDiscoBrowserPlugin.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.common.EMFPlugin;
-import org.eclipse.emf.common.ui.EclipseUIPlugin;
-import org.eclipse.emf.common.util.ResourceLocator;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-
-/** This is the central singleton for the MoDisco model browser plugin. */
-public final class MoDiscoBrowserPlugin extends EMFPlugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.gmt.modisco.infra.browser"; //$NON-NLS-1$
-
- /** Keep track of the singleton. */
- // public static final MoDiscoBrowserPlugin INSTANCE = new
- // MoDiscoBrowserPlugin();
-
- /** Keep track of the singleton. */
- private static Implementation plugin;
-
- /** Create the instance. */
- public MoDiscoBrowserPlugin() {
- super(new ResourceLocator[] {});
- }
-
- /**
- * Returns the singleton instance of the Eclipse plugin.
- *
- * @return the singleton instance.
- */
- @Override
- public ResourceLocator getPluginResourceLocator() {
- return MoDiscoBrowserPlugin.plugin;
- }
-
- /**
- * Returns the singleton instance of the Eclipse plugin.
- *
- * @return the singleton instance.
- */
- public static Implementation getPlugin() {
- return MoDiscoBrowserPlugin.plugin;
- }
-
- /** The actual implementation of the Eclipse <b>Plugin</b>. */
- public static class Implementation extends EclipseUIPlugin {
- /** Creates an instance. */
- public Implementation() {
- super();
-
- // Remember the static instance.
- MoDiscoBrowserPlugin.plugin = this;
- }
- }
-
- /**
- * Returns an image descriptor for the image file at the given plug-in
- * relative path
- *
- * @param path
- * the path
- * @return the image descriptor
- */
- public static ImageDescriptor getImageDescriptor(final String path) {
- return AbstractUIPlugin.imageDescriptorFromPlugin(MoDiscoBrowserPlugin.PLUGIN_ID, path);
- }
-
- public static void logException(final Throwable e) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.ERROR, MoDiscoBrowserPlugin.PLUGIN_ID, IStatus.OK, e
- .getLocalizedMessage(), e));
- }
-
- public static void logException(final String msg, final Throwable e) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.ERROR, MoDiscoBrowserPlugin.PLUGIN_ID, IStatus.OK, msg, e));
- }
-
- public static void logError(final String msg) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.ERROR, MoDiscoBrowserPlugin.PLUGIN_ID, msg + getPosition()));
- }
-
- private static String getPosition() {
- StackTraceElement element = new Exception().getStackTrace()[2];
- return " \n[" + element.getClassName() + "#" + element.getMethodName() + " : " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- + element.getLineNumber() + "]"; //$NON-NLS-1$
- }
-
- public static void logWarning(final String msg) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.WARNING, MoDiscoBrowserPlugin.PLUGIN_ID, msg + getPosition()));
- }
-
- public static void logInfo(final String msg) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.INFO, MoDiscoBrowserPlugin.PLUGIN_ID, msg + getPosition()));
- }
-
- public static void logInfo(final String msg, final Throwable e) {
- MoDiscoBrowserPlugin.plugin.getLog().log(
- new Status(IStatus.INFO, MoDiscoBrowserPlugin.PLUGIN_ID, IStatus.OK, msg, e));
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/BrowseAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/BrowseAction.java
deleted file mode 100644
index 0d2f84960..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/BrowseAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.action.Action;
-
-public class BrowseAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public BrowseAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.EcoreActionBarContributor_actionBrowse);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.browse();
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/DecreaseFontSizeAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/DecreaseFontSizeAction.java
deleted file mode 100644
index bbebbe900..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/DecreaseFontSizeAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class DecreaseFontSizeAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public DecreaseFontSizeAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.EcoreActionBarContributor_decreaseFontSize, IAction.AS_PUSH_BUTTON);
- setImageDescriptor(ImageProvider.getInstance().getDecreaseFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.setFontSizeDelta(browser.getFontSizeDelta() - 1);
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ExecuteSelectedQueryAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ExecuteSelectedQueryAction.java
deleted file mode 100644
index 4da871eaa..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ExecuteSelectedQueryAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.util.Iterator;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.core.QueryItem;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-
-/** Executes the selected query(-ies) */
-public class ExecuteSelectedQueryAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public ExecuteSelectedQueryAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.ExecuteQueryAction_executeSelectedQuery);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- ISelection selection = this.browserActionBarContributor.getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- Object selectedElement = iterator.next();
- if (selectedElement instanceof QueryItem) {
- QueryItem queryItem = (QueryItem) selectedElement;
- queryItem.getQuery().executeQuery();
- }
- }
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IBrowserActionBarContributor.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IBrowserActionBarContributor.java
deleted file mode 100644
index 548bc0fd5..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IBrowserActionBarContributor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.viewers.ISelection;
-
-public interface IBrowserActionBarContributor {
- EcoreBrowser getBrowser();
-
- ISelection getSelection();
-} \ No newline at end of file
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IncreaseFontSizeAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IncreaseFontSizeAction.java
deleted file mode 100644
index 814252a62..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/IncreaseFontSizeAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class IncreaseFontSizeAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public IncreaseFontSizeAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.EcoreActionBarContributor_increaseFontSize, IAction.AS_PUSH_BUTTON);
- setImageDescriptor(ImageProvider.getInstance().getIncreaseFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.setFontSizeDelta(browser.getFontSizeDelta() + 1);
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadCustomizationsAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadCustomizationsAction.java
deleted file mode 100644
index 400c4e70c..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadCustomizationsAction.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.custom.MetamodelView;
-import org.eclipse.gmt.modisco.infra.browser.custom.TypeView;
-import org.eclipse.gmt.modisco.infra.browser.dialogs.LoadCustomizationsDialog;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ModelUtils;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.FacetSet;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetSetCatalog;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osgi.util.NLS;
-
-public class LoadCustomizationsAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public LoadCustomizationsAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.BrowserActionBarContributor_loadCustomization, IAction.AS_PUSH_BUTTON);
- setToolTipText(Messages.BrowserActionBarContributor_loadCustomization);
- setImageDescriptor(ImageProvider.getInstance().getAddUiCustomIconDescriptor());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
-
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- final List<MetamodelView> registeredCustomizations = browser.getBrowserConfiguration()
- .getAppearanceConfiguration().getCustomizationEngine()
- .getRegisteredCustomizations();
-
- final LoadCustomizationsDialog loadCustomizationsDialog = new LoadCustomizationsDialog(
- browser.getSite().getShell(), registeredCustomizations,
- browser.getReferencedEPackages());
- if (loadCustomizationsDialog.open() == Window.OK) {
- try {
- List<MetamodelView> selectedCustomizations = loadCustomizationsDialog
- .getSelectedCustomizations();
-
- if (loadCustomizationsDialog.isLoadRequiredFacetsSelected()) {
- // load facets corresponding to customizations
- loadFacetsForCustomizations(selectedCustomizations, browser);
- }
-
- browser.loadCustomizations(selectedCustomizations);
-
- } catch (final Exception e) {
- MoDiscoBrowserPlugin.logException(
- Messages.BrowserActionBarContributor_loadingCustomizationFailed, e);
- }
- }
- }
- }
-
- private void loadFacetsForCustomizations(final List<MetamodelView> customizations,
- final EcoreBrowser browser) {
- final Set<Facet> referencedFacets = new HashSet<Facet>();
- final Collection<FacetSet> facetSets = FacetSetCatalog.getSingleton().getAllFacetSets();
-
- for (MetamodelView customization : customizations) {
- String metamodelURI = customization.getMetamodelURI();
- // find customized FacetSet
- FacetSet customizedFacetSet = null;
- if (metamodelURI != null) {
- for (FacetSet facetSet : facetSets) {
- if (metamodelURI.equals(facetSet.getNsURI())) {
- customizedFacetSet = facetSet;
- break;
- }
- }
- }
- if (customizedFacetSet == null) {
- continue;
- }
-
- // find customized Facets
- EList<TypeView> types = customization.getTypes();
- for (TypeView typeView : types) {
- String metaclassName = typeView.getMetaclassName();
- Facet facet = findFacetWithFullyQualifiedName(metaclassName, customizedFacetSet);
- if (facet != null) {
- referencedFacets.add(facet);
- } else {
- MoDiscoBrowserPlugin.logWarning(NLS.bind(
- Messages.BrowserActionBarContributor_missingRequiredFacet,
- new Object[] { metaclassName, customizedFacetSet.getName(),
- customization.getName() }));
- }
- }
-
- LoadFacetsAction.loadFacets(referencedFacets, browser);
- }
- }
-
- private Facet findFacetWithFullyQualifiedName(final String metaclassName,
- final FacetSet customizedFacetSet) {
- EList<Facet> facets = customizedFacetSet.getFacets();
- for (Facet facet : facets) {
- String facetName = ModelUtils.getMetaclassQualifiedName(facet);
- if (metaclassName.equals(facetName)) {
- return facet;
- }
- }
- return null;
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadFacetsAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadFacetsAction.java
deleted file mode 100644
index 209ed528a..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/LoadFacetsAction.java
+++ /dev/null
@@ -1,362 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.dialogs.EnableDerivedLinksPromptDialog;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.preferences.PreferenceConstants;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ModelUtils;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.util.ImageUtils;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.FacetPackage;
-import org.eclipse.gmt.modisco.infra.facet.FacetSet;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetSetCatalog;
-import org.eclipse.gmt.modisco.infra.facet.ui.views.FacetSetContentProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.DialogSettings;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
-
-public class LoadFacetsAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public LoadFacetsAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.BrowserActionBarContributor_loadFacets, IAction.AS_PUSH_BUTTON);
- this.browserActionBarContributor = browserActionBarContributor;
- setToolTipText(Messages.BrowserActionBarContributor_loadFacets);
- setImageDescriptor(ImageProvider.getInstance().getFacetIconDescriptor());
- }
-
- private static class LoadFacetsDialog extends CheckedTreeSelectionDialog {
- private static final String LOAD_FACETS_DIALOG = "LoadFacetsDialog"; //$NON-NLS-1$
- private static final String EXPANDED_ELEMENTS = "expandedElements"; //$NON-NLS-1$
-
- // private Label messageArea;
- // private Composite selectionButtons;
-
- public LoadFacetsDialog(final Shell parent, final ILabelProvider labelProvider,
- final ITreeContentProvider contentProvider, final Collection<EPackage> ePackages) {
- super(parent, labelProvider, contentProvider);
- // show only Facets corresponding to the current EPackages or
- // referenced EPackages
- final Set<EPackage> allReferencedPackages = new HashSet<EPackage>();
-
- for (EPackage ePackage : ePackages) {
- allReferencedPackages.add(ePackage);
- final Set<EPackage> referencedPackages = ModelUtils
- .computeReferencedPackages(ePackage);
- allReferencedPackages.addAll(referencedPackages);
- }
-
- addFilter(new ViewerFilter() {
- @Override
- public boolean select(final Viewer viewer, final Object parentElement,
- final Object element) {
- if (element instanceof FacetSet) {
- FacetSet facetSet = (FacetSet) element;
- if (facetSet.getExtendedPackage() == null) {
- return true;
- }
- EPackage extendedPackage = facetSet.getExtendedPackage();
- return allReferencedPackages.contains(extendedPackage);
- }
- return true;
- }
- });
- }
-
- @Override
- public int open() {
- restoreExpandedElements();
- return super.open();
- }
-
- @Override
- public boolean close() {
- saveExpandedElements();
- return super.close();
- }
-
- public void saveExpandedElements() {
- try {
- String filename = getSettingsFilename();
- DialogSettings settings = new DialogSettings(
- LoadFacetsAction.LoadFacetsDialog.LOAD_FACETS_DIALOG);
-
- List<String> expandedFacetSets = new ArrayList<String>();
-
- Object[] expandedElements = getTreeViewer().getExpandedElements();
- for (Object expandedElement : expandedElements) {
- if (expandedElement instanceof FacetSet) {
- FacetSet facetSet = (FacetSet) expandedElement;
- expandedFacetSets.add(facetSet.getName());
- }
- }
- String[] array = expandedFacetSets.toArray(new String[expandedFacetSets.size()]);
- settings.put(LoadFacetsAction.LoadFacetsDialog.EXPANDED_ELEMENTS, array);
- settings.save(filename);
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- private String getSettingsFilename() {
- IPath stateLocation = MoDiscoBrowserPlugin.getPlugin().getStateLocation();
- String filename = stateLocation.append(
- LoadFacetsAction.LoadFacetsDialog.LOAD_FACETS_DIALOG).toOSString();
- return filename;
- }
-
- public void restoreExpandedElements() {
- try {
- String filename = getSettingsFilename();
- DialogSettings settings = new DialogSettings(
- LoadFacetsAction.LoadFacetsDialog.LOAD_FACETS_DIALOG);
- if (new File(filename).isFile()) {
- settings.load(filename);
- String[] array = settings
- .getArray(LoadFacetsAction.LoadFacetsDialog.EXPANDED_ELEMENTS);
-
- final Collection<FacetSet> facetSets = FacetSetCatalog.getSingleton()
- .getAllFacetSets();
- final List<FacetSet> expandedFacetSets = new ArrayList<FacetSet>();
- for (String expandedFacetSetName : array) {
- for (FacetSet facetSet : facetSets) {
- if (facetSet.getName() != null
- && facetSet.getName().equals(expandedFacetSetName)) {
- expandedFacetSets.add(facetSet);
- }
- }
- }
- setExpandedElements(expandedFacetSets.toArray());
- }
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- // @Override
- // public void setInput(final Object input) {
- // super.setInput(input);
- // getTreeViewer().setInput(input);
- // if (input != null) {
- // //this.messageArea.setText(""); //$NON-NLS-1$
- // this.messageArea.setEnabled(true);
- // this.selectionButtons.setEnabled(true);
- // getTreeViewer().getTree().setEnabled(true);
- // }
- // }
- //
- // public void refresh() {
- // getTreeViewer().refresh();
- // }
- //
- // @Override
- // protected Label createMessageArea(final Composite composite) {
- // this.messageArea = super.createMessageArea(composite);
- // return this.messageArea;
- // }
- //
- // @Override
- // protected Composite createSelectionButtons(final Composite composite)
- // {
- // this.selectionButtons = super.createSelectionButtons(composite);
- // return this.selectionButtons;
- // }
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- BusyIndicator.showWhile(null, new Runnable() {
- public void run() {
- FacetSetCatalog.getSingleton().waitUntilBuilt();
- }
- });
- openDialog(browser);
- // FacetSetCatalog.getSingleton().whenBuilt(new Runnable() {
- // public void run() {
- // Display.getDefault().syncExec(new Runnable() {
- // public void run() {
- // openDialog(browser);
- // }
- // });
- // }
- // });
- }
- }
-
- protected void openDialog(final EcoreBrowser browser) {
- final ITreeContentProvider treeContentProvider = new FacetSetContentProvider(
- FacetPackage.eINSTANCE.getFacet());
-
- final LoadFacetsDialog dialog = new LoadFacetsDialog(null, this.labelProvider,
- treeContentProvider, browser.getReferencedEPackages());
- dialog.setContainerMode(true);
- dialog.setHelpAvailable(false);
- dialog.setTitle(Messages.BrowserActionBarContributor_dialogTitle_LoadFacets);
- dialog.setMessage(Messages.BrowserActionBarContributor_chooseFacetToLoad);
-
- final Collection<FacetSet> facetSets = FacetSetCatalog.getSingleton().getAllFacetSets();
- dialog.setInput(facetSets.toArray());
- dialog.setInitialElementSelections(new ArrayList<Facet>(browser.getBrowserConfiguration()
- .getAppearanceConfiguration().getLoadedFacets()));
-
- if (dialog.open() == Window.OK) {
- final Object[] result = dialog.getResult();
- browser.getBrowserConfiguration().getAppearanceConfiguration().clearFacets();
- final HashSet<Facet> facetsToLoad = new HashSet<Facet>();
- boolean promptShowDerivedLinks = false;
- for (final Object resultElement : result) {
- if (resultElement instanceof Facet) {
- final Facet facet = (Facet) resultElement;
- facetsToLoad.add(facet);
- if (!facet.getEReferences().isEmpty() || !facet.getEAttributes().isEmpty()) {
- promptShowDerivedLinks = true;
- }
- } else if (!(resultElement instanceof FacetSet)) {
- throw new RuntimeException("Unexpected element type"); //$NON-NLS-1$
- }
- }
-
- if (promptShowDerivedLinks
- && !this.browserActionBarContributor.getBrowser().isShowDerivedLinks()) {
- maybeShowDerivedLinks();
- }
-
- loadFacets(facetsToLoad, browser);
- }
- }
-
- public static void loadFacets(final Collection<Facet> facetsToLoad, final EcoreBrowser browser) {
- final Object loadFacetsFamily = new Object();
- for (final Facet facetToLoad : facetsToLoad) {
- Job loadFacetsJob = new Job(Messages.LoadFacetsAction_LoadingFacet + facetToLoad.getName()) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- browser.getBrowserConfiguration().getAppearanceConfiguration()
- .loadFacet(facetToLoad);
- return Status.OK_STATUS;
- }
-
- @Override
- public boolean belongsTo(final Object family) {
- if (family == loadFacetsFamily) {
- return true;
- }
- return super.belongsTo(family);
- }
- };
- loadFacetsJob.setPriority(Job.LONG);
- loadFacetsJob.schedule();
- }
-
- Job job = new Job(Messages.LoadFacetsAction_LoadingFacets) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- try {
- Job.getJobManager().join(loadFacetsFamily, monitor);
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- return Status.CANCEL_STATUS;
- }
- if (facetsToLoad.size() > 0) {
- // since customizations can apply to facets, reload
- // customizations
- browser.getBrowserConfiguration().getAppearanceConfiguration()
- .getCustomizationEngine().loadCustomizations();
- }
- // browser.reloadModel();
- // for modified facets
- browser.getBrowserConfiguration().getInstancesForMetaclasses()
- .buildDerivationTree();
- browser.getBrowserConfiguration().getAppearanceConfiguration().touch();
- browser.refreshDelayed(true);
- return Status.OK_STATUS;
- }
- };
- job.setPriority(Job.LONG);
- job.schedule();
- }
-
- private void maybeShowDerivedLinks() {
- IPreferenceStore preferenceStore = MoDiscoBrowserPlugin.getPlugin().getPreferenceStore();
- String pref = preferenceStore
- .getString(PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_SETTING);
- boolean showDerivedLinks = false;
- if (PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_ASK.equals(pref)) {
- showDerivedLinks = EnableDerivedLinksPromptDialog.open(null);
- } else if (PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_ALWAYS.equals(pref)) {
- showDerivedLinks = true;
- } else if (PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_NEVER.equals(pref)) {
- showDerivedLinks = false;
- }
-
- if (showDerivedLinks) {
- this.browserActionBarContributor.getBrowser().setShowDerivedLinks(true);
- this.browserActionBarContributor.getBrowser().refreshToolbar();
- }
-
- }
-
- private final LabelProvider labelProvider = new LabelProvider() {
- @Override
- public String getText(final Object element) {
- String label;
- if (element instanceof FacetSet) {
- final FacetSet facetSet = (FacetSet) element;
- label = facetSet.getName();
- } else if (element instanceof Facet) {
- final Facet facet = (Facet) element;
- label = facet.getName();
- } else if (element == null) {
- label = "null"; //$NON-NLS-1$
- } else {
- label = element.getClass().getName();
- }
- return label;
- }
-
- @Override
- public Image getImage(final Object element) {
- return ImageUtils.getImage(element);
- }
- };
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenResourceInMoDiscoBrowserAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenResourceInMoDiscoBrowserAction.java
deleted file mode 100644
index 1564f3edd..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenResourceInMoDiscoBrowserAction.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.editorInputs.ResourceEditorInput;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.ide.IDE;
-
-/** Opens the selected {@link Resource} in the {@link EcoreBrowser} */
-public class OpenResourceInMoDiscoBrowserAction implements IObjectActionDelegate {
-
- private ISelection fCurrentSelection;
- private IWorkbenchPart fTargetPart;
-
- public OpenResourceInMoDiscoBrowserAction() {
- // nothing
- }
-
- public void run(final IAction action) {
- if (this.fCurrentSelection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) this.fCurrentSelection;
- Object selectedElement = structuredSelection.getFirstElement();
- if (selectedElement instanceof Resource) {
- Resource resource = (Resource) selectedElement;
- IWorkbenchPage page = this.fTargetPart.getSite().getPage();
- try {
- IDE.openEditor(page, new ResourceEditorInput(resource), EcoreBrowser.EDITOR_ID,
- true);
- } catch (PartInitException e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- }
- }
- }
-
- public void selectionChanged(final IAction action, final ISelection selection) {
- this.fCurrentSelection = selection;
- }
-
- public void setActivePart(final IAction action, final IWorkbenchPart targetPart) {
- this.fTargetPart = targetPart;
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenTableEditorAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenTableEditorAction.java
deleted file mode 100644
index 79d8c57ea..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/OpenTableEditorAction.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditor;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditorFactory;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osgi.util.NLS;
-
-public class OpenTableEditorAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public OpenTableEditorAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.openTableEditorOnSelection);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- final ISelection selection = this.browserActionBarContributor.getSelection();
-
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- if (structuredSelection.size() == 1
- && structuredSelection.getFirstElement() instanceof LinkItem) {
- final LinkItem linkItemProvider = (LinkItem) structuredSelection
- .getFirstElement();
-
- openOn(browser.getBrowserConfiguration(), linkItemProvider);
- } else {
- openOn(browser.getBrowserConfiguration(), structuredSelection);
- }
- }
- }
- }
-
- private void openOn(final BrowserConfiguration browserConfiguration, final LinkItem linkItem) {
- final Collection<Object> childrenElements = linkItem.getChildrenElements();
- final List<Object> elementsList = new ArrayList<Object>(childrenElements);
-
- final String description = TableEditor.getEditorDescriptionFor(linkItem.getParent(),
- linkItem.getReference(), browserConfiguration);
- TableEditorFactory.getInstance().openOn(browserConfiguration, elementsList, description);
- }
-
- private void openOn(final BrowserConfiguration browserConfiguration,
- final IStructuredSelection structuredSelection) {
-
- final List<EObject> elements = new ArrayList<EObject>();
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object selectedElement = iterator.next();
- if (selectedElement instanceof ModelElementItem) {
- final ModelElementItem modelElementItem = (ModelElementItem) selectedElement;
- elements.add(modelElementItem.getEObject());
- } else {
- MoDiscoBrowserPlugin
- .logWarning(Messages.EcoreActionBarContributor_cannotOpenTableEditorNotModelElements);
- return;
- }
- }
-
- String description;
- final String metamodelName = browserConfiguration.getMetamodelName();
- if (metamodelName != null) {
- description = NLS.bind(Messages.EcoreActionBarContributor_elementsSelection,
- metamodelName);
- } else {
- description = Messages.EcoreActionBarContributor_elementsSelectionUnknowMetamodel;
- }
- TableEditorFactory.getInstance().openOn(browserConfiguration, elements, description);
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RefreshViewerAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RefreshViewerAction.java
deleted file mode 100644
index 2acd108c4..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RefreshViewerAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.widgets.Display;
-
-public class RefreshViewerAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public RefreshViewerAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.RefreshViewerAction_refreshViewer);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public boolean isEnabled() {
- return true;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
- public void run() {
- browser.clearInstancesCache();
- browser.refreshDelayed(true);
- }
- });
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RemoveQueryAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RemoveQueryAction.java
deleted file mode 100644
index 32d9c5b62..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RemoveQueryAction.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.util.Iterator;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.core.QueryItem;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQueriesManager;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-
-/** Removes the selected query(-ies) */
-public class RemoveQueryAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public RemoveQueryAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.RemoveQueryAction_removeQuery);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- ISelection selection = this.browserActionBarContributor.getSelection();
- SelectedQueriesManager selectedQueriesManager = this.browserActionBarContributor
- .getBrowser().getBrowserConfiguration().getSelectedQueriesManager();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- Object selectedElement = iterator.next();
- if (selectedElement instanceof QueryItem) {
- QueryItem queryItem = (QueryItem) selectedElement;
- selectedQueriesManager.remove(queryItem.getQuery());
- }
- }
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RestoreFontSizeAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RestoreFontSizeAction.java
deleted file mode 100644
index 80eee30e7..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/RestoreFontSizeAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class RestoreFontSizeAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public RestoreFontSizeAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.EcoreActionBarContributor_restoreFontSize, IAction.AS_PUSH_BUTTON);
- setImageDescriptor(ImageProvider.getInstance().getRestoreFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.setFontSizeDelta(0);
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/SelectQueryAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/SelectQueryAction.java
deleted file mode 100644
index e48023ba0..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/SelectQueryAction.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQueriesManager;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.query.ModelQuery;
-import org.eclipse.gmt.modisco.infra.query.ui.dialogs.QuerySelectionDialog;
-import org.eclipse.gmt.modisco.infra.query.ui.filters.QueryScopeFilter;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Select a query (or several) to be shown on each occurrence of the selected
- * model element(s)
- */
-public class SelectQueryAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public SelectQueryAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.SelectQueryAction_addQueryOnElement);
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- Shell shell = this.browserActionBarContributor.getBrowser().getSite().getShell();
- List<EObject> selectedModelElements = new ArrayList<EObject>();
-
- ISelection selection = this.browserActionBarContributor.getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- Object selectedElement = iterator.next();
- if (selectedElement instanceof ModelElementItem) {
- ModelElementItem item = (ModelElementItem) selectedElement;
- selectedModelElements.add(item.getEObject());
- }
- }
-
- // filter out non-applicable queries
- List<ViewerFilter> filters = new ArrayList<ViewerFilter>();
- for (EObject eObject : selectedModelElements) {
- filters.add(new QueryScopeFilter(eObject.eClass()));
- }
-
- QuerySelectionDialog querySelectionDialog = new QuerySelectionDialog(shell, true, null,
- filters);
-
- if (querySelectionDialog.open() == Window.OK) {
- List<ModelQuery> selectedQueries = querySelectionDialog.getSelectedQueries();
- SelectedQueriesManager selectedQueriesManager = this.browserActionBarContributor
- .getBrowser().getBrowserConfiguration().getSelectedQueriesManager();
-
- for (EObject eObject : selectedModelElements) {
- for (ModelQuery selectedQuery : selectedQueries) {
- selectedQueriesManager.add(eObject, selectedQuery);
- }
- }
- }
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowBothPanelsAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowBothPanelsAction.java
deleted file mode 100644
index 990e2ea2f..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowBothPanelsAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class ShowBothPanelsAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public ShowBothPanelsAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.ShowBothPanelsAction_title, IAction.AS_RADIO_BUTTON);
- setChecked(true);
- // setImageDescriptor(ImageProvider.getInstance().getRestoreFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.showBothPanels();
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyInstancesPanelAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyInstancesPanelAction.java
deleted file mode 100644
index ff890e980..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyInstancesPanelAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class ShowOnlyInstancesPanelAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public ShowOnlyInstancesPanelAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.ShowOnlyInstancesPanelAction_title, IAction.AS_RADIO_BUTTON);
- //setImageDescriptor(ImageProvider.getInstance().getRestoreFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.showOnlyInstancesPanel();
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyTypesPanelAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyTypesPanelAction.java
deleted file mode 100644
index 5c5f168fd..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowOnlyTypesPanelAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-
-public class ShowOnlyTypesPanelAction extends Action {
-
- private final IBrowserActionBarContributor browserActionBarContributor;
-
- public ShowOnlyTypesPanelAction(final IBrowserActionBarContributor browserActionBarContributor) {
- super(Messages.ShowOnlyTypesPanelAction_title, IAction.AS_RADIO_BUTTON);
- // setImageDescriptor(ImageProvider.getInstance().getRestoreFontSizeIcon());
- this.browserActionBarContributor = browserActionBarContributor;
- }
-
- @Override
- public void run() {
- final EcoreBrowser browser = this.browserActionBarContributor.getBrowser();
- if (browser != null) {
- browser.showOnlyTypesPanel();
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowPropertiesViewAction.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowPropertiesViewAction.java
deleted file mode 100644
index dbcbbb596..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/actions/ShowPropertiesViewAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.actions;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.jface.action.Action;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-
-/** This action opens the "Properties" view. */
-public class ShowPropertiesViewAction extends Action {
-
- /** The ID of the "Properties" view */
- private static final String PROPERTY_SHEET_ID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
-
- public ShowPropertiesViewAction() {
- super(Messages.EcoreActionBarContributor_showPropertiesView);
- }
-
- @Override
- public void run() {
- try {
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
- if (window != null) {
- IWorkbenchPage activePage = window.getActivePage();
- if (activePage != null) {
- activePage.showView(ShowPropertiesViewAction.PROPERTY_SHEET_ID);
- }
- }
- } catch (final PartInitException exception) {
- MoDiscoBrowserPlugin.logException(exception);
- }
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnLinkCommand.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnLinkCommand.java
deleted file mode 100644
index cff2279dc..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnLinkCommand.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.IdentityCommand;
-import org.eclipse.emf.common.command.UnexecutableCommand;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.emf.edit.command.CopyCommand;
-import org.eclipse.emf.edit.command.DragAndDropCommand;
-import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-
-/** Handles drag&drop on a {@link LinkItem} */
-public class DragAndDropOnLinkCommand extends DragAndDropCommand {
-
- private final LinkItemEx linkItem;
-
- public DragAndDropOnLinkCommand(final EditingDomain editingDomain, final LinkItemEx linkItem,
- final float location, final int operations, final int operation,
- final Collection<?> collection) {
- super(editingDomain, linkItem, location, operations, operation, collection);
- this.linkItem = linkItem;
- }
-
- public LinkItem getLinkItem() {
- return this.linkItem;
- }
-
- public Command getDropCommand() {
- return this.dropCommand;
- }
-
- @Override
- protected Object getParent(final Object object) {
- if (object instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) object;
- return treeElement.getTreeParent();
- }
- return Collections.emptyList();
- }
-
- @Override
- protected Collection<?> getChildren(final Object object) {
- if (object instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) object;
- return treeElement.getChildren();
- }
- return Collections.emptyList();
- }
-
- @Override
- protected boolean prepareDropInsert() {
- return false;
- }
-
- @Override
- protected boolean prepareDropMoveOn() {
- if (isCrossDomain()) {
- EObject eObject = this.linkItem.getParent();
- Resource resource = eObject.eResource();
- if (resource != null && resource.getResourceSet() != null) {
- this.collection = DragAndDropUtils.translateCrossDomainObjects(this.collection,
- resource.getResourceSet());
- }
- }
- if (isCrossDomain() || !checkReferenceType(this.linkItem.getReference(), this.collection)) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- } else {
- if (this.linkItem.getReference().isContainment()) {
- this.dropCommand = AddCommand.create(this.domain, this.linkItem.getParent(), null,
- this.collection);
- this.dragCommand = RemoveCommand.create(this.domain, this.collection);
- } else if (this.linkItem.getReference().isContainer()) {
- this.dropCommand = UnexecutableCommand.INSTANCE;
- this.dragCommand = IdentityCommand.INSTANCE;
- } else {
- if (this.linkItem.getReference().isMany()) {
- this.dropCommand = AddCommand.create(this.domain, this.linkItem.getParent(),
- this.linkItem.getReference(), this.collection);
- } else {
- if (this.collection.size() == 1) {
- this.dropCommand = SetCommand.create(this.domain,
- this.linkItem.getParent(), this.linkItem.getReference(),
- this.collection.iterator().next());
- } else {
- this.dropCommand = UnexecutableCommand.INSTANCE;
- }
- }
- this.dragCommand = IdentityCommand.INSTANCE;
- }
- }
-
- boolean result = this.dragCommand.canExecute() && this.dropCommand.canExecute();
- return result;
- }
-
- /**
- * Check that each element in the collection can be assigned using the given
- * reference
- */
- private boolean checkReferenceType(final EReference reference, final Collection<?> elements) {
- EClass eReferenceType = reference.getEReferenceType();
- for (Object o : elements) {
- if (!eReferenceType.isInstance(o)) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- protected boolean prepareDropCopyOn() {
- if (!checkReferenceType(this.linkItem.getReference(), this.collection)) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- return false;
- }
-
- this.dragCommand = CopyCommand.create(this.domain, this.collection);
-
- if (this.dragCommand.canExecute() && this.dragCommand.canUndo()) {
- this.dragCommand.execute();
- this.isDragCommandExecuted = true;
- this.dropCommand = AddCommand.create(this.domain, this.linkItem.getParent(), null,
- this.dragCommand.getResult());
- if (analyzeForNonContainment(this.dropCommand)) {
- this.dropCommand.dispose();
- this.dropCommand = UnexecutableCommand.INSTANCE;
-
- this.dragCommand.undo();
- this.dragCommand.dispose();
- this.isDragCommandExecuted = false;
- this.dragCommand = IdentityCommand.INSTANCE;
- }
- } else {
- this.dropCommand = UnexecutableCommand.INSTANCE;
- }
-
- boolean result = this.dragCommand.canExecute() && this.dropCommand.canExecute();
- return result;
- }
-
- @Override
- protected boolean prepareDropLinkOn() {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- return false;
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnModelElementCommand.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnModelElementCommand.java
deleted file mode 100644
index c88b07a82..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropOnModelElementCommand.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CompoundCommand;
-import org.eclipse.emf.common.command.IdentityCommand;
-import org.eclipse.emf.common.command.UnexecutableCommand;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.emf.edit.command.CopyCommand;
-import org.eclipse.emf.edit.command.DragAndDropCommand;
-import org.eclipse.emf.edit.command.MoveCommand;
-import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-
-/** Handles drag&drop on a {@link ModelElementItem} */
-public class DragAndDropOnModelElementCommand extends DragAndDropCommand {
-
- private final ModelElementItemEx modelElementItem;
-
- public DragAndDropOnModelElementCommand(final EditingDomain editingDomain,
- final ModelElementItemEx modelElementItem, final float location, final int operations,
- final int operation, final Collection<?> collection) {
- super(editingDomain, modelElementItem, location, operations, operation, collection);
- this.modelElementItem = modelElementItem;
- }
-
- public ModelElementItem getModelElementItem() {
- return this.modelElementItem;
- }
-
- public Command getDropCommand() {
- return this.dropCommand;
- }
-
- @Override
- protected Object getParent(final Object object) {
- if (object instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) object;
- return treeElement.getTreeParent();
- }
- return Collections.emptyList();
- }
-
- @Override
- protected Collection<?> getChildren(final Object object) {
- if (object instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) object;
- return treeElement.getChildren();
- }
- return Collections.emptyList();
- }
-
- @Override
- protected boolean prepareDropMoveInsert(final Object parent, final Collection<?> children,
- final int index) {
- LinkItem parentLinkItem;
- if (parent instanceof LinkItem) {
- parentLinkItem = (LinkItem) parent;
- } else {
- return false;
- }
-
- Collection<Object> emfChildren = new ArrayList<Object>();
- for (Object o : children) {
- if (o instanceof ModelElementItem) {
- ModelElementItem item = (ModelElementItem) o;
- emfChildren.add(item.getEObject());
- } else {
- emfChildren.add(o);
- }
- }
-
- // We don't want to move insert an object before or after
- // itself
- if (this.collection.contains(this.modelElementItem.getEObject())) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- } else if (emfChildren.containsAll(this.collection)) {
- // ↑ if the dragged objects share a parent
- this.dragCommand = IdentityCommand.INSTANCE;
-
- // Create move commands for all the objects in the
- // collection.
- CompoundCommand compoundCommand = new CompoundCommand();
- List<Object> before = new ArrayList<Object>();
- List<Object> after = new ArrayList<Object>();
-
- int i = 0;
- for (Object object : emfChildren) {
- if (this.collection.contains(object)) {
- if (i < index) {
- before.add(object);
- } else if (i > index) {
- after.add(object);
- }
- }
- i++;
- }
-
- for (Object object : before) {
- compoundCommand.append(MoveCommand.create(this.domain, parentLinkItem.getParent(),
- parentLinkItem.getReference(), object, index - 1));
- }
-
- for (ListIterator<Object> objects = after.listIterator(after.size()); objects
- .hasPrevious();) {
- Object object = objects.previous();
- compoundCommand.append(MoveCommand.create(this.domain, parentLinkItem.getParent(),
- parentLinkItem.getReference(), object, index));
- }
-
- if (compoundCommand.getCommandList().isEmpty()) {
- this.dropCommand = IdentityCommand.INSTANCE;
- } else {
- this.dropCommand = compoundCommand;
- }
- } else {
- if (isCrossDomain()) {
- EObject eObject = this.modelElementItem.getEObject();
- Resource resource = eObject.eResource();
- if (resource != null && resource.getResourceSet() != null) {
- this.collection = DragAndDropUtils.translateCrossDomainObjects(this.collection,
- resource.getResourceSet());
- }
- }
- // Just remove the objects and add them.
- this.dropCommand = AddCommand.create(this.domain, parentLinkItem.getParent(),
- parentLinkItem.getReference(), this.collection, index);
- if (analyzeForNonContainment(this.dropCommand)) {
- // this.dropCommand.dispose();
- // this.dropCommand = UnexecutableCommand.INSTANCE;
- this.dragCommand = IdentityCommand.INSTANCE;
- } else {
- this.dragCommand = RemoveCommand.create(this.domain, this.collection);
- }
- }
-
- boolean result = this.dragCommand.canExecute() && this.dropCommand.canExecute();
- return result;
- }
-
- @Override
- protected boolean prepareDropCopyInsert(final Object parent, final Collection<?> children,
- final int index) {
- LinkItem parentLinkItem;
- if (parent instanceof LinkItem) {
- parentLinkItem = (LinkItem) parent;
- } else {
- return false;
- }
-
- boolean result;
- // We don't want to copy insert an object before or after
- // itself
- if (this.collection.contains(this.modelElementItem.getEObject())) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- result = false;
- } else {
- // Copy the collection
- this.dragCommand = CopyCommand.create(this.domain, this.collection);
-
- if (this.optimize) {
- result = optimizedCanExecute();
- if (result) {
- this.optimizedDropCommandOwner = this.modelElementItem.getEObject();
- }
- } else {
- if (this.dragCommand.canExecute() && this.dragCommand.canUndo()) {
- this.dragCommand.execute();
- this.isDragCommandExecuted = true;
-
- // And add the copy.
- this.dropCommand = AddCommand.create(this.domain, parentLinkItem.getParent(),
- parentLinkItem.getReference(), this.dragCommand.getResult(), index);
- if (analyzeForNonContainment(this.dropCommand)) {
- this.dropCommand.dispose();
- this.dropCommand = UnexecutableCommand.INSTANCE;
-
- this.dragCommand.undo();
- this.dragCommand.dispose();
- this.isDragCommandExecuted = false;
- this.dragCommand = IdentityCommand.INSTANCE;
- }
- result = this.dropCommand.canExecute();
- } else {
- this.dropCommand = UnexecutableCommand.INSTANCE;
- result = false;
- }
- }
- }
- return result;
- }
-
- @Override
- protected boolean prepareDropLinkInsert(final Object parent, final Collection<?> children,
- final int index) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- return false;
- }
-
- @Override
- protected boolean prepareDropMoveOn() {
- if (isCrossDomain()) {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- } else {
- this.dropCommand = AddCommand.create(this.domain, this.modelElementItem.getEObject(),
- null, this.collection);
- if (analyzeForNonContainment(this.dropCommand)) {
- this.dropCommand.dispose();
- this.dropCommand = UnexecutableCommand.INSTANCE;
- this.dragCommand = IdentityCommand.INSTANCE;
- } else {
- this.dragCommand = RemoveCommand.create(this.domain, this.collection);
- }
- }
-
- boolean result = this.dragCommand.canExecute() && this.dropCommand.canExecute();
- return result;
- }
-
- @Override
- protected boolean prepareDropCopyOn() {
- boolean result;
-
- this.dragCommand = CopyCommand.create(this.domain, this.collection);
-
- if (this.dragCommand.canExecute() && this.dragCommand.canUndo()) {
- this.dragCommand.execute();
- this.isDragCommandExecuted = true;
- this.dropCommand = AddCommand.create(this.domain, this.modelElementItem.getEObject(),
- null, this.dragCommand.getResult());
- if (analyzeForNonContainment(this.dropCommand)) {
- this.dropCommand.dispose();
- this.dropCommand = UnexecutableCommand.INSTANCE;
-
- this.dragCommand.undo();
- this.dragCommand.dispose();
- this.isDragCommandExecuted = false;
- this.dragCommand = IdentityCommand.INSTANCE;
- }
- } else {
- this.dropCommand = UnexecutableCommand.INSTANCE;
- }
-
- result = this.dragCommand.canExecute() && this.dropCommand.canExecute();
-
- return result;
- }
-
- @Override
- protected boolean prepareDropLinkOn() {
- this.dragCommand = IdentityCommand.INSTANCE;
- this.dropCommand = UnexecutableCommand.INSTANCE;
- return false;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropUtils.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropUtils.java
deleted file mode 100644
index c194dde74..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/DragAndDropUtils.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-
-public final class DragAndDropUtils {
-
- private DragAndDropUtils() {
- // utility class
- }
-
- /**
- * For each element in the given collection, look for its equivalent (based
- * on the element's URI) in the given {@link ResourceSet}.
- *
- * @param collection
- * the input elements
- * @param resourceSet
- * the {@link ResourceSet} in which to look for corresponding
- * elements
- * @return the collection in which elements are replaced by their equivalent
- * in the given {@link ResourceSet}
- */
- public static List<Object> translateCrossDomainObjects(final Collection<?> collection,
- final ResourceSet resourceSet) {
- ArrayList<Object> result = new ArrayList<Object>();
- for (Object o : collection) {
- if (o instanceof EObject) {
- EObject eObject = (EObject) o;
- EObject eObject2 = resourceSet.getEObject(EcoreUtil.getURI(eObject), true);
- if (eObject2 != null) {
- result.add(eObject2);
- }
- } else {
- result.add(o);
- }
- }
- return result;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclass.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclass.java
deleted file mode 100644
index 73a10cfde..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclass.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2015 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Bros (Mia-Software) - Bug 341252 - [Model Browser] instances in composed models not displayed
- * Grégoire Dupé (Mia-Software) - Bug 471096 - MetaclassInstance features have to be moved to an EMF dedicated plug-in
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.customization.CustomizationEngine;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ModelUtils;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.core.adapters.instances.MetaclassInstancesAdapterFactoryWithFacet;
-import org.eclipse.modisco.util.emf.core.internal.allinstances.MetaclassInstances;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * All the model elements for a metaclass. Each {@link InstancesForMetaclass}
- * corresponds to a metaclass, and has a list of all the instances of this
- * metaclass in the model.
- */
-public class InstancesForMetaclass {
-
- /** The list of subclasses of this metaclass */
- private final ArrayList<InstancesForMetaclass> subclasses = new ArrayList<InstancesForMetaclass>();
-
- /** The EClass corresponding to this metaclass */
- private final EClass eClass;
-
- /**
- * The list of all metaclasses. Used to find the instance list of super
- * metaclasses.
- */
- private final InstancesForMetaclasses instancesForMetaclasses;
-
- private final BrowserConfiguration browserConfiguration;
-
- private ArrayList<EObject> cachedElements = null;
- private int cachedElementsModCount = -1;
- private ArrayList<EObject> cachedDerivedElements = null;
- private int cachedDerivedElementsModCount = -1;
-
- private final Collection<Resource> fResources;
-
- /**
- * @param eClass
- * the {@link EClass} corresponding to the metaclass.
- * @param browserConfiguration
- * @param resources
- */
- public InstancesForMetaclass(final EClass eClass,
- final InstancesForMetaclasses instancesForMetaclasses,
- final BrowserConfiguration browserConfiguration, final Collection<Resource> resources) {
- this.eClass = eClass;
- this.instancesForMetaclasses = instancesForMetaclasses;
- this.browserConfiguration = browserConfiguration;
- // this collection is purposefully shared with the parent InstancesForMetaclasses
- // this fixes Bug 341252 - [Model Browser] instances in composed models not displayed
- this.fResources = resources;
- }
-
- private final Object cacheLock = new Object();
-
- public ArrayList<EObject> getElements() {
- // cache visible elements list (with modcount)
- synchronized (this.cacheLock) {
- if (this.cachedElements == null
- || this.cachedElementsModCount != this.browserConfiguration
- .getAppearanceConfiguration().getModCount()) {
- final CustomizationEngine customizationEngine = this.browserConfiguration
- .getAppearanceConfiguration().getCustomizationEngine();
-
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(
- this.browserConfiguration.getAppearanceConfiguration().getFacetContext());
- ArrayList<EObject> visibleElements = new ArrayList<EObject>();
- List<Resource> resources;
- synchronized (this) {
- resources = new ArrayList<Resource>(this.fResources);
- }
- for (Resource resource : resources) {
- MetaclassInstances instances = (MetaclassInstances) MetaclassInstancesAdapterFactoryWithFacet
- .getInstance().adapt(resource, MetaclassInstances.class);
- Collection<EObject> elements = instances.getInstances(this.eClass, false);
- customizationEngine.filterVisible(elements, visibleElements);
- }
- this.cachedElements = visibleElements;
-
- this.cachedElementsModCount = this.browserConfiguration
- .getAppearanceConfiguration().getModCount();
- }
- }
- return this.cachedElements;
- }
-
- public synchronized ArrayList<EObject> getDerivedElements() {
- // cache visible elements list (with modcount)
- if (this.cachedDerivedElements == null
- || this.cachedDerivedElementsModCount != this.browserConfiguration
- .getAppearanceConfiguration().getModCount()) {
- final CustomizationEngine customizationEngine = this.browserConfiguration
- .getAppearanceConfiguration().getCustomizationEngine();
-
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(
- this.browserConfiguration.getAppearanceConfiguration().getFacetContext());
- ArrayList<EObject> visibleElements = new ArrayList<EObject>();
- for (Resource resource : this.fResources) {
- MetaclassInstances instances = (MetaclassInstances) MetaclassInstancesAdapterFactoryWithFacet
- .getInstance().adapt(resource, MetaclassInstances.class);
- Collection<EObject> elements = instances.getInstances(this.eClass, true);
- customizationEngine.filterVisible(elements, visibleElements);
- }
- this.cachedDerivedElements = visibleElements;
-
- this.cachedDerivedElementsModCount = this.browserConfiguration
- .getAppearanceConfiguration().getModCount();
- }
- return this.cachedDerivedElements;
- }
-
- /** Cached class qualified name */
- private String classQualifiedName = null;
-
- /**
- * A parent for the object when it is in a tree (when metaclasses are
- * grouped by packages)
- */
- private Object parent;
-
- /** @return the number of instances of the metaclass */
- public int size() {
- return getElements().size();
- }
-
- /** @return the number of instances of this metaclass or its subclasses */
- public int totalSize() {
- return getDerivedElements().size();
- }
-
- /** @return the EClass corresponding to this {@link InstancesForMetaclass} */
- public EClass getEClass() {
- return this.eClass;
- }
-
- public synchronized String getClassQualifiedName() {
- if (this.classQualifiedName == null) {
- this.classQualifiedName = ModelUtils.getMetaclassQualifiedName(getEClass());
- }
- return this.classQualifiedName;
- }
-
- public void setParent(final Object parent) {
- this.parent = parent;
- }
-
- public Object getParent() {
- return this.parent;
- }
-
- /** Add this class to the subclasses of its parents */
- public synchronized void buildParentsSubclasses() {
- final EList<EClass> superTypes = this.eClass.getESuperTypes();
- for (final EClass superclass : superTypes) {
- final InstancesForMetaclass instancesForSuperclass = this.instancesForMetaclasses
- .getInstancesForMetaclass(superclass);
- if (instancesForSuperclass != null) {
- instancesForSuperclass.addSubclass(this);
- } else if (!(this.eClass instanceof Facet)) {
- MoDiscoBrowserPlugin.logWarning(NLS.bind(Messages.InstancesForMetaclass_notFound,
- ModelUtils.getMetaclassQualifiedName(superclass)));
- }
- }
- }
-
- /** Clears the list of subclasses of this class */
- public synchronized void clearSubclasses() {
- this.subclasses.clear();
- }
-
- public synchronized InstancesForMetaclass[] getSubclasses() {
- return this.subclasses.toArray(new InstancesForMetaclass[this.subclasses.size()]);
- }
-
- /** Add the given class to the subclasses of this class */
- private synchronized void addSubclass(final InstancesForMetaclass instancesForMetaclass) {
- this.subclasses.add(instancesForMetaclass);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return getClassQualifiedName() + " " + size(); //$NON-NLS-1$
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclasses.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclasses.java
deleted file mode 100644
index e85bd7e9e..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/InstancesForMetaclasses.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2015 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Bros (Mia-Software) - Bug 341252 - [Model Browser] instances in composed models not displayed
- * Grégoire Dupé (Mia-Software) - Bug 471096 - MetaclassInstance features have to be moved to an EMF dedicated plug-in
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeMap;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.EMFUtil;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ModelUtils;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetContext;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetContextListener;
-import org.eclipse.gmt.modisco.infra.facet.core.adapters.instances.MetaclassInstancesAdapterFactoryWithFacet;
-import org.eclipse.modisco.util.emf.core.internal.allinstances.MetaclassInstances;
-import org.eclipse.modisco.util.emf.core.internal.allinstances.ModelChangeListener;
-
-/**
- * A list of metaclasses from the model, each metaclass having an associated
- * list of instances of the metaclass.
- */
-public class InstancesForMetaclasses implements FacetContextListener, ModelChangeListener {
-
- /** Model elements sorted by EClass (using their full qualified name). */
- private final TreeMap<EClass, InstancesForMetaclass> modelElements;
-
- /**
- * A list of all metaclasses which do not have a parent. That is, a list of
- * metaclasses from which all other metaclasses can be found by derivation.
- */
- private final ArrayList<InstancesForMetaclass> rootMetaclasses = new ArrayList<InstancesForMetaclass>();
-
- private final BrowserConfiguration browserConfiguration;
-
- /**
- * The set of resources the contents of which are currently displayed in the
- * types panel
- */
- private final Set<Resource> fResources;
-
- private final List<MetaclassesChangeListener> listeners = new ArrayList<MetaclassesChangeListener>();
-
- /**
- * @param browserConfiguration
- * the browser configuration
- * @param resources
- * the resources from which to compute the list of metaclasses
- */
- public InstancesForMetaclasses(final BrowserConfiguration browserConfiguration,
- final Set<Resource> resources) {
- this.browserConfiguration = browserConfiguration;
- this.fResources = new HashSet<Resource>();
-
- // sorted by qualified name
- this.modelElements = new TreeMap<EClass, InstancesForMetaclass>(new Comparator<EClass>() {
- public int compare(final EClass e1, final EClass e2) {
- String q1 = ModelUtils.getMetaclassQualifiedName(e1);
- String q2 = ModelUtils.getMetaclassQualifiedName(e2);
- if (q1 == null) {
- return -1;
- }
- return q1.compareTo(q2);
- }
- });
-
- final FacetContext facetContext = browserConfiguration.getAppearanceConfiguration()
- .getFacetContext();
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(facetContext);
-
- for (Resource resource : resources) {
- internalWatchResource(resource);
- }
- computeModelElements();
-
- facetContext.addListener(this);
- }
-
- private void computeModelElements() {
- List<Resource> resources;
- synchronized (this.fResources) {
- resources = new ArrayList<Resource>(this.fResources);
- }
- Collection<EClass> allClasses = EMFUtil.findAllClasses(resources);
- for (EClass eClass : allClasses) {
- synchronized (this.modelElements) {
- if (!this.modelElements.containsKey(eClass)) {
- InstancesForMetaclass instancesForMetaclass = new InstancesForMetaclass(eClass,
- this, this.browserConfiguration, this.fResources);
- this.modelElements.put(eClass, instancesForMetaclass);
- }
- }
- }
- }
-
- public void watchResource(final Resource resource) {
- boolean contained;
- synchronized (this.fResources) {
- contained = this.fResources.contains(resource);
- }
- if (!contained) {
- final FacetContext facetContext = this.browserConfiguration
- .getAppearanceConfiguration().getFacetContext();
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(facetContext);
- internalWatchResource(resource);
- computeModelElements();
- buildDerivationTree();
- }
- }
-
- private void internalWatchResource(final Resource resource) {
- MetaclassInstances instances = (MetaclassInstances) MetaclassInstancesAdapterFactoryWithFacet
- .getInstance().adapt(resource, MetaclassInstances.class);
- instances.addListener(this);
- synchronized (this.fResources) {
- this.fResources.add(resource);
- }
- }
-
- public void unwatchResource(final Resource resource) {
- boolean contained;
- synchronized (this.fResources) {
- contained = this.fResources.contains(resource);
- }
- if (contained) {
- // always set FacetContext before using
- // MetaclassInstancesAdapterFactoryWithFacet
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(
- this.browserConfiguration.getAppearanceConfiguration().getFacetContext());
- MetaclassInstances instances = (MetaclassInstances) MetaclassInstancesAdapterFactoryWithFacet
- .getInstance().adapt(resource, MetaclassInstances.class);
- // "touch" to mark the cache dirty
- this.browserConfiguration.getAppearanceConfiguration().touch();
- instances.removeListener(this);
- synchronized (this.fResources) {
- this.fResources.remove(resource);
- }
- computeModelElements();
- buildDerivationTree();
- }
- }
-
- public InstancesForMetaclass[] getInstancesForMetaclasses() {
- synchronized (this.modelElements) {
- final Collection<InstancesForMetaclass> instancesForMetaclasses = this.modelElements
- .values();
- return instancesForMetaclasses
- .toArray(new InstancesForMetaclass[instancesForMetaclasses.size()]);
- }
- }
-
- /**
- * @param eClass
- * the metaclass
- * @return the {@link InstancesForMetaclass} object or <code>null</code> if
- * the metaclass was not found
- */
- public InstancesForMetaclass getInstancesForMetaclass(final EClass eClass) {
- synchronized (this.modelElements) {
- return this.modelElements.get(eClass);
- }
- }
-
- /** Builds the derivation tree of metaclasses */
- public void buildDerivationTree() {
- final InstancesForMetaclass[] instancesByMetaclass = getInstancesForMetaclasses();
-
- // clear previous state
- this.rootMetaclasses.clear();
- for (final InstancesForMetaclass instancesForMetaclass : instancesByMetaclass) {
- instancesForMetaclass.clearSubclasses();
- }
-
- // build the derivation tree
- for (final InstancesForMetaclass instancesForMetaclass : instancesByMetaclass) {
- instancesForMetaclass.buildParentsSubclasses();
- if (instancesForMetaclass.getEClass().getESuperTypes().isEmpty()) {
- this.rootMetaclasses.add(instancesForMetaclass);
- }
- }
- }
-
- public InstancesForMetaclass[] getRootMetaclasses() {
- return this.rootMetaclasses.toArray(new InstancesForMetaclass[this.rootMetaclasses.size()]);
- }
-
- public void facetAdded(final Facet facet) {
- List<Resource> resources;
- synchronized (this.fResources) {
- resources = new ArrayList<Resource>(this.fResources);
- }
- InstancesForMetaclass instancesForMetaclass = new InstancesForMetaclass(facet, this,
- this.browserConfiguration, resources);
- synchronized (this.modelElements) {
- this.modelElements.put(facet, instancesForMetaclass);
- }
- }
-
- public void facetsCleared() {
- synchronized (this.modelElements) {
- Iterator<EClass> iterator = this.modelElements.keySet().iterator();
- while (iterator.hasNext()) {
- EClass eClass = iterator.next();
- if (eClass instanceof Facet) {
- iterator.remove();
- }
- }
- }
- }
-
- public interface MetaclassesChangeListener {
- void modelChanged();
- }
-
- public void addListener(final MetaclassesChangeListener listener) {
- if (!this.listeners.contains(listener)) {
- this.listeners.add(listener);
- }
- }
-
- public void removeListener(final MetaclassesChangeListener listener) {
- this.listeners.remove(listener);
- }
-
- public void notifyChanged() {
- for (MetaclassesChangeListener listener : this.listeners) {
- listener.modelChanged();
- }
- }
-
- public void modelChanged(final Notification msg) {
- if (msg != null && msg.getEventType() == Notification.RESOLVE) {
- computeModelElements();
- buildDerivationTree();
- }
-
- // pass on the notification to our listeners
- notifyChanged();
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ItemsFactoryEx.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ItemsFactoryEx.java
deleted file mode 100644
index fe73287af..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ItemsFactoryEx.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ItemsFactory;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-
-public class ItemsFactoryEx extends ItemsFactory {
-
- private final BrowserConfiguration browserConfiguration;
-
- public ItemsFactoryEx(final BrowserConfiguration browserConfiguration) {
- this.browserConfiguration = browserConfiguration;
- }
-
- @Override
- public ModelElementItem createModelElementItem(final EObject eObject,
- final ITreeElement treeParent, final AppearanceConfiguration appearanceConfiguration) {
- return new ModelElementItemEx(eObject, treeParent, this.browserConfiguration);
- }
-
- @Override
- public LinkItem createLinkItem(final EObject parent, final ITreeElement treeParent,
- final EReference reference, final AppearanceConfiguration appearanceConfiguration) {
- return new LinkItemEx(parent, treeParent, reference, this.browserConfiguration);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/LinkItemEx.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/LinkItemEx.java
deleted file mode 100644
index e622c9829..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/LinkItemEx.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.command.CommandParameter;
-import org.eclipse.emf.edit.command.DragAndDropCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.browser.util.EditingSupportUtil;
-
-public class LinkItemEx extends LinkItem implements IEditingDomainItemProvider {
-
- private final BrowserConfiguration browserConfiguration;
-
- public LinkItemEx(final EObject parent, final ITreeElement treeParent,
- final EReference reference, final BrowserConfiguration browserConfiguration) {
- super(parent, treeParent, reference, browserConfiguration.getAppearanceConfiguration());
- this.browserConfiguration = browserConfiguration;
- }
-
- public Collection<?> getChildren(final Object object) {
- throw new UnsupportedOperationException();
- }
-
- public Object getParent(final Object object) {
- return this.getParent();
- }
-
- public Collection<?> getNewChildDescriptors(final Object object,
- final EditingDomain editingDomain, final Object sibling) {
-
- if (!getReference().isContainment()) {
- return Collections.emptyList();
- }
-
- // do not create siblings from links (confusing for the user)
- // if (sibling instanceof LinkItem) {
- // return Collections.emptyList();
- // }
-
- EObject eObject = null;
- if (sibling instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) sibling;
- eObject = modelElementItem.getEObject();
- } else if (sibling == null) {
- eObject = this.getParent();
- }
-
- if (eObject != null) {
- Resource eResource = eObject.eResource();
- if (eResource != null && eResource.getURI().isPlatformResource()) {
- List<CommandParameter> parameters = new ArrayList<CommandParameter>();
- EditingSupportUtil.createCommandParameters(parameters, getReference(),
- this.browserConfiguration.getResourceSet());
- return parameters;
- }
- }
- return null;
- }
-
- public Command createCommand(final Object object, final EditingDomain editingDomain,
- final Class<? extends Command> commandClass, final CommandParameter commandParameter) {
-
- if (commandClass == DragAndDropCommand.class) {
- DragAndDropCommand.Detail detail = (DragAndDropCommand.Detail) commandParameter
- .getFeature();
-
- return new DragAndDropOnLinkCommand(editingDomain, this, detail.location,
- detail.operations, detail.operation, commandParameter.getCollection());
- }
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String toString() {
- return LinkItemEx.class.getSimpleName() + "(" + getText() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/MetaclassList.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/MetaclassList.java
deleted file mode 100644
index a1d445dba..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/MetaclassList.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.BigListItem;
-
-/**
- * A list of instances of one or more metaclasses selected in the list of
- * metaclasses, displayed in the model browser tree.
- */
-public class MetaclassList {
-
- /**
- * The configuration of the browser used to display the list of metaclasses
- * and the tree of model elements
- */
- private final BrowserConfiguration browserConfiguration;
-
- /** The list of metaclasses whose elements must be displayed */
- private final EClass[] metaclasses;
-
- public MetaclassList(final BrowserConfiguration browserConfiguration, final EClass[] metaclasses) {
- this.browserConfiguration = browserConfiguration;
- this.metaclasses = metaclasses;
- }
-
- private int cachedElementsModCount = -1;
- private List<?> cachedElements = null;
-
- public synchronized List<?> getElements() {
- if (this.cachedElements == null
- || this.cachedElementsModCount != this.browserConfiguration
- .getAppearanceConfiguration().getModCount()) {
- final ArrayList<EObject> allElements = new ArrayList<EObject>();
-
- final InstancesForMetaclasses instancesForMetaclasses = this.browserConfiguration
- .getInstancesForMetaclasses();
- for (final EClass eClass : this.metaclasses) {
- final InstancesForMetaclass instancesForMetaclass = instancesForMetaclasses
- .getInstancesForMetaclass(eClass);
- if (instancesForMetaclass != null) {
- if (this.browserConfiguration.getAppearanceConfiguration()
- .isDisplayInstancesOfSubclasses()) {
- allElements.addAll(instancesForMetaclass.getDerivedElements());
- } else {
- final ArrayList<EObject> elements = instancesForMetaclass.getElements();
- allElements.addAll(elements);
- }
- }
- // if null, ignore (to be expected since refresh is in a Job)
- }
- this.cachedElements = BigListItem.splitElements(null, null, allElements,
- this.browserConfiguration.getAppearanceConfiguration(), false);
- this.cachedElementsModCount = this.browserConfiguration.getAppearanceConfiguration()
- .getModCount();
- }
- return this.cachedElements;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ModelElementItemEx.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ModelElementItemEx.java
deleted file mode 100644
index 5fee26631..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/ModelElementItemEx.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.command.CommandParameter;
-import org.eclipse.emf.edit.command.DragAndDropCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQueriesManager;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQuery;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.browser.util.EditingSupportUtil;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-
-public class ModelElementItemEx extends ModelElementItem implements IEditingDomainItemProvider {
-
- private final BrowserConfiguration browserConfiguration;
-
- public ModelElementItemEx(final EObject eObject, final ITreeElement treeParent,
- final BrowserConfiguration browserConfiguration) {
- super(eObject, treeParent, browserConfiguration.getAppearanceConfiguration());
- this.browserConfiguration = browserConfiguration;
- }
-
- private void addSelectedQueries(final List<Object> children) {
- SelectedQueriesManager selectedQueriesManager = this.browserConfiguration
- .getSelectedQueriesManager();
- List<SelectedQuery> selectedQueries = selectedQueriesManager
- .getSelectedQueriesFor(getEObject());
- if (selectedQueries != null && selectedQueries.size() > 0) {
- for (SelectedQuery selectedQuery : selectedQueries) {
- if (selectedQuery.getModelQuery() != null) {
- children.add(new QueryItem(getEObject(), this, selectedQuery,
- this.browserConfiguration));
- } else {
- MoDiscoLogger.logError(Messages.ModelElementItem_nullQuerySelected,
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
- }
- }
-
- @Override
- protected void addVirtualElements(final List<Object> children) {
- // queries selected on the element
- addSelectedQueries(children);
- }
-
- public Collection<?> getChildren(final Object object) {
- throw new UnsupportedOperationException();
- }
-
- public Object getParent(final Object object) {
- return getTreeParent();
- }
-
- public Collection<?> getNewChildDescriptors(final Object object,
- final EditingDomain editingDomain, final Object sibling) {
- // do not create siblings from links (confusing for the user)
- if (sibling instanceof LinkItem) {
- return Collections.emptyList();
- }
-
- Resource eResource = getEObject().eResource();
- if (eResource != null && eResource.getURI().isPlatformResource()) {
- if (sibling != null) {
- if (getEObject().eContainer() != null) {
- return EditingSupportUtil.getNewChildDescriptors(getEObject().eContainer()
- .eClass().getEAllReferences(),
- this.browserConfiguration.getResourceSet());
- }
- return Collections.EMPTY_LIST;
- }
-
- Collection<?> descriptors = EditingSupportUtil.getNewChildDescriptors(getEObject()
- .eClass().getEAllReferences(), this.browserConfiguration.getResourceSet());
- return descriptors;
- }
-
- return null;
- }
-
- public Command createCommand(final Object object, final EditingDomain editingDomain,
- final Class<? extends Command> commandClass, final CommandParameter commandParameter) {
-
- if (commandClass == DragAndDropCommand.class) {
- DragAndDropCommand.Detail detail = (DragAndDropCommand.Detail) commandParameter
- .getFeature();
-
- return new DragAndDropOnModelElementCommand(editingDomain, this, detail.location,
- detail.operations, detail.operation, commandParameter.getCollection());
- }
- throw new UnsupportedOperationException();
- }
-
- @Override
- public String toString() {
- return ModelElementItemEx.class.getSimpleName() + "{" + getElementID() + "}(" + getText() //$NON-NLS-1$ //$NON-NLS-2$
- + ")" + System.identityHashCode(this); //$NON-NLS-1$
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/QueryItem.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/QueryItem.java
deleted file mode 100644
index 2acc62608..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/QueryItem.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQuery;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.Util;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-
-/**
- * A tree element representing a query that can be executed on the parent model
- * element.
- */
-public class QueryItem implements ITreeElement {
-
- /**
- * The model element that appears as the parent of the query item in the
- * tree
- */
- private final EObject parent;
- /** The parent tree item */
- private final ITreeElement treeParent;
- /**
- * The model query that can be executed, and whose results appear as
- * children of the {@link QueryItem}
- */
- private final SelectedQuery query;
- /** The configuration of the browser in which the model is displayed */
- private final BrowserConfiguration browserConfiguration;
-
- private List<?> cachedChildren = null;
- private int cachedChildrenModCount = -1;
-
- /**
- * Instantiate a new {@link QueryItem}.
- *
- * @param parent
- * the model element that appears as the parent of the query item
- * in the tree
- * @param treeParent
- * the parent tree item
- * @param query
- * the model query that can be executed, and whose results appear
- * as children of the {@link QueryItem}
- * @param browserConfiguration
- * the configuration of the browser in which the model is
- * displayed
- */
- public QueryItem(final EObject parent, final ITreeElement treeParent,
- final SelectedQuery query, final BrowserConfiguration browserConfiguration) {
- this.parent = parent;
- this.treeParent = treeParent;
- this.query = query;
- this.browserConfiguration = browserConfiguration;
- }
-
- public String getText() {
- if (!this.query.isExecuted()) {
- return this.query.getModelQuery().getName() + " (?)"; //$NON-NLS-1$
- }
-
- Object queryResult = this.query.getResult();
- if (queryResult instanceof Collection<?>) {
- @SuppressWarnings("unchecked")
- Collection<Object> elements = (Collection<Object>) queryResult;
- return this.query.getModelQuery().getName() + " (" + elements.size() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
- // a single element is displayed directly on the query item
- final String text;
- if (queryResult instanceof EObject) {
- EObject eObject = (EObject) queryResult;
- text = ModelElementItem.getDisplayName(eObject, this.browserConfiguration.getAppearanceConfiguration());
- } else if (queryResult == null) {
- text = "null"; //$NON-NLS-1$
- } else {
- text = queryResult.toString();
- }
- return this.query.getModelQuery().getName() + " = " + text; //$NON-NLS-1$
- }
-
- public Image getImage() {
- return ImageProvider.getInstance().getQueryIcon();
- }
-
- public Object getParent() {
- return this.parent;
- }
-
- public ITreeElement getTreeParent() {
- return this.treeParent;
- }
-
- public List<?> getChildren() {
- // if (!this.query.isExecuted()) {
- // return Collections.emptyList();
- // }
-
- if (this.cachedChildrenModCount != this.browserConfiguration.getAppearanceConfiguration().getModCount()) {
- Object queryResult = this.query.getResult();
-
- if (queryResult == null) {
- this.cachedChildren = Collections.emptyList();
- } else if (queryResult instanceof EObject) {
- EObject element = (EObject) queryResult;
- this.cachedChildren = Collections.singletonList(new ModelElementItemEx(element, this,
- this.browserConfiguration));
- } else if (queryResult instanceof Collection<?>) {
- Collection<?> elements = (Collection<?>) queryResult;
- // TODO: partition big collections?
- List<Object> children = new ArrayList<Object>();
- for (Object element : elements) {
- if (element instanceof EObject) {
- EObject eObject = (EObject) element;
- children.add(new ModelElementItemEx(eObject, this, this.browserConfiguration));
- } else {
- children.add(element);
- }
- }
- this.cachedChildren = Collections.unmodifiableList(children);
- } else {
- this.cachedChildren = Collections.singletonList(queryResult);
- }
- this.cachedChildrenModCount = this.browserConfiguration.getAppearanceConfiguration().getModCount();
- }
- return this.cachedChildren;
- }
-
- public boolean hasChildren() {
- if (!this.query.isExecuted()) {
- // the children will be computed when the node is expanded
- return true;
- }
-
- return getChildren().size() > 0;
- }
-
- public Font getFont() {
- return null;
- }
-
- public Color getForeground() {
- return null;
- }
-
- public Color getBackground() {
- return null;
- }
-
- public SelectedQuery getQuery() {
- return this.query;
- }
-
- /**
- * equals and hashCode are used to restore the selection in the JFace viewer
- */
- @Override
- public boolean equals(final Object obj) {
- if (obj instanceof QueryItem) {
- final QueryItem other = (QueryItem) obj;
- return Util.safeEquals(this.query, other.query) && this.parent.equals(other.parent);
- }
- return false;
- }
-
- /**
- * equals and hashCode are used to restore the selection in the JFace viewer
- */
- @Override
- public int hashCode() {
- final int hashPrime1 = 47;
- final int hashPrime2 = 13;
-
- final int parentHashCode = this.parent.hashCode() + hashPrime2;
- if (this.query != null) {
- return this.query.hashCode() * hashPrime1 + parentHashCode;
- }
- return parentHashCode;
- }
-} \ No newline at end of file
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/SearchResults.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/SearchResults.java
deleted file mode 100644
index 3c922303a..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/core/SearchResults.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.core;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.BigListItem;
-
-/**
- * A list of instances which match a search string provided by the user, for
- * displaying in the model browser tree.
- */
-public class SearchResults {
-
- /** The elements that match the search */
- private final ArrayList<EObject> elements = new ArrayList<EObject>();
-
- /** The configuration of the editor */
- private final BrowserConfiguration browserConfiguration;
-
- public SearchResults(final BrowserConfiguration browserConfiguration) {
- this.browserConfiguration = browserConfiguration;
- }
-
- public List<?> getElements() {
- return BigListItem.splitElements(null, null, this.elements, this.browserConfiguration
- .getAppearanceConfiguration(), false);
- }
-
- /** Add this instance to the list of instances matching the search */
- public void add(final EObject object) {
- this.elements.add(object);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/EnableDerivedLinksPromptDialog.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/EnableDerivedLinksPromptDialog.java
deleted file mode 100644
index 0f05ada7d..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/EnableDerivedLinksPromptDialog.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.dialogs;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.preferences.PreferenceConstants;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-public final class EnableDerivedLinksPromptDialog extends MessageDialog {
-
- private Button cbRememberSetting;
- private boolean rememberSetting;
-
- private EnableDerivedLinksPromptDialog(final Shell parentShell, final String dialogTitle,
- final Image dialogTitleImage, final String dialogMessage, final int dialogImageType,
- final String[] dialogButtonLabels, final int defaultIndex) {
- super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType,
- dialogButtonLabels, defaultIndex);
- }
-
- @Override
- protected Control createCustomArea(final Composite parent) {
- this.cbRememberSetting = new Button(parent, SWT.CHECK);
- this.cbRememberSetting.setText(Messages.EnableDerivedLinksPromptDialog_rememberDecision);
- return this.cbRememberSetting;
- }
-
- @Override
- public boolean close() {
- this.rememberSetting = this.cbRememberSetting.getSelection();
- return super.close();
- }
-
- private boolean isRememberSetting() {
- return this.rememberSetting;
- }
-
- public static boolean open(final Shell parent) {
- String message = Messages.EnableDerivedLinksPromptDialog_enableDerivedLinksLong;
- EnableDerivedLinksPromptDialog dialog = new EnableDerivedLinksPromptDialog(parent,
- Messages.EnableDerivedLinksPromptDialog_enableDerivedLinks, null, message,
- MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL,
- IDialogConstants.NO_LABEL }, 0);
- dialog.setShellStyle(dialog.getShellStyle() | SWT.SHEET);
- int result = dialog.open();
- final int yesButton = 0;
- final int noButton = 1;
- if (dialog.isRememberSetting()) {
- IPreferenceStore preferenceStore = MoDiscoBrowserPlugin.getPlugin()
- .getPreferenceStore();
- if (result == yesButton) {
- preferenceStore.setValue(
- PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_SETTING,
- PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_ALWAYS);
- } else if (result == noButton) {
- preferenceStore.setValue(
- PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_SETTING,
- PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_NEVER);
- }
- }
- return result == 0;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/ErrorsDialog.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/ErrorsDialog.java
deleted file mode 100644
index 3b00f9737..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/ErrorsDialog.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.dialogs;
-
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-
-/** A dialog to display a list of errors on EMF resources */
-public class ErrorsDialog extends Dialog {
- private static final int INITIAL_WIDTH = 600;
- private static final int INITIAL_HEIGHT = 600;
- private final Diagnostic fDiagnostic;
-
- public ErrorsDialog(final Shell parentShell, final Diagnostic diagnostic) {
- super(parentShell);
- this.fDiagnostic = diagnostic;
- }
-
- @Override
- protected void configureShell(final Shell newShell) {
- super.configureShell(newShell);
- newShell.setText(Messages.ErrorsDialog_errors);
- newShell.setImage(ImageProvider.getInstance().getMoDiscoIcon());
-
- IDialogSettings dialogBoundsSettings = getDialogBoundsSettings();
- // initialize size if not yet saved (see Dialog#DIALOG_WIDTH)
- if (dialogBoundsSettings.get("DIALOG_WIDTH") == null) { //$NON-NLS-1$
- Rectangle parent = getParentShell().getBounds();
- // centered
- newShell.setBounds(parent.x + parent.width / 2 - ErrorsDialog.INITIAL_WIDTH / 2,
- parent.y + parent.height / 2 - ErrorsDialog.INITIAL_HEIGHT / 2,
- ErrorsDialog.INITIAL_WIDTH, ErrorsDialog.INITIAL_HEIGHT);
- }
- }
-
- @Override
- protected Control createDialogArea(final Composite parent) {
- final Composite composite = (Composite) super.createDialogArea(parent);
-
- SashForm sashForm = new SashForm(composite, SWT.NONE);
- sashForm.setOrientation(SWT.VERTICAL);
- sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-
- final TreeViewer treeViewer = new TreeViewer(sashForm, SWT.BORDER | SWT.SINGLE
- | SWT.H_SCROLL | SWT.V_SCROLL);
- final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
- treeViewer.getControl().setLayoutData(gridData);
-
- treeViewer.setContentProvider(new ITreeContentProvider() {
- public Object[] getElements(final Object inputElement) {
- return getChildren(inputElement);
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput,
- final Object newInput) {
- // nothing
- }
-
- public void dispose() {
- // nothing
- }
-
- public Object[] getChildren(final Object parentElement) {
- Diagnostic diagnostic = (Diagnostic) parentElement;
- return diagnostic.getChildren().toArray();
- }
-
- public Object getParent(final Object element) {
- return null;
- }
-
- public boolean hasChildren(final Object element) {
- Diagnostic diagnostic = (Diagnostic) element;
- return !diagnostic.getChildren().isEmpty();
- }
- });
-
- treeViewer.setLabelProvider(new LabelProvider() {
- @Override
- public String getText(final Object element) {
- final Diagnostic diagnostic = (Diagnostic) element;
- return diagnostic.getMessage();
- }
-
- @Override
- public Image getImage(final Object element) {
- Diagnostic diagnostic = (Diagnostic) element;
- int severity = diagnostic.getSeverity();
- if (severity == Diagnostic.WARNING) {
- return PlatformUI.getWorkbench().getSharedImages()
- .getImage(ISharedImages.IMG_OBJS_WARN_TSK);
- } else if (severity == Diagnostic.ERROR) {
- return PlatformUI.getWorkbench().getSharedImages()
- .getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
- } else if (severity == Diagnostic.INFO) {
- return PlatformUI.getWorkbench().getSharedImages()
- .getImage(ISharedImages.IMG_OBJS_INFO_TSK);
- }
- return null;
- }
- });
- treeViewer.setInput(this.fDiagnostic);
-
- final Text text = new Text(sashForm, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL
- | SWT.V_SCROLL | SWT.WRAP);
- final GridData gridData2 = new GridData(SWT.FILL, SWT.FILL, true, true);
- // gridData2.minimumWidth = ErrorsDialog.LIST_MIN_WIDTH;
- // gridData2.minimumHeight = ErrorsDialog.LIST_MIN_HEIGHT;
- text.setLayoutData(gridData2);
- sashForm.setWeights(new int[] { 2, 1 });
-
- treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
- @SuppressWarnings("boxing")
- public void selectionChanged(final SelectionChangedEvent event) {
- final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
- if (selection == null) {
- text.setText(""); //$NON-NLS-1$
- return;
- }
- final Diagnostic diagnostic = (Diagnostic) selection.getFirstElement();
- // final String str =
- // NLS.bind(Messages.ErrorsDialog_diagnosticMessage, new
- // Object[] {
- // diagnostic.getMessage(), diagnostic.getLocation(),
- // diagnostic.getLine(),
- // diagnostic.getColumn() });
- StringBuilder builder = new StringBuilder();
- // builder.append("source: " + diagnostic.getSource());
- if (diagnostic.getMessage() != null) {
- builder.append(diagnostic.getMessage());
- }
- text.setText(builder.toString());
- }
- });
-
- return composite;
- }
-
- @Override
- protected void createButtonsForButtonBar(final Composite parent) {
- // only an OK button
- createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
- }
-
- @Override
- protected boolean isResizable() {
- return true;
- }
-
- @Override
- protected IDialogSettings getDialogBoundsSettings() {
- final String sectionName = this.getClass().getName() + ".settings"; //$NON-NLS-1$
- IDialogSettings settings = MoDiscoBrowserPlugin.getPlugin().getDialogSettings();
- IDialogSettings section = settings.getSection(sectionName);
- if (section == null) {
- section = settings.addNewSection(sectionName);
- }
- return section;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/LoadCustomizationsDialog.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/LoadCustomizationsDialog.java
deleted file mode 100644
index 50bbea638..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/dialogs/LoadCustomizationsDialog.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.dialogs;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.custom.MetamodelView;
-import org.eclipse.gmt.modisco.infra.browser.custom.core.CustomizationsCatalog;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.internal.builder.AbstractMoDiscoCatalog;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IContentProvider;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.dialogs.PatternFilter;
-
-public class LoadCustomizationsDialog extends Dialog {
-
- private static final int CUSTOMIZATIONS_TREE_WIDTH = 200;
- private static final int CUSTOMIZATIONS_TREE_HEIGHT = 250;
- private static final int NUM_COLUMNS = 4;
- private final List<MetamodelView> fAvailableCustomizations;
- private final LabelProvider fLabelProvider;
- private final IContentProvider fContentProvider;
- private final EList<MetamodelView> fSelectedCustomizations;
- private TreeViewer fAvailableCustomizationsTreeViewer;
- private TreeViewer fSelectedCustomizationsTreeViewer;
- private Button fAddButton;
- private Button fRemoveButton;
- private Button fAddAllButton;
- private Button fRemoveAllButton;
- private Button fUpButton;
- private Button fDownButton;
- private Button fLoadRequiredFacetsCheckbox;
- private final List<MetamodelView> fInitiallySelectedCustomizations;
- private boolean fLoadRequiredFacetsSelected = false;
-
- public LoadCustomizationsDialog(final Shell parent,
- final List<MetamodelView> initiallySelectedCustomizations,
- final Collection<EPackage> ePackages) {
- super(parent);
- this.fInitiallySelectedCustomizations = initiallySelectedCustomizations;
- setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);
-
- this.fSelectedCustomizations = new BasicEList<MetamodelView>();
-
- this.fLabelProvider = new LabelProvider() {
- @Override
- public String getText(final Object element) {
- final MetamodelView metamodelView = (MetamodelView) element;
- return metamodelView.getName();
- }
-
- @Override
- public Image getImage(final Object element) {
- return ImageProvider.getInstance().getUiCustomIcon();
- }
- };
-
- this.fAvailableCustomizations = Collections
- .synchronizedList(new ArrayList<MetamodelView>());
-
- /*
- * Background loading, so that the dialog opens instantly even if the
- * customizations take a while to load.
- */
- AbstractMoDiscoCatalog.whenBuilt(new Runnable() {
- public void run() {
- LoadCustomizationsDialog.this.fAvailableCustomizations.clear();
- LoadCustomizationsDialog.this.fAvailableCustomizations.addAll(CustomizationsCatalog.filterForMetamodel(
- CustomizationsCatalog.getInstance().getAllCustomizations(), ePackages));
-
- // initial selection
- for (final MetamodelView initiallySelectedCustomization : LoadCustomizationsDialog.this.fInitiallySelectedCustomizations) {
- final URI initiallySelectedCustomizationURI = EcoreUtil
- .getURI(initiallySelectedCustomization);
- final ListIterator<MetamodelView> availableCustomizationsIterator = LoadCustomizationsDialog.this.fAvailableCustomizations
- .listIterator();
- while (availableCustomizationsIterator.hasNext()) {
- final MetamodelView availableCustomization = availableCustomizationsIterator
- .next();
- final URI availableCustomizationURI = EcoreUtil
- .getURI(availableCustomization);
- if (availableCustomizationURI.equals(initiallySelectedCustomizationURI)) {
- availableCustomizationsIterator.remove();
- LoadCustomizationsDialog.this.fSelectedCustomizations
- .add(initiallySelectedCustomization);
- }
-
- }
- }
-
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if (!LoadCustomizationsDialog.this.fAvailableCustomizationsTreeViewer
- .getControl().isDisposed()) {
- LoadCustomizationsDialog.this.fAvailableCustomizationsTreeViewer
- .refresh();
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer
- .refresh();
- }
- }
- });
- }
- });
-
- this.fContentProvider = new ITreeContentProvider() {
-
- public Object[] getElements(final Object inputElement) {
- @SuppressWarnings("unchecked")
- final List<MetamodelView> customizations = (List<MetamodelView>) inputElement;
- return customizations.toArray();
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput,
- final Object newInput) {
- // nothing
- }
-
- public void dispose() {
- // nothing
- }
-
- public Object[] getChildren(final Object parentElement) {
- return null;
- }
-
- public Object getParent(final Object element) {
- return null;
- }
-
- public boolean hasChildren(final Object element) {
- return false;
- }
- };
- }
-
- @Override
- protected void configureShell(final Shell shell) {
- super.configureShell(shell);
- shell.setText(Messages.LoadCustomizationsDialog_title_LoadCustomizations);
- // shell.setImage(labelProvider.getImage(object));
- }
-
- @Override
- protected Control createDialogArea(final Composite parent) {
- final Composite contents = (Composite) super.createDialogArea(parent);
-
- final GridLayout contentsGridLayout = (GridLayout) contents.getLayout();
- contentsGridLayout.numColumns = LoadCustomizationsDialog.NUM_COLUMNS;
-
- final GridData contentsGridData = (GridData) contents.getLayoutData();
- contentsGridData.horizontalAlignment = SWT.FILL;
- contentsGridData.verticalAlignment = SWT.FILL;
-
- createLeftPane(contents);
- createMiddleButtonsPane(contents);
- createRightPane(contents);
- createRightButtonsPane(contents);
- createLoadRequiredFacetsCheckbox(contents);
-
- this.fAvailableCustomizationsTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(final DoubleClickEvent event) {
- if (LoadCustomizationsDialog.this.fAddButton.isEnabled()) {
- LoadCustomizationsDialog.this.fAddButton.notifyListeners(SWT.Selection, null);
- }
- }
- });
-
- this.fSelectedCustomizationsTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
- public void doubleClick(final DoubleClickEvent event) {
- if (LoadCustomizationsDialog.this.fRemoveButton.isEnabled()) {
- LoadCustomizationsDialog.this.fRemoveButton
- .notifyListeners(SWT.Selection, null);
- }
- }
- });
-
- this.fUpButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- upButtonClicked();
- }
- });
-
- this.fDownButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- downButtonClicked();
- }
- });
-
- this.fAddButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- addButtonClicked();
- }
- });
-
- this.fAddAllButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- addAllButtonClicked();
- }
- });
-
- this.fRemoveButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- removeButtonClicked();
- }
- });
-
- this.fRemoveAllButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent event) {
- removeAllButtonClicked();
- }
- });
-
- return contents;
- }
-
- @SuppressWarnings("unchecked")
- private void upButtonClicked() {
- final IStructuredSelection selection = (IStructuredSelection) LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer
- .getSelection();
-
- int minIndex = 0;
- for (final Iterator<MetamodelView> it = selection.iterator(); it.hasNext();) {
- final MetamodelView element = it.next();
- final int index = LoadCustomizationsDialog.this.fSelectedCustomizations
- .indexOf(element);
- LoadCustomizationsDialog.this.fSelectedCustomizations.move(
- Math.max(index - 1, minIndex++), element);
- }
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer.refresh();
- }
-
- private void downButtonClicked() {
- final IStructuredSelection selection = (IStructuredSelection) LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer
- .getSelection();
- final ArrayList<Object> selectedObjects = new ArrayList<Object>();
- for (final Object selectedObject : selection.toArray()) {
- selectedObjects.add(selectedObject);
- }
-
- // prevent the last two elements from swapping
- boolean canMove = !selectedObjects
- .contains(LoadCustomizationsDialog.this.fSelectedCustomizations
- .get(LoadCustomizationsDialog.this.fSelectedCustomizations.size() - 1));
- for (int i = LoadCustomizationsDialog.this.fSelectedCustomizations.size() - 2; i >= 0; i--) {
- final MetamodelView selectedCustomization = LoadCustomizationsDialog.this.fSelectedCustomizations
- .get(i);
- if (selectedObjects.contains(selectedCustomization)) {
- if (canMove) {
- LoadCustomizationsDialog.this.fSelectedCustomizations.move(i + 1,
- selectedCustomization);
- }
- } else {
- canMove = true;
- }
-
- }
-
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer.refresh();
- }
-
- @SuppressWarnings("unchecked")
- private void addButtonClicked() {
- final IStructuredSelection selection = (IStructuredSelection) LoadCustomizationsDialog.this.fAvailableCustomizationsTreeViewer
- .getSelection();
- for (final Iterator<MetamodelView> it = selection.iterator(); it.hasNext();) {
- final MetamodelView element = it.next();
- if (!LoadCustomizationsDialog.this.fSelectedCustomizations.contains(element)) {
- LoadCustomizationsDialog.this.fSelectedCustomizations.add(element);
- LoadCustomizationsDialog.this.fAvailableCustomizations.remove(element);
- }
- }
- refresh();
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer.setSelection(selection);
- }
-
- private void addAllButtonClicked() {
- ListIterator<MetamodelView> listIterator = LoadCustomizationsDialog.this.fAvailableCustomizations
- .listIterator();
- while (listIterator.hasNext()) {
- final MetamodelView element = listIterator.next();
- LoadCustomizationsDialog.this.fSelectedCustomizations.add(element);
- listIterator.remove();
- }
- refresh();
- }
-
- @SuppressWarnings("unchecked")
- private void removeButtonClicked() {
- final IStructuredSelection selection = (IStructuredSelection) LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer
- .getSelection();
- for (final Iterator<MetamodelView> i = selection.iterator(); i.hasNext();) {
- final MetamodelView element = i.next();
- LoadCustomizationsDialog.this.fSelectedCustomizations.remove(element);
- LoadCustomizationsDialog.this.fAvailableCustomizations.add(element);
- }
-
- if (LoadCustomizationsDialog.this.fSelectedCustomizations.size() > 0) {
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer
- .setSelection(new StructuredSelection(
- LoadCustomizationsDialog.this.fSelectedCustomizations.get(0)));
- }
- refresh();
- }
-
- private void removeAllButtonClicked() {
- ListIterator<MetamodelView> listIterator = LoadCustomizationsDialog.this.fSelectedCustomizations
- .listIterator();
- while (listIterator.hasNext()) {
- final MetamodelView element = listIterator.next();
- LoadCustomizationsDialog.this.fAvailableCustomizations.add(element);
- listIterator.remove();
- }
- refresh();
- }
-
- private void createLeftPane(final Composite contents) {
- final Composite choiceComposite = new Composite(contents, SWT.NONE);
- final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
- data.horizontalAlignment = SWT.END;
- choiceComposite.setLayoutData(data);
-
- final GridLayout layout = new GridLayout();
- data.horizontalAlignment = SWT.FILL;
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- layout.numColumns = 1;
- choiceComposite.setLayout(layout);
-
- final Label choiceLabel = new Label(choiceComposite, SWT.NONE);
- choiceLabel.setText(Messages.LoadFacetsDialog_AvailableCustomizationsLabel);
-
- final GridData choiceLabelGridData = new GridData();
- choiceLabelGridData.verticalAlignment = SWT.FILL;
- choiceLabelGridData.horizontalAlignment = SWT.FILL;
- choiceLabel.setLayoutData(choiceLabelGridData);
-
- final Text patternText = createFilterText(choiceComposite);
-
- final Tree availableCustomizationsTree = new Tree(choiceComposite, SWT.MULTI | SWT.BORDER);
- final GridData availableCustomizationsGridData = new GridData();
- availableCustomizationsGridData.widthHint = LoadCustomizationsDialog.CUSTOMIZATIONS_TREE_WIDTH;
- availableCustomizationsGridData.heightHint = LoadCustomizationsDialog.CUSTOMIZATIONS_TREE_HEIGHT;
- availableCustomizationsGridData.horizontalAlignment = SWT.FILL;
- availableCustomizationsGridData.verticalAlignment = SWT.FILL;
- availableCustomizationsGridData.grabExcessHorizontalSpace = true;
- availableCustomizationsGridData.grabExcessVerticalSpace = true;
- availableCustomizationsTree.setLayoutData(availableCustomizationsGridData);
-
- this.fAvailableCustomizationsTreeViewer = new TreeViewer(availableCustomizationsTree);
- this.fAvailableCustomizationsTreeViewer.setContentProvider(this.fContentProvider);
- this.fAvailableCustomizationsTreeViewer.setLabelProvider(this.fLabelProvider);
- final PatternFilter filter = new PatternFilter();
- this.fAvailableCustomizationsTreeViewer.addFilter(filter);
-
- this.fAvailableCustomizationsTreeViewer.setInput(this.fAvailableCustomizations);
-
- final TreeItem treeItem = new TreeItem(availableCustomizationsTree, SWT.NONE);
- treeItem.setText(Messages.LoadCustomizationsDialog_Loading);
-
- patternText.addModifyListener(new ModifyListener() {
- public void modifyText(final ModifyEvent e) {
- filter.setPattern(patternText.getText());
- LoadCustomizationsDialog.this.fAvailableCustomizationsTreeViewer.refresh();
- }
- });
- }
-
- private void createMiddleButtonsPane(final Composite contents) {
- final Composite buttonsComposite = new Composite(contents, SWT.NONE);
- final GridData buttonsCompositeGridData = new GridData();
- buttonsCompositeGridData.verticalAlignment = SWT.CENTER;
- buttonsCompositeGridData.horizontalAlignment = SWT.FILL;
- buttonsComposite.setLayoutData(buttonsCompositeGridData);
- buttonsComposite.setLayout(new GridLayout());
-
- // new Label(buttonsComposite, SWT.NONE);
-
- this.fAddButton = new Button(buttonsComposite, SWT.PUSH);
- this.fAddButton.setText(Messages.LoadCustomizationsDialog_Add);
- this.fAddButton.setToolTipText(Messages.LoadFacetsDialog_AddTooltip);
- final GridData addButtonGridData = new GridData();
- addButtonGridData.verticalAlignment = SWT.FILL;
- addButtonGridData.horizontalAlignment = SWT.FILL;
- this.fAddButton.setLayoutData(addButtonGridData);
-
- this.fRemoveButton = new Button(buttonsComposite, SWT.PUSH);
- this.fRemoveButton.setText(Messages.LoadCustomizationsDialog_Remove);
- this.fRemoveButton.setToolTipText(Messages.LoadFacetsDialog_RemoveTooltip);
- final GridData removeButtonGridData = new GridData();
- removeButtonGridData.verticalAlignment = SWT.FILL;
- removeButtonGridData.horizontalAlignment = SWT.FILL;
- this.fRemoveButton.setLayoutData(removeButtonGridData);
-
- spacer(buttonsComposite);
-
- this.fAddAllButton = new Button(buttonsComposite, SWT.PUSH);
- this.fAddAllButton.setText(Messages.LoadCustomizationsDialog_AddAll);
- this.fAddAllButton.setToolTipText(Messages.LoadFacetsDialog_AddAllTooltip);
-
- this.fRemoveAllButton = new Button(buttonsComposite, SWT.PUSH);
- this.fRemoveAllButton.setText(Messages.LoadCustomizationsDialog_RemoveAll);
- this.fRemoveAllButton.setToolTipText(Messages.LoadFacetsDialog_RemoveAllTooltip);
- }
-
- private void spacer(final Composite parent) {
- @SuppressWarnings("unused")
- Label label = new Label(parent, SWT.NONE);
- }
-
- private void createRightButtonsPane(final Composite contents) {
- final Composite buttonsComposite = new Composite(contents, SWT.NONE);
- final GridData buttonsCompositeGridData = new GridData();
- buttonsCompositeGridData.verticalAlignment = SWT.FILL;
- buttonsCompositeGridData.horizontalAlignment = SWT.FILL;
- buttonsComposite.setLayoutData(buttonsCompositeGridData);
- buttonsComposite.setLayout(new GridLayout());
-
- // spacer
- spacer(buttonsComposite);
-
- this.fUpButton = new Button(buttonsComposite, SWT.PUSH);
- this.fUpButton.setText(Messages.LoadFacetsDialog_UpLabel);
- final GridData upButtonGridData = new GridData();
- upButtonGridData.verticalAlignment = SWT.FILL;
- upButtonGridData.horizontalAlignment = SWT.FILL;
- this.fUpButton.setLayoutData(upButtonGridData);
-
- this.fDownButton = new Button(buttonsComposite, SWT.PUSH);
- this.fDownButton.setText(Messages.LoadFacetsDialog_DownLabel);
- final GridData downButtonGridData = new GridData();
- downButtonGridData.verticalAlignment = SWT.FILL;
- downButtonGridData.horizontalAlignment = SWT.FILL;
- this.fDownButton.setLayoutData(downButtonGridData);
- }
-
- private void createRightPane(final Composite contents) {
- final Composite featureComposite = new Composite(contents, SWT.NONE);
- final GridData featureCompositeData = new GridData(SWT.FILL, SWT.FILL, true, true);
- featureCompositeData.horizontalAlignment = SWT.END;
- featureComposite.setLayoutData(featureCompositeData);
-
- final GridLayout featureCompositeLayout = new GridLayout();
- featureCompositeData.horizontalAlignment = SWT.FILL;
- featureCompositeLayout.marginHeight = 0;
- featureCompositeLayout.marginWidth = 0;
- featureCompositeLayout.numColumns = 1;
- featureComposite.setLayout(featureCompositeLayout);
-
- final Label featureLabel = new Label(featureComposite, SWT.NONE);
- featureLabel.setText(Messages.LoadFacetsDialog_LoadedCustomizations);
- final GridData featureLabelGridData = new GridData();
- featureLabelGridData.horizontalSpan = 2;
- featureLabelGridData.horizontalAlignment = SWT.FILL;
- featureLabelGridData.verticalAlignment = SWT.FILL;
- featureLabel.setLayoutData(featureLabelGridData);
-
- final Tree loadedCustomizationsTree = new Tree(featureComposite, SWT.MULTI | SWT.BORDER);
- final GridData loadedCustomizationsGridData = new GridData();
- loadedCustomizationsGridData.widthHint = LoadCustomizationsDialog.CUSTOMIZATIONS_TREE_WIDTH;
- loadedCustomizationsGridData.heightHint = LoadCustomizationsDialog.CUSTOMIZATIONS_TREE_HEIGHT;
- loadedCustomizationsGridData.verticalAlignment = SWT.FILL;
- loadedCustomizationsGridData.horizontalAlignment = SWT.FILL;
- loadedCustomizationsGridData.grabExcessHorizontalSpace = true;
- loadedCustomizationsGridData.grabExcessVerticalSpace = true;
- loadedCustomizationsTree.setLayoutData(loadedCustomizationsGridData);
-
- this.fSelectedCustomizationsTreeViewer = new TreeViewer(loadedCustomizationsTree);
- this.fSelectedCustomizationsTreeViewer.setContentProvider(this.fContentProvider);
- this.fSelectedCustomizationsTreeViewer.setLabelProvider(this.fLabelProvider);
- this.fSelectedCustomizationsTreeViewer.setInput(this.fSelectedCustomizations);
- }
-
- private void createLoadRequiredFacetsCheckbox(final Composite contents) {
- spacer(contents);
- spacer(contents);
- this.fLoadRequiredFacetsCheckbox = new Button(contents, SWT.CHECK);
- this.fLoadRequiredFacetsCheckbox
- .setText(Messages.LoadCustomizationsDialog_loadReferencedFacetsCheckbox);
- this.fLoadRequiredFacetsCheckbox.setSelection(true);
- this.fLoadRequiredFacetsCheckbox
- .setLayoutData(new GridData(SWT.END, SWT.FILL, false, false));
-
- }
-
- private Text createFilterText(final Composite contents) {
- Text patternText = new Text(contents, SWT.BORDER | SWT.SEARCH);
- patternText.setMessage(Messages.LoadFacetsDialog_FilterTextMessage);
- patternText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- return patternText;
- }
-
- @Override
- protected void okPressed() {
- this.fLoadRequiredFacetsSelected = this.fLoadRequiredFacetsCheckbox.getSelection();
- super.okPressed();
- }
-
- public boolean isLoadRequiredFacetsSelected() {
- return this.fLoadRequiredFacetsSelected;
- }
-
- // @Override
- // public boolean close() {
- // fContentProvider.dispose();
- // return super.close();
- // }
-
- public List<MetamodelView> getSelectedCustomizations() {
- return this.fSelectedCustomizations;
- }
-
- private void refresh() {
- LoadCustomizationsDialog.this.fAvailableCustomizationsTreeViewer.refresh();
- LoadCustomizationsDialog.this.fSelectedCustomizationsTreeViewer.refresh();
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserActionBarContributor.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserActionBarContributor.java
deleted file mode 100644
index 1cd90ecd2..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserActionBarContributor.java
+++ /dev/null
@@ -1,787 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Payneau (Mia-Software) - Enable editability
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.eclipse.emf.common.command.AbstractCommand;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.UnexecutableCommand;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.edit.command.DeleteCommand;
-import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.ui.action.CreateChildAction;
-import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
-import org.eclipse.emf.edit.ui.action.CutAction;
-import org.eclipse.emf.edit.ui.action.DeleteAction;
-import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
-import org.eclipse.emf.edit.ui.action.ValidateAction;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.actions.BrowseAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.DecreaseFontSizeAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.ExecuteSelectedQueryAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.IBrowserActionBarContributor;
-import org.eclipse.gmt.modisco.infra.browser.actions.IncreaseFontSizeAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.LoadCustomizationsAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.LoadFacetsAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.OpenTableEditorAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.RefreshViewerAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.RemoveQueryAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.RestoreFontSizeAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.SelectQueryAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.ShowBothPanelsAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.ShowOnlyInstancesPanelAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.ShowOnlyTypesPanelAction;
-import org.eclipse.gmt.modisco.infra.browser.actions.ShowPropertiesViewAction;
-import org.eclipse.gmt.modisco.infra.browser.core.QueryItem;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditor;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IContributionManager;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.action.SubContributionItem;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchActionConstants;
-
-/** Action bar contributor for the MoDisco Ecore model browser. */
-public class BrowserActionBarContributor extends EditingDomainActionBarContributor implements
- IBrowserSelectionChangedListener, IBrowserActionBarContributor {
-
- private static final String EDIT_MENU_ID = "org.eclipse.gmt.modisco.infra.browser.editMenu"; //$NON-NLS-1$
-
- /** This keeps track of the active editor. */
- private IEditorPart fActiveEditor;
-
- /** This keeps track of the current selection provider. */
- private ISelectionProvider selectionProvider;
-
- /** This action opens the "Properties" view. */
- private final IAction showPropertiesViewAction = new ShowPropertiesViewAction();
-
- public EcoreBrowser getBrowser() {
- return (EcoreBrowser) this.fActiveEditor;
- }
-
- /** This action opens a table editor on the current selection. */
- private final IAction openTableEditorAction = new OpenTableEditorAction(this);
-
- /**
- * This action refreshes the viewer of the current editor if the editor
- * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
- */
- private final IAction refreshViewerAction = new RefreshViewerAction(this);
-
- /**
- * This action makes it possible to select a query to be shown on each
- * occurrence of the selected model element
- */
- private final IAction selectQueryAction = new SelectQueryAction(this);
-
- /** Executes the selected query(-ies) */
- private final IAction executeSelectedQueryAction = new ExecuteSelectedQueryAction(this);
-
- /** Removes the selected query(-ies) */
- private final IAction removeQueryAction = new RemoveQueryAction(this);
-
- /**
- * The current selection, updated when an event is received from the
- * selection provider
- */
- private ISelection fSelection;
-
- public ISelection getSelection() {
- return this.fSelection;
- }
-
- /**
- * An action to show the selected element in the list of instances of its
- * metaclass
- */
- private final Action browseAction = new BrowseAction(this);
-
- /** An action to increase font size */
- private final Action increaseFontSizeAction = new IncreaseFontSizeAction(this);
-
- /** An action to decrease font size */
- private final Action decreaseFontSizeAction = new DecreaseFontSizeAction(this);
-
- /** An action to restore font size */
- private final Action restoreFontSizeAction = new RestoreFontSizeAction(this);
-
- private final Action loadCustomizationsAction = new LoadCustomizationsAction(this);
-
- private final Action loadFacetsAction = new LoadFacetsAction(this);
-
- private final Action showOnlyInstancesPanelAction = new ShowOnlyInstancesPanelAction(this);
- private final Action showOnlyTypesPanelAction = new ShowOnlyTypesPanelAction(this);
- private final Action showBothPanelsAction = new ShowBothPanelsAction(this);
-
- /**
- * This will contain one
- * {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to
- * each descriptor generated for the current selection by the item provider.
- */
- private Collection<IAction> createChildActions;
-
- /**
- * This is the menu manager into which menu contribution items should be
- * added for CreateChild actions.
- */
- private IMenuManager createChildMenuManager;
-
- private IMenuManager editorMenuManager;
-
- // private final IAction loadMetamodelAction = new Action(
- // Messages.BrowserActionBarContributor_loadMetamodel) {
- // @Override
- // public void run() {
- // UriSelectionDialog uriSelectionDialog = new UriSelectionDialog(
- // BrowserActionBarContributor.this.fActiveEditor.getSite().getShell());
- // uriSelectionDialog.setTitle(Messages.BrowserActionBarContributor_chooseMetamodel);
- // if (uriSelectionDialog.open() == Window.OK) {
- // String uri = uriSelectionDialog.getUriSelected();
- // EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(uri);
- // EList<Resource> resources = getBrowser().getResourceSet().getResources();
- // if (ePackage.eResource() != null &&
- // !resources.contains(ePackage.eResource())) {
- // resources.add(ePackage.eResource());
- // }
- // }
- // }
- // };
-
- // /**
- // * This will contain one
- // * {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction}
- // corresponding
- // * to each descriptor generated for the current selection by the item
- // * provider.
- // */
- // private Collection<IAction> createSiblingActions;
- //
- // /**
- // * This is the menu manager into which menu contribution items should be
- // * added for CreateSibling actions.
- // */
- // private IMenuManager createSiblingMenuManager;
-
- public BrowserActionBarContributor() {
- super(EditingDomainActionBarContributor.ADDITIONS_LAST_STYLE);
- this.validateAction = new ValidateAction() {
- @Override
- public boolean updateSelection(final IStructuredSelection selection) {
- return super.updateSelection((IStructuredSelection) BrowserUtils
- .unwrapSelection(selection));
- }
- };
-
- }
-
- /** This adds {@link Action}s to the tool bar. */
- @Override
- public void contributeToToolBar(final IToolBarManager toolBarManager) {
- toolBarManager.add(this.increaseFontSizeAction);
- toolBarManager.add(this.decreaseFontSizeAction);
- toolBarManager.add(this.restoreFontSizeAction);
- toolBarManager.add(this.loadCustomizationsAction);
- toolBarManager.add(this.loadFacetsAction);
- }
-
- /**
- * When the active editor changes, this remembers the change and registers
- * with it as a selection provider.
- */
- @Override
- public void setActiveEditor(final IEditorPart part) {
- super.setActiveEditor(part);
- this.fActiveEditor = part;
-
- // Switch to the new selection provider.
- if (this.selectionProvider != null) {
- this.selectionProvider.removeSelectionChangedListener(this);
- }
-
- if (part == null) {
- this.selectionProvider = null;
- } else {
- if (part instanceof EcoreBrowser) {
- final EcoreBrowser browser = (EcoreBrowser) part;
- this.selectionProvider = browser.getSite().getSelectionProvider();
- this.selectionProvider.addSelectionChangedListener(this);
-
- // Fake a selection changed event to update the menus.
- if (browser.getEditorSelection() != null) {
- selectionChanged(new SelectionChangedEvent(this.selectionProvider,
- browser.getEditorSelection()));
- }
- }
- }
- }
-
- /**
- * This implements
- * {@link org.eclipse.jface.viewers.ISelectionChangedListener}, memorizing
- * {@link org.eclipse.jface.viewers.SelectionChangedEvent}s to be able to
- * build the menu when they are about to be shown (see
- * {@link BrowserActionBarContributor#menuAboutToShow(IMenuManager)}).
- */
- public void selectionChanged(final SelectionChangedEvent event) {
- this.fSelection = event.getSelection();
- }
-
- /** Update actions state depending on the selection in the editor */
- private void updateActions(final ISelection selection) {
- this.browseAction.setEnabled(enableBrowse(selection));
- this.openTableEditorAction.setEnabled(TableEditor.canBeOpenedOnSelection(selection));
-
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- this.validateAction.updateSelection(structuredSelection);
- } else {
- this.validateAction.updateSelection(StructuredSelection.EMPTY);
- }
- }
-
- /**
- * Whether to enable the browse action. The browse action is enabled only if
- * the selected element corresponds to an EObject.
- */
- private boolean enableBrowse(final ISelection selection) {
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- if (structuredSelection.size() != 1) {
- return false;
- }
- final Object element = structuredSelection.getFirstElement();
- if (element instanceof ModelElementItem) {
- EObject eObject = ((ModelElementItem) element).getEObject();
- Resource eResource = eObject.eResource();
- if (eResource != null) {
- ResourceSet resourceSet = eResource.getResourceSet();
- if (resourceSet == getBrowser().getResourceSet()) {
- return true;
- }
- }
- return false;
- }
- }
- return false;
- }
-
- /** This populates the pop-up menu before it appears. */
- @Override
- public void menuAboutToShow(final IMenuManager menuManager) {
- if (!getBrowser().isReadOnly()) {
- final MenuManager submenuManager = new MenuManager(Messages.UI_CreateChild_menu_item);
- submenuManager.setRemoveAllWhenShown(true);
- submenuManager.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(final IMenuManager manager) {
- updateMenu();
- populateManager(submenuManager,
- BrowserActionBarContributor.this.createChildActions, null);
- }
- });
- menuManager.add(submenuManager);
-
- // submenuManager = new
- // MenuManager(Messages.UI_CreateSibling_menu_item);
- // populateManager(submenuManager, this.createSiblingActions, null);
- // menuManager.insertBefore("edit", submenuManager); //$NON-NLS-1$
- }
-
- menuManager.add(this.browseAction);
- menuManager.add(this.openTableEditorAction);
-
- int nSelectedModelElementItems = selectionCount(ModelElementItem.class);
- if (nSelectedModelElementItems > 0) {
- menuManager.add(this.selectQueryAction);
- if (nSelectedModelElementItems > 1) {
- this.selectQueryAction.setText(Messages.SelectQueryAction_addQueryOnElements);
- } else {
- this.selectQueryAction.setText(Messages.SelectQueryAction_addQueryOnElement);
- }
- }
-
- int nSelectedQueries = selectionCount(QueryItem.class);
- if (nSelectedQueries > 0) {
- menuManager.add(this.executeSelectedQueryAction);
- menuManager.add(this.removeQueryAction);
- if (nSelectedQueries > 1) {
- this.executeSelectedQueryAction.setText(Messages.ExecuteQueryAction_executeQueries);
- this.removeQueryAction.setText(Messages.RemoveQueryAction_removeQueries);
- } else {
- this.executeSelectedQueryAction
- .setText(Messages.ExecuteQueryAction_executeSelectedQuery);
- this.removeQueryAction.setText(Messages.RemoveQueryAction_removeQuery);
- }
- }
-
- if (!getBrowser().isReadOnly()) {
- super.menuAboutToShow(menuManager);
- }
-
- updateActions(getSelection());
-
- menuManager.add(new Separator());
- menuManager.add(this.showPropertiesViewAction);
- menuManager.add(this.refreshViewerAction);
- menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
- }
-
- /**
- * De-populate and re-populate the menu based on the current selection.
- * Query for the children and siblings that can be added to the selected
- * object and update the menus accordingly.
- */
- private void updateMenu() {
- // Remove any menu items for old selection
- if (this.createChildMenuManager != null) {
- depopulateManager(this.createChildMenuManager, this.createChildActions);
- }
- // if (this.createSiblingMenuManager != null) {
- // depopulateManager(this.createSiblingMenuManager,
- // this.createSiblingActions);
- // }
-
- Collection<?> newChildDescriptors = null;
- // Collection<?> newSiblingDescriptors = null;
- ISelection selectionOnBrowser = null;
-
- if (this.fSelection instanceof IStructuredSelection
- && ((IStructuredSelection) this.fSelection).size() == 1) {
- if (this.fActiveEditor instanceof EcoreBrowser) {
- selectionOnBrowser = ((EcoreBrowser) this.fActiveEditor).getSelection();
- Object selectedObject = ((IStructuredSelection) this.fSelection).getFirstElement();
-
- EditingDomain domain = getBrowser().getEditingDomain();
- newChildDescriptors = domain.getNewChildDescriptors(selectedObject, null);
- // newSiblingDescriptors = domain.getNewChildDescriptors(null,
- // selectedObject);
-
- if (selectedObject instanceof LinkItem) {
- LinkItem linkItem = (LinkItem) selectedObject;
- selectionOnBrowser = new StructuredSelection(
- ((ModelElementItem) linkItem.getTreeParent()).getEObject());
- }
- }
- }
-
- // Generate actions for selection; populate and redraw the menus
- this.createChildActions = generateCreateChildActions(newChildDescriptors,
- selectionOnBrowser);
- // this.createSiblingActions =
- // generateCreateSiblingActions(newSiblingDescriptors,
- // selectionOnBrowser);
-
- if (this.createChildMenuManager != null) {
- populateManager(this.createChildMenuManager, this.createChildActions, null);
- this.createChildMenuManager.update(true);
- }
- // if (this.createSiblingMenuManager != null) {
- // populateManager(this.createSiblingMenuManager,
- // this.createSiblingActions, null);
- // this.createSiblingMenuManager.update(true);
- // }
- }
-
- private int selectionCount(final Class<?> clazz) {
- ISelection selection = getSelection();
- int count = 0;
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- Object element = iterator.next();
- if (clazz.isAssignableFrom(element.getClass())) {
- count++;
- }
- }
- }
- return count;
- }
-
- @Override
- public IEditorPart getActiveEditor() {
- return this.fActiveEditor;
- }
-
- @Override
- public void contributeToMenu(final IMenuManager menuManager) {
- super.contributeToMenu(menuManager);
-
- this.editorMenuManager = new MenuManager(Messages.UI_modiscoEditor_menu,
- BrowserActionBarContributor.EDIT_MENU_ID);
-
- menuManager.insertAfter("additions", this.editorMenuManager); //$NON-NLS-1$
-
- this.editorMenuManager.add(this.increaseFontSizeAction);
- this.editorMenuManager.add(this.decreaseFontSizeAction);
- this.editorMenuManager.add(this.restoreFontSizeAction);
- this.editorMenuManager.add(this.loadCustomizationsAction);
- this.editorMenuManager.add(this.loadFacetsAction);
- this.editorMenuManager.add(new Separator());
- this.editorMenuManager.add(this.showOnlyInstancesPanelAction);
- this.editorMenuManager.add(this.showOnlyTypesPanelAction);
- this.editorMenuManager.add(this.showBothPanelsAction);
- this.editorMenuManager.add(new Separator());
- this.editorMenuManager.add(this.showPropertiesViewAction);
- this.editorMenuManager.add(this.refreshViewerAction);
-
- this.editorMenuManager.add(new Separator("settings")); //$NON-NLS-1$
- this.editorMenuManager.add(new Separator("actions")); //$NON-NLS-1$
- this.editorMenuManager.add(new Separator("additions")); //$NON-NLS-1$
- this.editorMenuManager.add(new Separator("additions-end")); //$NON-NLS-1$
-
- // Prepare for CreateChild item addition or removal.
- this.createChildMenuManager = new MenuManager(Messages.UI_CreateChild_menu_item);
- this.createChildMenuManager.setRemoveAllWhenShown(true);
- this.createChildMenuManager.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(final IMenuManager manager) {
- // so that the "New Child" item is updated in the main menu
- updateMenu();
- }
- });
-
- this.editorMenuManager.insertBefore("additions", this.createChildMenuManager); //$NON-NLS-1$
-
- // Prepare for CreateSibling item addition or removal.
- // this.createSiblingMenuManager = new
- // MenuManager(Messages.UI_CreateSibling_menu_item);
- // submenuManager.insertBefore("additions", this.createSiblingMenuManager); //$NON-NLS-1$
-
- // Force an update because Eclipse hides empty menus now.
- this.editorMenuManager.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(final IMenuManager menuManag) {
- menuManag.updateAll(true);
- }
- });
-
- addGlobalActions(this.editorMenuManager);
- }
-
- /**
- * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction}
- * for each object in <code>descriptors</code>, and returns the collection
- * of these actions.
- */
- protected Collection<IAction> generateCreateChildActions(final Collection<?> descriptors,
- final ISelection selection) {
- Collection<IAction> actions = new ArrayList<IAction>();
- if (descriptors != null) {
- for (Object descriptor : descriptors) {
- actions.add(new CreateChildAction(this.fActiveEditor, selection, descriptor));
- }
- }
- return actions;
- }
-
- /**
- * This generates a
- * {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each
- * object in <code>descriptors</code>, and returns the collection of these
- * actions.
- */
- protected Collection<IAction> generateCreateSiblingActions(final Collection<?> descriptors,
- final ISelection selection) {
- Collection<IAction> actions = new ArrayList<IAction>();
- if (descriptors != null) {
- for (Object descriptor : descriptors) {
- actions.add(new CreateSiblingAction(this.fActiveEditor, selection, descriptor));
- }
- }
- return actions;
- }
-
- /**
- * This populates the specified <code>manager</code> with
- * {@link org.eclipse.jface.action.ActionContributionItem}s based on the
- * {@link org.eclipse.jface.action.IAction}s contained in the
- * <code>actions</code> collection, by inserting them before the specified
- * contribution item <code>contributionID</code>. If
- * <code>contributionID</code> is <code>null</code>, they are simply added.
- */
- protected void populateManager(final IContributionManager manager,
- final Collection<? extends IAction> actions, final String contributionID) {
- if (actions != null) {
- for (IAction action : actions) {
- if (contributionID != null) {
- manager.insertBefore(contributionID, action);
- } else {
- manager.add(action);
- }
- }
- }
- // manager.add(this.loadMetamodelAction);
- }
-
- /**
- * This removes from the specified <code>manager</code> all
- * {@link org.eclipse.jface.action.ActionContributionItem}s based on the
- * {@link org.eclipse.jface.action.IAction}s contained in the
- * <code>actions</code> collection.
- */
- protected void depopulateManager(final IContributionManager manager,
- final Collection<? extends IAction> actions) {
- if (actions != null) {
- IContributionItem[] items = manager.getItems();
- for (IContributionItem contributionItem : items) {
- // Look into SubContributionItems
- while (contributionItem instanceof SubContributionItem) {
- contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
- }
-
- // Delete the ActionContributionItems with matching action.
- if (contributionItem instanceof ActionContributionItem) {
- IAction action = ((ActionContributionItem) contributionItem).getAction();
- if (actions.contains(action)) {
- manager.remove(contributionItem);
- }
- }
- }
- }
- }
-
- @Override
- protected boolean removeAllReferencesOnDelete() {
- return true;
- }
-
- /**
- * Overridden to deny deleting elements from the EPackage registry
- * (metamodels), and ask the user whether to delete an element from the
- * whole model or only remove it from under a reference
- */
- @Override
- protected DeleteAction createDeleteAction() {
- return new DeleteAction(removeAllReferencesOnDelete()) {
- @Override
- public Command createCommand(final Collection<?> selection) {
- if (allowEditing(selection)) {
- ISelection originalSelection = null;
- EcoreBrowser browser = getBrowser();
- if (browser != null) {
- originalSelection = browser.getEditorSelection();
- }
- LinkItem parentLinkItem = null;
- if (originalSelection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) originalSelection;
- Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- Object selected = iterator.next();
- if (selected instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) selected;
- ITreeElement treeParent = modelElementItem.getTreeParent();
- if (treeParent instanceof LinkItem) {
- LinkItem linkItem = (LinkItem) treeParent;
- if (parentLinkItem == null) {
- parentLinkItem = linkItem;
- } else if (parentLinkItem != linkItem) {
- parentLinkItem = null;
- break;
- }
- } else {
- parentLinkItem = null;
- break;
- }
- } else {
- parentLinkItem = null;
- break;
- }
- }
- }
-
- if (parentLinkItem != null) {
- EReference reference = parentLinkItem.getReference();
- if (!reference.isContainer() && !reference.isContainment()
- && !reference.isDerived()) {
- return removeOrDeleteCommand(this.domain, selection,
- parentLinkItem.getParent(), reference);
- }
- }
-
- return super.createCommand(selection);
- }
- // editing not allowed
- return UnexecutableCommand.INSTANCE;
- }
- };
- }
-
- protected Command removeOrDeleteCommand(final EditingDomain domain,
- final Collection<?> selection, final EObject owner, final EReference reference) {
- final Command deleteCommand = DeleteCommand.create(domain, selection);
- final Command removeCommand;
- if (reference.isMany()) {
- removeCommand = RemoveCommand.create(domain, owner, reference, selection);
- } else {
- removeCommand = SetCommand.create(domain, owner, reference, null);
- }
- AbstractCommand askUserCommand = new AbstractCommand() {
- private static final int DELETE_FROM_MODEL = 0;
- private static final int REMOVE_FROM_LINK = 1;
- private static final int NO_OPERATION = 2;
- private int operation = -1;
-
- private void performCommand() {
- if (this.operation == DELETE_FROM_MODEL) {
- if (deleteCommand.canExecute()) {
- deleteCommand.execute();
- }
- } else if (this.operation == REMOVE_FROM_LINK) {
- if (removeCommand.canExecute()) {
- removeCommand.execute();
- }
- }
- }
-
- public void redo() {
- if (this.operation == DELETE_FROM_MODEL) {
- deleteCommand.redo();
- } else if (this.operation == REMOVE_FROM_LINK) {
- removeCommand.redo();
- }
- }
-
- @Override
- public boolean canExecute() {
- return deleteCommand.canExecute() || removeCommand.canExecute();
- }
-
- public void execute() {
- if (this.operation == -1) {
- if (deleteCommand.canExecute() && removeCommand.canExecute()) {
- MessageDialog dialog = new MessageDialog(null,
- Messages.BrowserActionBarContributor_deleteOrRemove, null,
- Messages.BrowserActionBarContributor_deleteOrRemove2,
- MessageDialog.QUESTION, new String[] {
- Messages.BrowserActionBarContributor_delete,
- Messages.BrowserActionBarContributor_remove }, 1) {
- {
- // style hint for MacOSX
- setShellStyle(getShellStyle() | SWT.SHEET);
- }
- };
- this.operation = dialog.open();
- } else if (deleteCommand.canExecute()) {
- if (MessageDialog.openQuestion(null,
- Messages.BrowserActionBarContributor_deleteElement,
- Messages.BrowserActionBarContributor_deleteButNotUnlink)) {
- this.operation = DELETE_FROM_MODEL;
- } else {
- this.operation = NO_OPERATION;
- }
- } else if (removeCommand.canExecute()) {
- if (MessageDialog.openQuestion(null,
- Messages.BrowserActionBarContributor_removeElement,
- Messages.BrowserActionBarContributor_removeButNotDelete)) {
- this.operation = REMOVE_FROM_LINK;
- } else {
- this.operation = NO_OPERATION;
- }
- }
- }
- performCommand();
- }
-
- @Override
- public boolean canUndo() {
- if (this.operation == DELETE_FROM_MODEL) {
- return deleteCommand.canUndo();
- } else if (this.operation == REMOVE_FROM_LINK) {
- return removeCommand.canUndo();
- }
- return true;
- }
-
- @Override
- public void undo() {
- if (this.operation == DELETE_FROM_MODEL) {
- deleteCommand.undo();
- } else if (this.operation == REMOVE_FROM_LINK) {
- removeCommand.undo();
- }
- }
- };
- return askUserCommand;
- }
-
- /**
- * Overridden to deny deleting elements from the EPackage registry
- * (metamodels)
- */
- @Override
- protected CutAction createCutAction() {
- return new CutAction() {
- @Override
- public Command createCommand(final Collection<?> selection) {
- if (allowEditing(selection)) {
- return super.createCommand(selection);
- }
- return UnexecutableCommand.INSTANCE;
- }
- };
- }
-
- /**
- * Returns false to avoid changing elements from the EPackage registry (i.e.
- * metamodels)
- *
- * @see Bug 319015 - [Model Browser] Null Pointer after deleting a field in
- * a model
- * @see Bug 319016 - [Model Browser] ClassCastException while saving a model
- */
- private static boolean allowEditing(final Collection<?> selection) {
- for (Object selected : selection) {
- if (selected instanceof EObject) {
- EObject eObject = (EObject) selected;
- Resource eResource = eObject.eResource();
- if (eResource != null) {
- URI uri = eResource.getURI();
- if (uri != null
- && EPackage.Registry.INSTANCE.getEPackage(uri.toString()) != null) {
- return false;
- }
- }
- }
- }
- return true;
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserConfiguration.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserConfiguration.java
deleted file mode 100644
index 0cd8420ba..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserConfiguration.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.Collections;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclasses;
-import org.eclipse.gmt.modisco.infra.browser.core.ItemsFactoryEx;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQueriesManager;
-import org.eclipse.gmt.modisco.infra.browser.uicore.ChangeListener;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration;
-import org.eclipse.swt.widgets.Display;
-
-/** The configuration of a model editor, with access to the underlying data */
-public class BrowserConfiguration {
-
- public static final int NOT_YET_ASKED = -2;
-
- private ResourceSet resourceSet;
- /** All the model elements by metaclass */
- private InstancesForMetaclasses instancesForMetaclasses;
- private EcoreBrowser editor;
-
- private SelectedQueriesManager selectedQueriesManager;
-
- /**
- * The depth of referenced resources the user wants to load (
- * <code>-1</code> means infinite, and <code>-2</code> means not yet asked)
- */
- private int referencedResourcesLoadingDepth = BrowserConfiguration.NOT_YET_ASKED;
-
- private final AppearanceConfiguration appearanceConfiguration;
-
- public BrowserConfiguration(final EcoreBrowser editor) {
- this();
- this.editor = editor;
- }
-
- public BrowserConfiguration() {
- ItemsFactoryEx itemsFactory = new ItemsFactoryEx(this);
- this.appearanceConfiguration = new AppearanceConfiguration(itemsFactory);
- }
-
- public EcoreBrowser getEditor() {
- return this.editor;
- }
-
- public AppearanceConfiguration getAppearanceConfiguration() {
- return this.appearanceConfiguration;
- }
-
- public void setResourceSet(final ResourceSet resourceSet) {
- this.resourceSet = resourceSet;
- }
-
- public ResourceSet getResourceSet() {
- return this.resourceSet;
- }
-
- public void setInstancesForMetaclasses(final InstancesForMetaclasses instancesForMetaclasses) {
- this.instancesForMetaclasses = instancesForMetaclasses;
- }
-
- public InstancesForMetaclasses getInstancesForMetaclasses() {
- return this.instancesForMetaclasses;
- }
-
- /** Clear the editor field */
- public void dispose() {
- this.editor = null;
- }
-
- /** @return the metamodel name or <code>null</code> if not found */
- public String getMetamodelName() {
- final String nsURI = getMetamodelURI();
- if (nsURI != null) {
- final String[] parts = nsURI.split("/"); //$NON-NLS-1$
- if (parts.length > 0) {
- return parts[parts.length - 1];
- }
- }
- return null;
- }
-
- /**
- * @return the NsURI of the metamodel corresponding to an element in the
- * first resource or <code>null</code> if not found
- */
- public String getMetamodelURI() {
- final EList<Resource> resources = this.resourceSet.getResources();
- if (resources.size() > 0) {
- final Resource firstResource = resources.get(0);
- final EList<EObject> contents = firstResource.getContents();
- if (contents.size() > 0) {
- final EObject firstElement = contents.get(0);
- final EClass eClass = firstElement.eClass();
- if (eClass != null) {
- final EPackage ePackage = eClass.getEPackage();
- if (ePackage != null) {
- return ePackage.getNsURI();
- }
- }
- }
- }
-
- return null;
- }
-
- private Set<Resource> browsedResources;
-
- public void setSelectedQueriesManager(final SelectedQueriesManager selectedQueriesManager) {
- this.selectedQueriesManager = selectedQueriesManager;
- getAppearanceConfiguration().touch();
- this.selectedQueriesManager.addChangeListener(new ChangeListener() {
- public void changed() {
- getAppearanceConfiguration().touch();
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- BrowserConfiguration.this.editor.refreshDelayed(false);
- }
- });
-
- }
- });
- }
-
- public SelectedQueriesManager getSelectedQueriesManager() {
- return this.selectedQueriesManager;
- }
-
- /**
- * Set the list of resources browsed in the editor, so that the list of
- * metaclasses can be computed once and for all.
- */
- public void setBrowsedResources(final Set<Resource> browsedResources) {
- this.browsedResources = browsedResources;
- getAppearanceConfiguration().touch();
- }
-
- public Set<Resource> getBrowsedResources() {
- if (this.browsedResources != null) {
- return Collections.unmodifiableSet(this.browsedResources);
- }
- return null;
- }
-
- public void addBrowsedResource(final Resource resource) {
- this.browsedResources.add(resource);
- getAppearanceConfiguration().touch();
- }
-
- public void removeBrowsedResource(final Resource resource) {
- this.browsedResources.remove(resource);
- getAppearanceConfiguration().touch();
- }
-
- public void setReferencedResourcesLoadingDepth(final int referencedResourcesLoadingDepth) {
- this.referencedResourcesLoadingDepth = referencedResourcesLoadingDepth;
- getAppearanceConfiguration().touch();
- }
-
- /**
- * The depth of referenced resources the user wants to load (
- * <code>-1</code> means infinite, and <code>-2</code> means not yet asked)
- */
- public int getReferencedResourcesLoadingDepth() {
- return this.referencedResourcesLoadingDepth;
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserContentProvider.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserContentProvider.java
deleted file mode 100644
index 9d5f9f3cb..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserContentProvider.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Bros (Mia-Software) - Bug 341463 - [Model browser] stays on "loading..." indefinitely
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.gmt.modisco.infra.browser.core.MetaclassList;
-import org.eclipse.gmt.modisco.infra.browser.core.SearchResults;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-
-public class BrowserContentProvider implements ITreeContentProvider {
-
- private final EcoreBrowser browser;
- private final ElementsComputation elementsComputation;
- private final ChildrenComputation childrenComputation;
- private final HasChildrenComputation hasChildrenComputation;
-
- public BrowserContentProvider(final EcoreBrowser browser) {
- this.browser = browser;
- this.childrenComputation = new ChildrenComputation();
- this.hasChildrenComputation = new HasChildrenComputation();
- this.elementsComputation = new ElementsComputation();
- }
-
- public IWorkbenchSiteProgressService getProgressService() {
- return this.browser.getProgressService();
- }
-
- protected void refreshBrowser() {
- this.browser.refreshDelayed(false);
- }
-
- protected class ElementsComputation extends NonBlockingElementComputation<Object[]> {
- public ElementsComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Object[] basicCompute(final Object inputElement) {
- if (inputElement instanceof MetaclassList) {
- final MetaclassList metaclassList = (MetaclassList) inputElement;
- return metaclassList.getElements().toArray();
- } else if (inputElement instanceof SearchResults) {
- final SearchResults searchResults = (SearchResults) inputElement;
- return searchResults.getElements().toArray();
- } else if (inputElement == EcoreBrowser.LOADING_MESSAGE) {
- return new Object[] { EcoreBrowser.LOADING_MESSAGE };
- }
- return null;
- }
-
- @Override
- protected Object[] getTemporaryDefaultValue() {
- return new Object[] { EcoreBrowser.LOADING_MESSAGE };
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class ChildrenComputation extends NonBlockingElementComputation<Object[]> {
- public ChildrenComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Object[] basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getChildren().toArray();
- }
- return new Object[0];
- }
-
- @Override
- protected Object[] getTemporaryDefaultValue() {
- return new Object[] { EcoreBrowser.LOADING_MESSAGE };
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class HasChildrenComputation extends NonBlockingElementComputation<Boolean> {
- public HasChildrenComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Boolean basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) element;
- return treeElement.hasChildren();
- }
- return Boolean.FALSE;
- }
-
- @Override
- protected Boolean getTemporaryDefaultValue() {
- return Boolean.FALSE;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- public Object[] getElements(final Object inputElement) {
- return this.elementsComputation.computeValue(inputElement);
- }
-
- public Object[] getChildren(final Object parentElement) {
- return this.childrenComputation.computeValue(parentElement);
- }
-
- public Object getParent(final Object element) {
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getTreeParent();
- }
- return null;
- }
-
- public boolean hasChildren(final Object element) {
- return this.hasChildrenComputation.computeValue(element);
- }
-
- public void dispose() {
- // nothing
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
- // nothing
- }
-
- public boolean isComputing() {
- return this.childrenComputation.isComputing() || this.hasChildrenComputation.isComputing();
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserEditingDomain.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserEditingDomain.java
deleted file mode 100644
index 12e4318b7..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserEditingDomain.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Gregoire Dupe (Mia-Software) - Bug 404263 - EditingDomainProvider does not work when using IResourceEditorInput
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.command.CommandStackListener;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.edit.command.CommandParameter;
-import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ITreeSelection;
-
-/**
- * This editing domain associates each command with the editor selection at the
- * time it was issued. This is useful because the command only deals with
- * EObjects, whereas the editor selection contains {@link ModelElementItem}s,
- * which we need when we want to select the elements affected by a command.
- */
-public class BrowserEditingDomain extends AdapterFactoryEditingDomain implements
- CommandStackListener {
-
- private final EcoreBrowser ecoreBrowser;
-
- private final Map<Command, Object> commandSelections = new HashMap<Command, Object>();
-
- public BrowserEditingDomain(final ComposedAdapterFactory adapterFactoryWithRegistry,
- final CommandStack commandStack, final HashMap<Resource, Boolean> hashMap,
- final EcoreBrowser ecoreBrowser) {
- super(adapterFactoryWithRegistry, commandStack, hashMap);
- commandStack.addCommandStackListener(this);
- this.ecoreBrowser = ecoreBrowser;
- }
-
- public BrowserEditingDomain(final ComposedAdapterFactory adapterFactoryWithRegistry,
- final CommandStack commandStack, final ResourceSet resourceSet,
- final EcoreBrowser ecoreBrowser) {
- super(adapterFactoryWithRegistry, commandStack, resourceSet);
- commandStack.addCommandStackListener(this);
- this.ecoreBrowser = ecoreBrowser;
- }
-
- @Override
- public Command createCommand(final Class<? extends Command> commandClass,
- final CommandParameter commandParameter) {
- Command command = super.createCommand(commandClass, commandParameter);
- ISelection editorSelection = this.ecoreBrowser.getEditorSelection();
- if (editorSelection instanceof ITreeSelection) {
- ITreeSelection treeSelection = (ITreeSelection) editorSelection;
- this.commandSelections.put(command, treeSelection.getFirstElement());
- }
- return command;
- }
-
- public Object getEditorSelectionForCommand(final Command command) {
- return this.commandSelections.get(command);
- }
-
- public void commandStackChanged(final EventObject event) {
- // when the command stack is flushed, clear the selections map
- CommandStack theCommandStack = getCommandStack();
- if (theCommandStack.getMostRecentCommand() == null) {
- this.commandSelections.clear();
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserLabelProvider.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserLabelProvider.java
deleted file mode 100644
index 1d9d18eff..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserLabelProvider.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Bros (Mia-Software) - Bug 341463 - [Model browser] stays on "loading..." indefinitely
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.IFontProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-
-public class BrowserLabelProvider extends LabelProvider implements IColorProvider, IFontProvider {
-
- private final EcoreBrowser browser;
-
- private final TextComputation textComputation;
- private final ImageComputation imageComputation;
- private final ForegroundColorComputation foregroundColorComputation;
- private final BackgroundColorComputation backgroundColorComputation;
- private final FontComputation fontComputation;
-
- public BrowserLabelProvider(final EcoreBrowser browser) {
- this.browser = browser;
- this.textComputation = new TextComputation();
- this.imageComputation = new ImageComputation();
- this.foregroundColorComputation = new ForegroundColorComputation();
- this.backgroundColorComputation = new BackgroundColorComputation();
- this.fontComputation = new FontComputation();
- }
-
- public IWorkbenchSiteProgressService getProgressService() {
- return this.browser.getProgressService();
- }
-
- protected void refreshBrowser() {
- this.browser.refreshDelayed(false);
- }
-
- protected class TextComputation extends NonBlockingElementComputation<String> {
- public TextComputation() {
- super(getProgressService());
- }
-
- @Override
- protected String basicCompute(final Object element) {
- // to leave room for icon overlays
- final String prefix;
- if (element instanceof ModelElementItem) {
- prefix = " "; //$NON-NLS-1$
- } else {
- prefix = ""; //$NON-NLS-1$
- }
-
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return prefix + treeElement.getText();
- }
-
- if (element == EcoreBrowser.LOADING_MESSAGE) {
- return EcoreBrowser.LOADING_MESSAGE;
- }
-
- // for multiplicity-many attributes
- return prefix + element.toString();
- }
-
- @Override
- protected String getTemporaryDefaultValue() {
- return EcoreBrowser.LOADING_MESSAGE;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class ImageComputation extends NonBlockingElementComputation<Image> {
- public ImageComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Image basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getImage();
- }
- return null;
- }
-
- @Override
- protected Image getTemporaryDefaultValue() {
- return null;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class ForegroundColorComputation extends NonBlockingElementComputation<Color> {
- public ForegroundColorComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Color basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getForeground();
- }
- return null;
- }
-
- @Override
- protected Color getTemporaryDefaultValue() {
- return null;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class BackgroundColorComputation extends NonBlockingElementComputation<Color> {
- public BackgroundColorComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Color basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getBackground();
- }
- return null;
- }
-
- @Override
- protected Color getTemporaryDefaultValue() {
- return null;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- protected class FontComputation extends NonBlockingElementComputation<Font> {
- public FontComputation() {
- super(getProgressService());
- }
-
- @Override
- protected Font basicCompute(final Object element) {
- if (element instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) element;
- return treeElement.getFont();
- }
- return null;
- }
-
- @Override
- protected Font getTemporaryDefaultValue() {
- return null;
- }
-
- @Override
- protected void computationFinished() {
- refreshBrowser();
- }
- }
-
- @Override
- public String getText(final Object element) {
- return this.textComputation.computeValue(element);
- }
-
- @Override
- public Image getImage(final Object element) {
- return this.imageComputation.computeValue(element);
- }
-
- public Color getForeground(final Object element) {
- return this.foregroundColorComputation.computeValue(element);
- }
-
- public Color getBackground(final Object element) {
- return this.backgroundColorComputation.computeValue(element);
- }
-
- public Font getFont(final Object element) {
- return this.fontComputation.computeValue(element);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserNavigationLocation.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserNavigationLocation.java
deleted file mode 100644
index da48cbb2f..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserNavigationLocation.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.jface.viewers.ITreeSelection;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IMemento;
-import org.eclipse.ui.INavigationLocation;
-import org.eclipse.ui.NavigationLocation;
-
-/**
- * A location in the Ecore editor, used for history navigation (back-forward
- * buttons)
- */
-public class BrowserNavigationLocation extends NavigationLocation {
-
- /** The title of the editor */
- private final String title;
- /** The metaclass selected in the metaclass viewer */
- private EClass selectedMetaclass;
- /** The selection in the tree viewer */
- private ITreeSelection treeSelection;
-
- /** Create an empty navigation location */
- public BrowserNavigationLocation(final IEditorPart editorPart) {
- super(editorPart);
- this.title = editorPart.getTitle();
- this.selectedMetaclass = null;
- this.treeSelection = null;
- }
-
- /**
- * Create a navigation location with the selected metaclass and selected
- * element(s).
- *
- * @param editorPart
- * the editor
- * @param selectedMetaclass
- * the metaclass selected in the metaclass viewer
- * @param treeSelection
- * the selection in the tree viewer
- */
- public BrowserNavigationLocation(final IEditorPart editorPart, final EClass selectedMetaclass,
- final ITreeSelection treeSelection) {
- super(editorPart);
- this.title = editorPart.getTitle();
- this.selectedMetaclass = selectedMetaclass;
- this.treeSelection = treeSelection;
- }
-
- @Override
- public String getText() {
- String name = null;
- if (this.selectedMetaclass != null) {
- name = this.selectedMetaclass.getName();
- }
- if (name == null) {
- name = ""; //$NON-NLS-1$
- }
- // cf Bug 329044 - [model browser] instance labels in "editor history"
- String strSelection;
- if (this.treeSelection != null) {
- int nSelected = this.treeSelection.size();
- if (nSelected == 0) {
- strSelection = Messages.BrowserNavigationLocation_emptySelection;
- } else if (nSelected == 1) {
- Object firstElement = this.treeSelection.getFirstElement();
- if (firstElement instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) firstElement;
- strSelection = NLS.bind(Messages.BrowserNavigationLocation_singleSelection,
- modelElementItem.getName());
- } else {
- strSelection = NLS.bind(
- Messages.BrowserNavigationLocation_singleSelectionUnknownClass,
- firstElement.getClass().getSimpleName());
- }
- } else {
- strSelection = NLS.bind(Messages.BrowserNavigationLocation_multiSelection,
- nSelected);
- }
- } else {
- strSelection = ""; //$NON-NLS-1$
- }
- return this.title + " - " + name + strSelection; //$NON-NLS-1$
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.INavigationLocation#mergeInto(org.eclipse.ui.
- * INavigationLocation)
- */
- public boolean mergeInto(final INavigationLocation currentLocation) {
- if (currentLocation == null) {
- return false;
- }
-
- if (currentLocation instanceof BrowserNavigationLocation) {
- final BrowserNavigationLocation location = (BrowserNavigationLocation) currentLocation;
-
- if (!this.title.equals(location.title)) {
- return false;
- }
-
- if (this.selectedMetaclass == location.selectedMetaclass) {
- location.treeSelection = this.treeSelection;
- return true;
- }
- // merge with empty location
- if (location.selectedMetaclass == null) {
- location.selectedMetaclass = this.selectedMetaclass;
- location.treeSelection = this.treeSelection;
- return true;
- }
- }
-
- return false;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.INavigationLocation#restoreLocation()
- */
- public void restoreLocation() {
- // empty location
- if (this.selectedMetaclass == null) {
- return;
- }
-
- final IEditorPart editorPart = getEditorPart();
- if (editorPart instanceof EcoreBrowser) {
- final EcoreBrowser editor = (EcoreBrowser) editorPart;
- editor.restoreLocation(this.selectedMetaclass, this.treeSelection);
- }
- }
-
- public void restoreState(final IMemento memento) {
- // nothing
- }
-
- public void saveState(final IMemento memento) {
- // nothing
- }
-
- public void update() {
- // nothing
- }
-
- @Override
- public void releaseState() {
- super.releaseState();
- // do not hang on to selection: permit GC to free model
- this.treeSelection = null;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserSettingsPersistence.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserSettingsPersistence.java
deleted file mode 100644
index 3874e8c67..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserSettingsPersistence.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.custom.MetamodelView;
-import org.eclipse.gmt.modisco.infra.browser.custom.core.CustomizationsCatalog;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.FacetSet;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetSetCatalog;
-import org.eclipse.jface.dialogs.DialogSettings;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.IWorkbenchPart;
-
-/**
- * Handles saving and restoring browser settings. Settings are saved when the
- * corresponding Eclipse editor is closed.
- */
-public class BrowserSettingsPersistence implements IPartListener {
- private static final String MODISCO_BROWSER_SETTINGS = "MoDiscoModelBrowserSettings"; //$NON-NLS-1$
- private static final String LAST_APPLIED_FACETS_SETTINGS = "LastAppliedFacets"; //$NON-NLS-1$
- private static final String LAST_APPLIED_CUSTOMIZATIONS_SETTINGS = "LastAppliedCustomizations"; //$NON-NLS-1$
- private final String metamodelURI;
- private final IWorkbenchPart fPart;
- private final BrowserConfiguration browserConfiguration;
-
- /**
- * @param metamodelURI
- * the metamodel for which settings will be saved
- * @param part
- * when this part is closed, the settings will be saved to disk
- * @param browserConfiguration
- * the browser configuration that will be saved when the part is
- * closed
- */
- public BrowserSettingsPersistence(final String metamodelURI, final IWorkbenchPart part,
- final BrowserConfiguration browserConfiguration) {
- this.metamodelURI = metamodelURI;
- this.fPart = part;
- this.browserConfiguration = browserConfiguration;
-
- // register close listener to save user settings when editor is closed
- part.getSite().getPage().addPartListener(this);
- }
-
- /**
- * @return the dialog settings section for the current metamodel
- */
- public IDialogSettings loadLastSettingsForCurrentMetamodel() {
- try {
- String filename = getSettingsFilename();
- DialogSettings settings = new DialogSettings(
- BrowserSettingsPersistence.MODISCO_BROWSER_SETTINGS);
- if (new File(filename).isFile()) {
- settings.load(filename);
- if (this.metamodelURI != null) {
- return settings.getSection(this.metamodelURI);
- }
- }
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- return null;
- }
-
- /**
- * Get the {@link Facet}s that were previously applied on a model instance
- * of the same metamodel
- */
- public List<Facet> getLastFacets(final IDialogSettings settingsForCurrentMetamodel) {
- if (settingsForCurrentMetamodel == null) {
- return Collections.emptyList();
- }
- String[] lastFacetNames = settingsForCurrentMetamodel
- .getArray(BrowserSettingsPersistence.LAST_APPLIED_FACETS_SETTINGS);
- if (lastFacetNames == null) {
- return Collections.emptyList();
- }
- List<Facet> facetsToLoad = new ArrayList<Facet>();
- final Collection<FacetSet> facetSets = FacetSetCatalog.getSingleton().getAllFacetSets();
- for (FacetSet facetSet : facetSets) {
- EList<Facet> facets = facetSet.getFacets();
- for (Facet facet : facets) {
- String name = facetSet.getName() + "#" + facet.getName(); //$NON-NLS-1$
- for (String lastFacetName : lastFacetNames) {
- if (name.equals(lastFacetName)) {
- facetsToLoad.add(facet);
- break;
- }
- }
- }
- }
- return facetsToLoad;
- }
-
- /**
- * Save the currently applied {@link Facet}s
- *
- * @param sectionForCurrentMetamodel
- */
- private void saveLastFacetNames(final IDialogSettings sectionForCurrentMetamodel) {
- Collection<Facet> appliedFacets = this.browserConfiguration.getAppearanceConfiguration().getFacetContext().getAppliedFacets();
- String[] facetNames = new String[appliedFacets.size()];
- Iterator<Facet> facetsIterator = appliedFacets.iterator();
- for (int i = 0; i < appliedFacets.size(); i++) {
- Facet facet = facetsIterator.next();
- FacetSet facetSet = facet.getFacetSet();
- facetNames[i] = facetSet.getName() + "#" + facet.getName(); //$NON-NLS-1$
- }
-
- sectionForCurrentMetamodel.put(BrowserSettingsPersistence.LAST_APPLIED_FACETS_SETTINGS,
- facetNames);
- }
-
- /**
- * Get the customizations that were previously applied on a model instance
- * of the same metamodel
- */
- public List<MetamodelView> getLastCustomizations(
- final IDialogSettings settingsForCurrentMetamodel) {
- if (settingsForCurrentMetamodel == null) {
- return Collections.emptyList();
- }
- String[] lastCustomizationNames = settingsForCurrentMetamodel
- .getArray(BrowserSettingsPersistence.LAST_APPLIED_CUSTOMIZATIONS_SETTINGS);
- if (lastCustomizationNames == null) {
- return Collections.emptyList();
- }
- List<MetamodelView> customizationsToLoad = new ArrayList<MetamodelView>();
- Collection<MetamodelView> allCustomizations = CustomizationsCatalog.getInstance()
- .getAllCustomizations();
- for (MetamodelView metamodelView : allCustomizations) {
- String name = metamodelView.getName();
- if (name != null) {
- for (String lastCustomizationName : lastCustomizationNames) {
- if (name.equals(lastCustomizationName)) {
- customizationsToLoad.add(metamodelView);
- break;
- }
- }
- }
- }
- return customizationsToLoad;
- }
-
- /** Save the currently applied customizations */
- private void saveLastCustomizationNames(final IDialogSettings sectionForCurrentMetamodel) {
- List<MetamodelView> customizations = this.browserConfiguration.getAppearanceConfiguration().getCustomizationEngine()
- .getRegisteredCustomizations();
- String[] customizationNames = new String[customizations.size()];
- for (int i = 0; i < customizations.size(); i++) {
- customizationNames[i] = customizations.get(i).getName();
- }
-
- sectionForCurrentMetamodel
- .put(BrowserSettingsPersistence.LAST_APPLIED_CUSTOMIZATIONS_SETTINGS,
- customizationNames);
- }
-
- private String getSettingsFilename() {
- IPath stateLocation = MoDiscoBrowserPlugin.getPlugin().getStateLocation();
- String filename = stateLocation.append(BrowserSettingsPersistence.MODISCO_BROWSER_SETTINGS)
- .toOSString();
- return filename;
- }
-
- public void partClosed(final IWorkbenchPart part) {
- if (part == this.fPart) {
- this.browserConfiguration.getAppearanceConfiguration().save();
-
- try {
- if (this.metamodelURI != null) {
- String filename = getSettingsFilename();
- DialogSettings settings = new DialogSettings(
- BrowserSettingsPersistence.MODISCO_BROWSER_SETTINGS);
-
- if (new File(filename).isFile()) {
- try {
- settings.load(filename);
- } catch (IOException e) {
- MoDiscoLogger.logWarning(e,
- "previous browser settings couldn't be loaded", //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
-
- IDialogSettings section = settings.getSection(this.metamodelURI);
- if (section == null) {
- section = settings.addNewSection(this.metamodelURI);
- }
-
- saveLastFacetNames(section);
- saveLastCustomizationNames(section);
-
- settings.save(filename);
- } else {
- MoDiscoLogger.logError("couldn't find metamodel URI; " //$NON-NLS-1$
- + "skipped saving settings", MoDiscoBrowserPlugin.getPlugin()); //$NON-NLS-1$
- }
-
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- }
-
- this.fPart.getSite().getPage().removePartListener(this);
- }
- }
-
- public void partActivated(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partDeactivated(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partOpened(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partBroughtToTop(final IWorkbenchPart part) {
- // nothing
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserUtils.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserUtils.java
deleted file mode 100644
index c0b00e71d..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/BrowserUtils.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.emf.common.ui.URIEditorInput;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.ContentHandler;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.URIConverter;
-import org.eclipse.emf.ecore.resource.URIHandler;
-import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.resource.impl.URIHandlerImpl;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.uicore.UnwrappingSelectionProvider;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.AttributeItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.editorInputs.ResourceEditorInput;
-import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ITreeSelection;
-import org.eclipse.jface.window.Window;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.part.FileEditorInput;
-
-public final class BrowserUtils {
-
- private BrowserUtils() {
- // make this class non-instantiable
- }
-
- /** Create a URI converter that avoids opening HTTP connections. */
- public static URIConverter createURIConverter() {
- final List<URIHandler> defaultHandlers = URIHandler.DEFAULT_HANDLERS;
- final List<URIHandler> uriHandlers = new ArrayList<URIHandler>();
- for (URIHandler uriHandler : defaultHandlers) {
- if (uriHandler.getClass() != URIHandlerImpl.class) {
- uriHandlers.add(uriHandler);
- }
- }
- uriHandlers.add(new URIHandlerImpl() {
- @Override
- public Map<String, ?> getAttributes(final URI uri, final Map<?, ?> options) {
- // overloaded to avoid opening an HTTP connection
- return new HashMap<String, Object>();
- }
- });
- return new ExtensibleURIConverterImpl(uriHandlers,
- ContentHandler.Registry.INSTANCE.contentHandlers());
- }
-
- public static int askUserForDepthToLoadReferencedResources(final int initialValue,
- final Shell shell) {
- final IInputValidator validator = new IInputValidator() {
- public String isValid(final String inputText) {
- if ("*".equals(inputText)) { //$NON-NLS-1$
- return null;
- }
- try {
- Integer.parseInt(inputText);
- } catch (NumberFormatException e) {
- return NLS.bind(Messages.EcoreBrowser_notAPositiveInteger, inputText);
- }
- return null;
- }
- };
- final String initialValueStr;
- if (initialValue == -1) {
- initialValueStr = "*"; //$NON-NLS-1$
- } else {
- initialValueStr = Integer.toString(initialValue);
- }
-
- final int[] result = new int[1];
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- final InputDialog inputDialog = new InputDialog(shell,
- Messages.EcoreBrowser_selectDepthReferencedResources,
- Messages.EcoreBrowser_modelContainsProxies
- + Messages.EcoreBrowser_chooseLoadProxiesDepth, initialValueStr,
- validator);
-
- if (inputDialog.open() == Window.OK) {
- String value = inputDialog.getValue();
- if (value == null) {
- result[0] = 0;
- } else if ("*".equals(value)) { //$NON-NLS-1$
- result[0] = -1;
- } else {
- try {
- result[0] = Integer.parseInt(value);
- } catch (NumberFormatException e) {
- MoDiscoBrowserPlugin.logException(e);
- result[0] = 0;
- }
- }
- }
- }
- });
-
- return result[0];
- }
-
- /** Copy the text of the selected element to clipboard */
- public static void handleCopyToClipboard(final ISelection selection) {
- if (selection instanceof ITreeSelection) {
- final ITreeSelection treeSelection = (ITreeSelection) selection;
- StringBuilder builder = new StringBuilder();
- Iterator<?> iterator = treeSelection.iterator();
- while (iterator.hasNext()) {
- if (builder.length() > 0) {
- builder.append("\n"); //$NON-NLS-1$
- }
- Object selectedElement = iterator.next();
- if (selectedElement instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) selectedElement;
- builder.append(modelElementItem.getName());
- } else if (selectedElement instanceof AttributeItem) {
- AttributeItem attributeItem = (AttributeItem) selectedElement;
- String valueText = attributeItem.getValueText();
- builder.append(valueText);
- } else if (selectedElement instanceof LinkItem) {
- LinkItem linkItem = (LinkItem) selectedElement;
- builder.append(linkItem.getReference().getName());
- } else if (selectedElement instanceof ITreeElement) {
- ITreeElement treeElement = (ITreeElement) selectedElement;
- builder.append(treeElement.getText());
- } else {
- builder.append(selectedElement.toString());
- }
- }
- Clipboard clipboard = new Clipboard(Display.getDefault());
- clipboard.setContents(new Object[] { builder.toString() },
- new Transfer[] { TextTransfer.getInstance() });
- clipboard.dispose();
- }
- }
-
- /**
- * Replace proxy objects by their underlying Ecore objects in the given
- * selection
- *
- * @return the unwrapped version of the selection
- */
- public static ISelection unwrapSelection(final ISelection selection) {
- return UnwrappingSelectionProvider.unwrapSelection(selection);
- }
-
- /**
- * Open the given EObject in the MoDisco model browser.
- *
- * @param eObject
- * the EObject to show in a model browser
- * @param useExistingEditor
- * open in an existing editor if possible
- */
- public static void openEObjectInBrowser(final EObject eObject, final boolean useExistingEditor) {
- if (useExistingEditor) {
- // try to re-open the element in the same browser it came from
- Resource resource = eObject.eResource();
- if (resource != null) {
- ResourceSet resourceSet = resource.getResourceSet();
- IWorkbenchWindow[] workbenchWindows = PlatformUI.getWorkbench()
- .getWorkbenchWindows();
- for (IWorkbenchWindow workbenchWindow : workbenchWindows) {
- IWorkbenchPage[] pages = workbenchWindow.getPages();
- for (IWorkbenchPage workbenchPage : pages) {
- IEditorReference[] editorReferences = workbenchPage.getEditorReferences();
- for (IEditorReference editorReference : editorReferences) {
- IEditorPart anEditor = editorReference.getEditor(false);
- if (anEditor instanceof EcoreBrowser) {
- EcoreBrowser browser = (EcoreBrowser) anEditor;
- if (browser.getResourceSet() == resourceSet) {
- browser.browseTo(eObject);
- browser.getSite().getPage().activate(browser);
- return;
- }
- }
- }
- }
- }
- }
- }
-
- // if that failed (the editor is now closed maybe), then open a new
- // model browser and select the element
- final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage();
- try {
- final URI elementURI = EcoreUtil.getURI(eObject);
- URI resourceURI = elementURI.trimFragment();
- final IEditorInput editorInput;
- if (resourceURI.isPlatformResource()) {
- String platformString = resourceURI.toPlatformString(true);
- IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(platformString);
- if (res instanceof IFile) {
- IFile file = (IFile) res;
- editorInput = new FileEditorInput(file);
- } else {
- MoDiscoBrowserPlugin.logError("Cannot open model: " + resourceURI); //$NON-NLS-1$
- return;
- }
- } else if (EPackage.Registry.INSTANCE.containsKey(resourceURI.toString())) {
- editorInput = new URIEditorInput(resourceURI);
- } else if (eObject.eResource() != null) {
- if (eObject.eResource().getResourceSet() == null) {
- ResourceSet resourceSet = new ResourceSetImpl();
- resourceSet.getResources().add(eObject.eResource());
- }
- editorInput = new ResourceEditorInput(eObject.eResource());
- } else {
- // open a model browser on a new resource containing the
- // element
- ResourceSet resourceSet = new ResourceSetImpl();
- Resource tempResource = resourceSet.createResource(URI
- .createURI("http://eclipse.org/MoDisco/browser/temp")); //$NON-NLS-1$
- tempResource.getContents().add(eObject);
- editorInput = new ResourceEditorInput(tempResource);
- }
-
- IEditorPart newEditor = IDE.openEditor(activePage, editorInput, EcoreBrowser.EDITOR_ID,
- true);
- if (newEditor instanceof EcoreBrowser) {
- final EcoreBrowser browser = (EcoreBrowser) newEditor;
- final String uriFragment = eObject.eResource().getURIFragment(eObject);
- browser.doWhenLoaded(new Runnable() {
- public void run() {
- boolean result = browser.browseToByURI(uriFragment);
- if (!result) {
- MoDiscoLogger.logError("could not find EObject with uriFragment \"" //$NON-NLS-1$
- + uriFragment + "\" in the model", //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
- });
- }
- } catch (final PartInitException e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/DragAdapter.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/DragAdapter.java
deleted file mode 100644
index f1eb21d52..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/DragAdapter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.DragSourceListener;
-import org.eclipse.swt.dnd.Transfer;
-
-/**
- * Adds support for dragging model elements from the browser. The data in the
- * D&D operation is set to the unwrapped elements (i.e., the Ecore elements, and
- * not the tree items).
- */
-public final class DragAdapter implements DragSourceListener {
-
- private ISelection selection;
- private final StructuredViewer viewer;
-
- /** Create support for dragging EObjects from the given tree viewer */
- @SuppressWarnings("unused")
- public static void create(final StructuredViewer viewer) {
- new DragAdapter(viewer);
- }
-
- private DragAdapter(final StructuredViewer viewer) {
- this.viewer = viewer;
- int dndOperations = DND.DROP_LINK | DND.DROP_COPY | DND.DROP_MOVE;
- Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
- viewer.addDragSupport(dndOperations, transfers, this);
- }
-
- public void dragStart(final DragSourceEvent event) {
- this.selection = this.viewer.getSelection();
- }
-
- public void dragSetData(final DragSourceEvent event) {
- if (LocalTransfer.getInstance().isSupportedType(event.dataType)) {
- if (this.selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) this.selection;
- event.data = BrowserUtils.unwrapSelection(structuredSelection);
- } else {
- event.doit = false;
- }
- }
- }
-
- public void dragFinished(final DragSourceEvent event) {
- this.selection = null;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/EcoreBrowser.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/EcoreBrowser.java
deleted file mode 100644
index b1884c32d..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/EcoreBrowser.java
+++ /dev/null
@@ -1,3275 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2015 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Payneau (Mia-Software) - Enable editability
- * Nicolas Guyomar (Mia-Software) - Code Synchronization
- * Nicolas Guyomar (Mia_software) - Bug 333651 Remove of the MoDisco EPackage view and of the metamodel browsing button
- * Gregoire Dupe (Mia-Software) - Bug 404263 - EditingDomainProvider does not work when using IResourceEditorInput
- * Grégoire Dupé (Mia-Software) - Bug 471096 - MetaclassInstance features have to be moved to an EMF dedicated plug-in
- * Gregoire Dupe (Mia-Software) - Bug 472182 - Missing debug information in EcoreBrowser.handleChangedResources(2636)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EventObject;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CancellationException;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IStorage;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.command.CommandStackListener;
-import org.eclipse.emf.common.command.CommandWrapper;
-import org.eclipse.emf.common.command.CompoundCommand;
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.common.ui.MarkerHelper;
-import org.eclipse.emf.common.ui.viewer.IViewerProvider;
-import org.eclipse.emf.common.util.BasicDiagnostic;
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EValidator;
-import org.eclipse.emf.ecore.plugin.EcorePlugin;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.util.EContentAdapter;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.emf.edit.command.CreateChildCommand;
-import org.eclipse.emf.edit.command.DeleteCommand;
-import org.eclipse.emf.edit.command.RemoveCommand;
-import org.eclipse.emf.edit.command.SetCommand;
-import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.domain.IEditingDomainProvider;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
-import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
-import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
-import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
-import org.eclipse.emf.edit.ui.provider.PropertyDescriptor;
-import org.eclipse.emf.edit.ui.provider.PropertySource;
-import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
-import org.eclipse.emf.edit.ui.util.EditUIUtil;
-import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.actions.LoadFacetsAction;
-import org.eclipse.gmt.modisco.infra.browser.core.DragAndDropOnLinkCommand;
-import org.eclipse.gmt.modisco.infra.browser.core.DragAndDropOnModelElementCommand;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclass;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclasses;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclasses.MetaclassesChangeListener;
-import org.eclipse.gmt.modisco.infra.browser.core.MetaclassList;
-import org.eclipse.gmt.modisco.infra.browser.core.ModelElementItemEx;
-import org.eclipse.gmt.modisco.infra.browser.core.QueryItem;
-import org.eclipse.gmt.modisco.infra.browser.core.SearchResults;
-import org.eclipse.gmt.modisco.infra.browser.custom.MetamodelView;
-import org.eclipse.gmt.modisco.infra.browser.custom.core.CustomizationsCatalog;
-import org.eclipse.gmt.modisco.infra.browser.dialogs.ErrorsDialog;
-import org.eclipse.gmt.modisco.infra.browser.extensions.LoadingDepthRegistry;
-import org.eclipse.gmt.modisco.infra.browser.extensions.listeners.DoubleClickListener;
-import org.eclipse.gmt.modisco.infra.browser.preferences.PreferenceConstants;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQueriesManager;
-import org.eclipse.gmt.modisco.infra.browser.queries.SelectedQuery;
-import org.eclipse.gmt.modisco.infra.browser.uicore.ChangeListener;
-import org.eclipse.gmt.modisco.infra.browser.uicore.UnwrappingSelectionProvider;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.Activator;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.CustomTreePainter;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.customization.CustomizationEngine;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.AttributeItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.BigListItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ITreeElement;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.EMFUtil;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.internal.builder.AbstractMoDiscoCatalog.ModiscoCatalogChangeListener;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.controls.FormStyleSashForm;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.controls.Tooltip;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.editorInputs.IResourceEditorInput;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.util.DialogUtils;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.gmt.modisco.infra.facet.FacetSet;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetSetCatalog;
-import org.eclipse.gmt.modisco.infra.facet.core.adapters.instances.MetaclassInstancesAdapterFactoryWithFacet;
-import org.eclipse.gmt.modisco.infra.facet.core.adapters.instances.MetaclassInstancesAdapterWithFacet;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.IStatusLineManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.FontDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.ITreeSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TreePath;
-import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.modisco.facet.util.core.Logger;
-import org.eclipse.modisco.util.emf.core.internal.allinstances.MetaclassInstances;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.INavigationLocation;
-import org.eclipse.ui.INavigationLocationProvider;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.IStorageEditorInput;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
-import org.eclipse.ui.contexts.IContextActivation;
-import org.eclipse.ui.contexts.IContextService;
-import org.eclipse.ui.dialogs.SaveAsDialog;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.Form;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.ide.IGotoMarker;
-import org.eclipse.ui.part.EditorPart;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-import org.eclipse.ui.views.properties.IPropertyDescriptor;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.ui.views.properties.IPropertySource;
-import org.eclipse.ui.views.properties.PropertySheet;
-import org.eclipse.ui.views.properties.PropertySheetPage;
-import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
-
-/**
- * MoDisco model editor: a two pane editor. The left pane shows the list of
- * metaclasses and the right pane shows the list of instances of the metaclass
- * selected in the left pane.
- * <p>
- * The following pop-up menus can be contributed to this part:
- * <ul>
- * <li>{@link EcoreBrowser#MENU_ID}
- * <li>{@link MetaclassViewer#MENU_ID}
- * </ul>
- */
-public class EcoreBrowser extends EditorPart implements ISelectionProvider, IMenuListener,
- IViewerProvider, INavigationLocationProvider, MetaclassesChangeListener,
- IEditingDomainProvider, IGotoMarker {
-
- public static final String MENU_ID = EcoreBrowser.EDITOR_ID + ".menu"; //$NON-NLS-1$
-
- private static final int MAIN_FORM_MARGIN_HEIGHT = 6;
- private static final int MAIN_FORM_MARGIN_WIDTH = 4;
- private static final int RIGHT_PANE_SASH_WEIGHT = 65;
- private static final int LEFT_PANE_SASH_WEIGHT = 35;
- private static final int SASH_WIDTH = 4;
- public static final String EDITOR_ID = "org.eclipse.gmt.modisco.infra.browser.editorID"; //$NON-NLS-1$
- private static final String PROPERTY_VIEW_ID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
-
- private ResourceSet fResourceSet;
-
- private Resource model;
-
- /** An adapter factory that uses the registry */
- private ComposedAdapterFactory adapterFactoryWithRegistry;
-
- /** The property sheet page. */
- private IPropertySheetPage propertySheetPage;
-
- /** The tree part of the model editor. */
- private TreeViewer treeViewer;
-
- private BrowserContentProvider fContentProvider;
- private BrowserLabelProvider fLabelProvider;
-
- /** The tree component (instances pane) */
- private Tree fTree;
-
- /** The list of metaclasses that appears in the left pane of the editor */
- private MetaclassViewer metaclassViewer;
-
- /** This listens to the tree viewer's selection. */
- private ISelectionChangedListener selectionChangedListener;
-
- /**
- * This keeps track of all the
- * {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are
- * listening to this editor.
- */
- private final Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
-
- /** This keeps track of the selection of the editor as a whole. */
- private ISelection editorSelection = StructuredSelection.EMPTY;
-
- /**
- * Resources that have been removed since last activation.
- */
- private final Collection<Resource> removedResources = new ArrayList<Resource>();
-
- /**
- * Resources that have been changed since last activation.
- */
- private final Collection<Resource> changedResources = new ArrayList<Resource>();
-
- private final Collection<Resource> savedResources = new ArrayList<Resource>();
-
- /** This listens for workspace changes. */
- private final IResourceChangeListener resourceChangeListener;
-
- private Job openModelJob = null;
-
- /**
- * Controls whether the problem indication should be updated.
- */
- private boolean updateProblemIndication = true;
-
- /**
- * Map to store the diagnostic associated with a resource.
- */
- private final Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
-
- /**
- * The MarkerHelper is responsible for creating workspace resource markers
- * presented in Eclipse's Problems View.
- */
- private final MarkerHelper markerHelper = new EditUIMarkerHelper();
-
- /** Whether the Browser has finished loading */
- private boolean loaded = false;
-
- /** List of actions that must be done once the browser is loaded */
- private final List<Runnable> doWhenLoaded = new ArrayList<Runnable>();
-
- private Collection<EPackage> referencedEPackages = null;
-
- private Composite typesPaneComposite;
-
- private Composite instancesPaneComposite;
-
- private Button errorsButton;
-
- /**
- * This keeps track of the editing domain that is used to track all changes
- * to the model.
- */
- private AdapterFactoryEditingDomain editingDomain;
- /**
- * The configuration of this editor, which is passed to the adapters, so
- * that they can use it to change their behavior accordingly
- */
- private final BrowserConfiguration browserConfiguration;
-
- /** The composite in which the editor is displayed */
- private Composite parentComposite;
-
- /** The search box */
- private Text searchBox;
-
- /** The search job, to allow cancellation in case of a big model */
- private Job searchJob = null;
-
- /**
- * The input of the tree viewer, saved before filtering by search, and
- * restored afterwards
- */
- private Object savedInput;
-
- /** A listener on changes to fonts settings */
- private IPropertyChangeListener fontChangeListener;
-
- /** Listens to changes in the loaded customizations, and updates the viewers */
- private ChangeListener fCustomizationEngineChangeListener = null;
-
- /** Listens to changes in the Facet catalog, and updates the viewers */
- private ModiscoCatalogChangeListener fFacetsChangeListener = null;
-
- /** Allows optimized refreshes of the viewer */
- private Job refreshJob = null;
-
- private FormStyleSashForm sashForm;
- // Initialize to HORIZONTAL representation
- private int styleSashForm = SWT.HORIZONTAL;
- private CustomTreePainter customTreePainter;
-
- private FormToolkit fFormToolkit;
- private Form form;
- private LeftPane leftPane;
- private TreeToolBar instancesToolBar;
-
- private BrowserSettingsPersistence settingsPersistence;
-
- /** Indicates the editor is being disposed */
- private boolean disposing = false;
-
- private BasicDiagnostic fDiagnostic;
-
- /**
- * This listens for when the Properties view becomes active
- */
- private final IPartListener partListener = new IPartListener() {
- public void partActivated(final IWorkbenchPart p) {
- if (p instanceof PropertySheet) {
- if (((PropertySheet) p).getCurrentPage() == EcoreBrowser.this
- .getPropertySheetPage()) {
- getActionBarContributor().setActiveEditor(EcoreBrowser.this);
- handleActivate();
- }
- } else if (p == EcoreBrowser.this) {
- handleActivate();
- }
- }
-
- public void partBroughtToTop(final IWorkbenchPart p) {
- // Ignore.
- }
-
- public void partClosed(final IWorkbenchPart p) {
- // Ignore.
- }
-
- public void partDeactivated(final IWorkbenchPart p) {
- // Ignore.
- }
-
- public void partOpened(final IWorkbenchPart p) {
- // Ignore.
- }
- };
-
- /** Create the Mia Ecore model editor. */
- public EcoreBrowser() {
- super();
- this.browserConfiguration = new BrowserConfiguration(this);
-
- // load user settings
- this.browserConfiguration.getAppearanceConfiguration().load();
-
- this.resourceChangeListener = new WorkspaceChangeListener(this);
- }
-
- /** Set the selection into the tree viewer */
- public void setSelectionToViewer(final Collection<?> selection) {
- final Collection<?> theSelection = selection;
-
- if (theSelection != null && !theSelection.isEmpty()) {
- Runnable runnable = new Runnable() {
- public void run() {
- if (EcoreBrowser.this.treeViewer != null) {
- EcoreBrowser.this.treeViewer.setSelection(new StructuredSelection(
- theSelection.toArray()), true);
- }
- }
- };
- getSite().getShell().getDisplay().asyncExec(runnable);
- }
- }
-
- /** @return the viewer as required by the {@link IViewerProvider} interface. */
- public Viewer getViewer() {
- return this.treeViewer;
- }
-
- public MetaclassViewer getMetaclassViewer() {
- return this.metaclassViewer;
- }
-
- /**
- * Create a context menu for the viewer, add a listener, and register the
- * menu for extension.
- */
- protected void createContextMenuFor(final StructuredViewer viewer) {
- final MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
- contextMenu.setRemoveAllWhenShown(true);
- contextMenu.addMenuListener(this);
- final Menu menu = contextMenu.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(EcoreBrowser.MENU_ID, contextMenu,
- new UnwrappingSelectionProvider(viewer));
- }
-
- /** Load a resource based on the editor's input. */
- protected Resource createModel() {
- Resource result = null;
- Exception exception = null;
- // this.fResourceSet.setURIConverter(createURIConverter());
- this.fResourceSet.getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap());
- final URI resourceURI = EditUIUtil.getURI(getEditorInput());
- try {
- final IEditorInput editorInput = getEditorInput();
- if (editorInput instanceof FileEditorInput) {
- // Load the resource
- ResourceSet resourceSet = this.editingDomain.getResourceSet();
- synchronized (resourceSet) {
- result = resourceSet.getResource(resourceURI, true);
- }
- this.fResourceSet = this.editingDomain.getResourceSet();
- } else if (editorInput instanceof IResourceEditorInput) {
- IResourceEditorInput resourceEditorInput = (IResourceEditorInput) editorInput;
- result = resourceEditorInput.getResource();
- // this.fResourceSet.getResources().add(result);
- ResourceSet resourceSet = result.getResourceSet();
- if (resourceSet != null) {
- this.fResourceSet = resourceSet;
- }
- setPartName(resourceEditorInput.getName());
- } else if (editorInput instanceof IStorageEditorInput) {
- IStorageEditorInput storageEditorInput = (IStorageEditorInput) editorInput;
- IStorage storage = storageEditorInput.getStorage();
- InputStream inputStream = storage.getContents();
- Resource resource = this.fResourceSet.createResource(URI.createURI(resourceURI
- .toString()));
- resource.load(inputStream, Collections.emptyMap());
- result = resource;
- } else {
- final String resolveURI = resourceURI.toString();
- final EPackage ePackage = this.fResourceSet.getPackageRegistry().getEPackage(
- resolveURI);
- if (ePackage != null) {
- result = ePackage.eResource();
- if (result != null) {
- this.fResourceSet.getResources().add(result);
- setPartName(ePackage.getName());
- }
- } else {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- MessageDialog.openWarning(getSite().getShell(),
- Messages.EcoreBrowser_cannotOpenModelFromURI, NLS.bind(
- Messages.EcoreBrowser_cannotFindEPackageWithThatURI,
- resolveURI));
- }
- });
- }
- }
- initializeEditingDomain(this.fResourceSet);
- } catch (final Exception e) {
- exception = e;
- MoDiscoBrowserPlugin.logException(e);
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- MessageDialog.openError(EcoreBrowser.this.parentComposite.getShell(),
- Messages.EcoreBrowser_errorLoadingModel, e.toString());
- }
- });
- this.fResourceSet.getResource(resourceURI, false);
- }
- this.fResourceSet.setURIConverter(BrowserUtils.createURIConverter());
-
- // look for errors in the Resource
- if (result != null) {
- Diagnostic diagnostic = analyzeResourceProblems(result, exception);
- if (diagnostic.getSeverity() != Diagnostic.OK) {
- this.resourceToDiagnosticMap.put(result, diagnostic);
- }
- }
-
- this.editingDomain.getResourceSet().eAdapters().add(this.problemIndicationAdapter);
-
- return result;
- }
-
- @Override
- protected void setPartName(final String partName) {
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- EcoreBrowser.super.setPartName(partName);
- }
- });
- }
-
- protected static final String LOADING_MESSAGE = Messages.EcoreBrowser_loadingModelPlaceholder;
-
- public static final String HUMAN_READABLE_NAME = Messages.EcoreBrowser_MoDisco_Model_Browser;
-
- /** Create the editor composite. */
- @Override
- public void createPartControl(final Composite parent) {
-
- this.fFormToolkit = new FormToolkit(parent.getDisplay());
- this.form = this.fFormToolkit.createForm(parent);
-
- this.parentComposite = parent;
- parent.setLayout(new FillLayout());
-
- initializeEditingDomain();
-
- final FillLayout fillLayout = new FillLayout();
- fillLayout.marginWidth = EcoreBrowser.MAIN_FORM_MARGIN_WIDTH;
- fillLayout.marginHeight = EcoreBrowser.MAIN_FORM_MARGIN_HEIGHT;
- this.form.getBody().setLayout(fillLayout);
-
- // use an adapter factory that looks in the registry
- this.browserConfiguration.getAppearanceConfiguration().setAdapterFactory(
- this.adapterFactoryWithRegistry);
-
- this.browserConfiguration.setSelectedQueriesManager(new SelectedQueriesManager());
- this.sashForm = new FormStyleSashForm(this.form.getBody(), this.styleSashForm,
- this.fFormToolkit) {
- @Override
- protected void createContents() {
- createLeftPane(this);
- createTreePane(this);
- }
- };
- this.sashForm.setSashWidth(EcoreBrowser.SASH_WIDTH);
-
- setupInitialTreeFont();
-
- this.sashForm.setWeights(new int[] { EcoreBrowser.LEFT_PANE_SASH_WEIGHT,
- EcoreBrowser.RIGHT_PANE_SASH_WEIGHT });
-
- // keep track of the selection, to be able to restore it when using the
- // "back" button
- addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(final SelectionChangedEvent event) {
- markNavigationLocation();
- }
- });
-
- createContextMenuFor(this.treeViewer);
- DragAdapter.create(this.treeViewer);
-
- int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
- Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
- EditingDomainViewerDropAdapter editingDomainViewerDropAdapter = new EditingDomainViewerDropAdapter(
- this.editingDomain, this.treeViewer);
- this.treeViewer.addDropSupport(dndOperations, transfers, editingDomainViewerDropAdapter);
-
- getMetaclassViewer().setInput(EcoreBrowser.LOADING_MESSAGE);
- this.treeViewer.setInput(EcoreBrowser.LOADING_MESSAGE);
-
- createAttributeItemTooltip();
- }
-
- private void createAttributeItemTooltip() {
- Tooltip tooltip = new Tooltip() {
- @Override
- protected String getText(final TreeItem item) {
- Object data = item.getData();
- if (data instanceof AttributeItem) {
- AttributeItem attributeItem = (AttributeItem) data;
- if (!attributeItem.getText().contains(attributeItem.getValueText())) {
- return attributeItem.getValueText();
- }
- }
- return null;
- }
-
- @Override
- protected void positionTooltip(final TreeItem treeItem, final Point pt,
- final Point tooltipSize) {
- Point point = EcoreBrowser.this.treeViewer.getTree().toDisplay(
- treeItem.getBounds().x, treeItem.getBounds().y);
- pt.x = point.x;
- pt.y = point.y;
- }
- };
- tooltip.installOn(this.treeViewer.getTree());
- }
-
- /**
- * Load the model in the background, to avoid freezing the UI during this
- * long-running operation.
- * <p>
- * <b>see</b>: Bug 325120 - [Model Browser] don't freeze UI while loading
- * model
- *
- * @param monitor
- */
- protected boolean backgroundOpenModel(final IProgressMonitor monitor) {
- try {
- checkCancelled(monitor);
- initResourceSet();
- checkCancelled(monitor);
- checkResourceSet();
-
- if (this.model == null) {
- return false;
- }
-
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- getMetaclassViewer().setInput(
- getBrowserConfiguration().getInstancesForMetaclasses());
- /*
- * Select the metaclass corresponding to the 'root' element
- * (that is, the 'model' element). This in turn sets the
- * input of the treeview.
- */
- getMetaclassViewer().selectRootElement();
- }
- });
-
- loadDefaultFacetSets(this.model);
-
- IDialogSettings settingsForCurrentMetamodel = getSettingsPersistence()
- .loadLastSettingsForCurrentMetamodel();
-
- List<Facet> lastFacets = getSettingsPersistence().getLastFacets(
- settingsForCurrentMetamodel);
-
- LoadFacetsAction.loadFacets(lastFacets, this);
- // for (Facet facet : lastFacets) {
- // this.browserConfiguration.getAppearanceConfiguration().loadFacet(facet);
- // checkCancelled(monitor);
- // }
-
- checkCancelled(monitor);
- List<MetamodelView> lastCustomizations = getSettingsPersistence()
- .getLastCustomizations(settingsForCurrentMetamodel);
- if (lastCustomizations.size() > 0) {
- loadCustomizations(lastCustomizations);
- } else {
- loadDefaultCustomizations();
- }
-
- checkCancelled(monitor);
-
- // note: must be done after adding or removing facets too
- this.browserConfiguration.getInstancesForMetaclasses().buildDerivationTree();
-
- // add a listener to reload when Facets are modified
- reloadOnFacetChange();
-
- checkCancelled(monitor);
- } catch (CancellationException e) {
- // canceled : nothing more to do
- return false;
- } catch (ThreadDeath e) {
- // canceled : nothing more to do
- return false;
- }
- finishedLoading();
- return true;
- }
-
- private void checkResourceSet() {
- for (Resource resource : this.fResourceSet.getResources()) {
- if (resource.getURI() == null) {
- MoDiscoLogger.logError(
- "The ResourceSet opened in the browser contains a Resource with a null URI. " //$NON-NLS-1$
- + "This can be the cause of NullPointerExceptions.", //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
- }
-
- private void finishedLoading() {
- for (Runnable runnable : this.doWhenLoaded) {
- try {
- Display.getDefault().syncExec(runnable);
- } catch (Exception e) {
- MoDiscoLogger.logError(e, Activator.getDefault());
- }
- }
- this.getSite().getShell().getDisplay().asyncExec(new Runnable() {
- public void run() {
- firePropertyChange(PROP_INPUT);
- }
- });
- }
-
- private void checkCancelled(final IProgressMonitor monitor) {
- if (monitor.isCanceled() || this.treeViewer.getTree().isDisposed()) {
- throw new CancellationException();
- }
- }
-
- public BrowserSettingsPersistence getSettingsPersistence() {
- if (this.settingsPersistence == null) {
- this.settingsPersistence = new BrowserSettingsPersistence(getMetamodelURI(), this,
- this.browserConfiguration);
- }
- return this.settingsPersistence;
- }
-
- /**
- * @return the URI of the EPackage corresponding to the EClass of the main
- * resource's root element
- */
- public String getMetamodelURI() {
- if (this.model == null) {
- return ""; //$NON-NLS-1$
- }
- try {
- EList<EObject> contents = this.model.getContents();
- if (contents.size() > 0) {
- EObject eObject = contents.get(0);
- EClass eClass = eObject.eClass();
- if (eClass != null) {
- return eClass.getEPackage().getNsURI();
- }
- }
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- return ""; //$NON-NLS-1$
- }
-
- /**
- * @return {@link EPackage}s of {@link EClass}es from the model's main
- * {@link Resource}
- */
- public Collection<EPackage> getReferencedEPackages() {
- if (this.referencedEPackages != null) {
- return this.referencedEPackages;
- }
- Set<EPackage> ePackages = new HashSet<EPackage>();
- try {
- if (this.model != null) {
- TreeIterator<EObject> allContents = this.model.getAllContents();
- while (allContents.hasNext()) {
- EObject eObject = allContents.next();
- EClass eClass = eObject.eClass();
- if (eClass != null) {
- EPackage ePackage = eClass.getEPackage();
- if (ePackage != null) {
- ePackages.add(ePackage);
- }
- }
- }
- }
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- this.referencedEPackages = ePackages;
- return ePackages;
- }
-
- protected void initResourceSet() {
- // create an empty resource set
- this.fResourceSet = createResourceSet();
-
- HashSet<Resource> browsedResources = new HashSet<Resource>();
- Resource mainResource;
- this.model = createModel();
- mainResource = this.model;
- if (mainResource != null) {
- browsedResources.add(mainResource);
- }
- this.browserConfiguration.setResourceSet(this.fResourceSet);
-
- addReferencedResources(mainResource, browsedResources);
- this.browserConfiguration.setBrowsedResources(browsedResources);
- this.browserConfiguration.getAppearanceConfiguration().getFacetContext()
- .setResources(browsedResources);
-
- final InstancesForMetaclasses instancesForMetaclasses = createInstancesForMetaclasses(browsedResources);
- this.browserConfiguration.setInstancesForMetaclasses(instancesForMetaclasses);
-
- instancesForMetaclasses.addListener(this);
-
- // see Bug 322985 - resources lazy loading and dynamic type panel
- // completion
- // watch ResourceSet to be notified when a Resource is lazy-loaded
- // when that happens, add its elements to the Types panel
- this.fResourceSet.eAdapters().add(new AdapterImpl() {
- @Override
- public void notifyChanged(final Notification notification) {
- if (notification.getFeatureID(ResourceSet.class) == ResourceSet.RESOURCE_SET__RESOURCES) {
- int eventType = notification.getEventType();
- if (eventType == Notification.ADD) {
- Object newValue = notification.getNewValue();
- if (newValue instanceof Resource) {
- Resource resource = (Resource) newValue;
- EcoreBrowser.this.browserConfiguration.addBrowsedResource(resource);
- instancesForMetaclasses.watchResource(resource);
- EcoreBrowser.this.browserConfiguration.getAppearanceConfiguration()
- .touch();
- refreshDelayed(true);
- }
- }
- if (eventType == Notification.REMOVE) {
- Object oldValue = notification.getOldValue();
- if (oldValue instanceof Resource) {
- Resource resource = (Resource) oldValue;
- EcoreBrowser.this.browserConfiguration.removeBrowsedResource(resource);
- instancesForMetaclasses.unwatchResource(resource);
- EcoreBrowser.this.browserConfiguration.getAppearanceConfiguration()
- .touch();
- refreshDelayed(true);
- }
- }
- }
- }
- });
- }
-
- protected InstancesForMetaclasses createInstancesForMetaclasses(
- final Set<Resource> browsedResources) {
- return new InstancesForMetaclasses(this.browserConfiguration, browsedResources);
- }
-
- /**
- * Create the resourceSet. This method can be overridden by subclasses.
- *
- * @return The ResourceSet.
- */
- protected ResourceSet createResourceSet() {
- return new ResourceSetImpl();
- }
-
- /**
- * Load FacetSet defined as default for the root EPackage of root elements
- * in the given resource
- */
- private void loadDefaultFacetSets(final Resource resource) {
- synchronized (resource) {
- for (EObject root : resource.getContents()) {
- EPackage rootEPackage = root.eClass().getEPackage();
- Set<FacetSet> defaultFacetSets = FacetSetCatalog.getSingleton()
- .getDefaultFacetSets(rootEPackage);
- if (defaultFacetSets != null) {
- Set<Facet> facetsToLoad = new HashSet<Facet>();
- for (FacetSet facetSet : defaultFacetSets) {
- if (facetSet != null) {
- facetsToLoad.addAll(facetSet.getFacets());
- }
- }
- }
- }
- }
- }
-
- /**
- * If proxies are found, ask the user whether to load resources referenced
- * by proxies found in the given resource, and up to which depth.
- *
- * @param resource
- * the resource in which to look for proxies to resolve
- * @param allResources
- * the set of resources to which to add resources referenced by
- * proxies
- */
- private void addReferencedResources(final Resource resource, final Set<Resource> allResources) {
- IPreferenceStore preferenceStore = MoDiscoBrowserPlugin.getPlugin().getPreferenceStore();
- // only walk through the resource contents if necessary
- int registryLoadingDepth = LoadingDepthRegistry.getInstance().getLoadingDepth(
- getMetamodelURI());
- if (preferenceStore.getInt(PreferenceConstants.P_BROWSER_LOADING_DEPTH) != 0
- || preferenceStore.getBoolean(PreferenceConstants.P_BROWSER_ASK_LOADING_DEPTH)
- || (registryLoadingDepth != LoadingDepthRegistry.UNDEFINED && registryLoadingDepth != 0)) {
- addReferencedResourcesInternal(resource, allResources, 1);
- }
- }
-
- /**
- * Adds resources referenced by proxies found in the given resources to the
- * set <code>allResources</code>
- *
- * @param resource
- * the resource in which to look for proxies to resolve
- * @param allResources
- * the set of resources to which to add resources referenced by
- * proxies
- * @param currentDepth
- * the current depth
- *
- * @see EcoreBrowser#addReferencedResources(Resource, Set)
- */
- private void addReferencedResourcesInternal(final Resource resource,
- final Set<Resource> allResources, final int currentDepth) {
-
- final Set<Resource> directReferencedResources = new HashSet<Resource>();
-
- synchronized (resource) {
- for (EObject root : resource.getContents()) {
- Map<EObject, Collection<EStructuralFeature.Setting>> externalReferences = EcoreUtil.ExternalCrossReferencer
- .find(root);
- if (!externalReferences.isEmpty()) {
- int loadingDepth = this.browserConfiguration
- .getReferencedResourcesLoadingDepth();
- if (loadingDepth == BrowserConfiguration.NOT_YET_ASKED) {
- int registryLoadingDepth = LoadingDepthRegistry.getInstance()
- .getLoadingDepth(getMetamodelURI());
- // whether user settings override registry settings
- boolean overridden = MoDiscoBrowserPlugin
- .getPlugin()
- .getPreferenceStore()
- .getBoolean(
- PreferenceConstants.P_BROWSER_OVERRIDE_METAMODEL_SPECIFIC_SETTINGS);
-
- if (registryLoadingDepth == LoadingDepthRegistry.UNDEFINED || overridden) {
- final int defaultLoadingDepth = MoDiscoBrowserPlugin.getPlugin()
- .getPreferenceStore()
- .getInt(PreferenceConstants.P_BROWSER_LOADING_DEPTH);
- if (MoDiscoBrowserPlugin.getPlugin().getPreferenceStore()
- .getBoolean(PreferenceConstants.P_BROWSER_ASK_LOADING_DEPTH)) {
- // get shell on UI thread
- final Shell[] shell = new Shell[1];
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- shell[0] = getSite().getShell();
- }
- });
- loadingDepth = BrowserUtils
- .askUserForDepthToLoadReferencedResources(
- defaultLoadingDepth, shell[0]);
- } else {
- loadingDepth = defaultLoadingDepth;
- if (loadingDepth < -1) {
- loadingDepth = 0;
- }
- }
- } else {
- loadingDepth = registryLoadingDepth;
- }
- this.browserConfiguration.setReferencedResourcesLoadingDepth(loadingDepth);
- }
- if (loadingDepth != -1 && loadingDepth < currentDepth) {
- return;
- }
- for (EObject external : externalReferences.keySet()) {
- Resource externalResource;
- if (external.eIsProxy()) {
- externalResource = EcoreUtil.resolve(external, root).eResource();
- } else {
- externalResource = external.eResource();
- }
- if (externalResource != null) {
- directReferencedResources.add(externalResource);
- } else {
- MoDiscoLogger
- .logError(
- "Failed to load an external element: " + external.eClass().getName() //$NON-NLS-1$
- + " " + EcoreUtil.getURI(external), //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
- }
- }
- }
-
- int loadingDepth = this.browserConfiguration.getReferencedResourcesLoadingDepth();
-
- // recurse on sub-resources
- for (Resource directlyReferencedResource : directReferencedResources) {
- if (directlyReferencedResource == null) {
- continue;
- }
- // avoid infinite recursion in the case of mutually referencing
- // resources
- if (!allResources.contains(directlyReferencedResource)) {
- allResources.add(directlyReferencedResource);
- if (loadingDepth == -1 || currentDepth + 1 <= loadingDepth) {
- addReferencedResourcesInternal(directlyReferencedResource, allResources,
- currentDepth + 1);
- }
- }
- }
- }
-
- /**
- * Create the left pane, containing the metaclass viewer.
- *
- * @param parent
- * the parent composite
- */
- protected void createLeftPane(final Composite parent) {
- final Section section = this.fFormToolkit.createSection(parent,
- ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED);
- section.setText(Messages.EcoreBrowser_metaclasses);
- this.typesPaneComposite = this.fFormToolkit.createComposite(section);
- section.setClient(this.typesPaneComposite);
- this.leftPane = initLeftPane(section, this.fFormToolkit);
- final Composite toolBar = this.leftPane.getToolBarComposite();
- section.setTextClient(toolBar);
- this.typesPaneComposite.setLayout(new FillLayout());
- this.metaclassViewer = this.leftPane.getMetaclassViewer();
- this.metaclassViewer
- .addSelectionChangedListener(new MetaclassListViewerSelectionChangedListener());
- }
-
- protected LeftPane initLeftPane(final Section section, final FormToolkit formToolkit) {
- return new LeftPane(section, (Composite) section.getClient(), this.browserConfiguration,
- formToolkit, getSite());
- }
-
- /**
- * Create the tree and its viewer
- *
- * @param parent
- * the parent composite of the tree
- */
- protected void createTreePane(final Composite parent) {
-
- final Section section = this.fFormToolkit.createSection(parent,
- ExpandableComposite.TITLE_BAR | ExpandableComposite.EXPANDED);
- section.setText(Messages.EcoreBrowser_instances);
- this.instancesPaneComposite = this.fFormToolkit.createComposite(section, SWT.NONE);
- section.setClient(this.instancesPaneComposite);
-
- final GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- this.instancesPaneComposite.setLayout(layout);
-
- final Composite treeToolBar = createTreeToolBar(section);
- section.setTextClient(treeToolBar);
-
- this.errorsButton = new Button(this.instancesPaneComposite, SWT.PUSH);
- this.errorsButton.setText(Messages.EcoreBrowser_errorsAndWarnings);
- this.errorsButton.setToolTipText(Messages.EcoreBrowser_errorsAndWarnings);
- this.errorsButton.setImage(ImageProvider.getInstance().getErrorIcon());
- this.errorsButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent e) {
- final ErrorsDialog errorsDialog = new ErrorsDialog(getSite().getShell(),
- EcoreBrowser.this.fDiagnostic);
- errorsDialog.open();
- }
- });
- this.errorsButton.setVisible(false);
-
- final GridData errorsButtonGridData = new GridData();
- errorsButtonGridData.exclude = true;
- this.errorsButton.setLayoutData(errorsButtonGridData);
-
- createSearchPanel(this.instancesPaneComposite);
-
- this.fTree = this.fFormToolkit.createTree(this.instancesPaneComposite, SWT.MULTI
- | SWT.BORDER);
- final GridData treeGridData = new GridData();
- treeGridData.grabExcessHorizontalSpace = true;
- treeGridData.grabExcessVerticalSpace = true;
- treeGridData.horizontalAlignment = SWT.FILL;
- treeGridData.verticalAlignment = SWT.FILL;
- this.fTree.setLayoutData(treeGridData);
-
- this.fTree.addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(final KeyEvent e) {
- if (e.keyCode == SWT.ESC) {
- // Escape on the tree: restore view (after search)
- EcoreBrowser.this.searchBox.setText(""); //$NON-NLS-1$
- search();
- } else if (e.keyCode == SWT.CR) {
- // Enter: browse selected item
- handleEnter();
- } else if (e.keyCode == 'c' && e.stateMask == SWT.CTRL) {
- // Ctrl+C : copy element text to clipboard
- BrowserUtils.handleCopyToClipboard(getEditorSelection());
- } else if (e.keyCode == SWT.DEL) {
- handleDel();
- }
- }
- });
-
- this.customTreePainter = new CustomTreePainter(this.fTree,
- this.browserConfiguration.getAppearanceConfiguration());
- // create a tooltip to show facet names
- FacetTooltip.create(this.fTree, this.customTreePainter);
-
- this.treeViewer = new TreeViewer(this.fTree);
- // speeds up all operations on a big model
- this.treeViewer.setUseHashlookup(true);
-
- hookViewerToSelection(this.treeViewer);
-
- this.fContentProvider = new BrowserContentProvider(this);
- this.treeViewer.setContentProvider(this.fContentProvider);
- this.fLabelProvider = new BrowserLabelProvider(this);
- this.treeViewer.setLabelProvider(this.fLabelProvider);
-
- registerShowPropertyViewOnDblClick(this.fTree);
- }
-
- /**
- * The user pressed the "Enter" key : if selected element is a model
- * element, then browse to it. If it is an attribute, then open properties
- * view.
- */
- protected void handleEnter() {
- final ISelection selection = getEditorSelection();
- if (selection instanceof ITreeSelection) {
- final ITreeSelection treeSelection = (ITreeSelection) selection;
- final Object selectedElement = treeSelection.getFirstElement();
- if (selectedElement instanceof ModelElementItem) {
- browse();
- } else if (selectedElement instanceof AttributeItem
- || selectedElement instanceof LinkItem) {
- openPropertiesView();
- } else if (selectedElement instanceof QueryItem) {
- QueryItem queryItem = (QueryItem) selectedElement;
- SelectedQuery query = queryItem.getQuery();
- query.executeQuery();
- }
- }
- }
-
- /** The user pressed the "Delete" key */
- protected void handleDel() {
- final ISelection selection = getEditorSelection();
- if (selection instanceof ITreeSelection) {
- final ITreeSelection treeSelection = (ITreeSelection) selection;
- Iterator<?> iterator = treeSelection.iterator();
- while (iterator.hasNext()) {
- Object selectedElement = iterator.next();
- if (selectedElement instanceof QueryItem) {
- QueryItem queryItem = (QueryItem) selectedElement;
- this.browserConfiguration.getSelectedQueriesManager().remove(
- queryItem.getQuery());
- }
- }
- }
- }
-
- /**
- * Set the initial font using saved user preferences, and add a listener to
- * be notified of changes in the preferences
- */
- private void setupInitialTreeFont() {
- setupPreferredFont();
-
- this.fontChangeListener = new IPropertyChangeListener() {
- public void propertyChange(final PropertyChangeEvent event) {
- if (event.getProperty().equals(JFaceResources.DIALOG_FONT)) {
- setupPreferredFont();
- }
- }
- };
- JFaceResources.getFontRegistry().addListener(this.fontChangeListener);
- }
-
- /** Set the user preferred font on the editor */
- private void setupPreferredFont() {
- FontDescriptor descriptor = FontDescriptor.createFrom(JFaceResources.getDialogFont());
- descriptor = descriptor.increaseHeight(this.browserConfiguration
- .getAppearanceConfiguration().getFontSizeDelta());
- final Font customFont = descriptor.createFont(Display.getDefault());
- descriptor = descriptor.setStyle(SWT.ITALIC);
- final Font customItalicFont = descriptor.createFont(Display.getDefault());
- this.browserConfiguration.getAppearanceConfiguration().setCustomFont(customFont);
- this.browserConfiguration.getAppearanceConfiguration()
- .setCustomItalicFont(customItalicFont);
- this.fTree.setFont(customFont);
- this.treeViewer.refresh();
- this.metaclassViewer.setFont(customFont);
- this.metaclassViewer.refresh();
- }
-
- protected Composite createTreeToolBar(final Composite parent) {
- final Composite treeToolBarComposite = new Composite(parent, SWT.WRAP);
- this.instancesToolBar = TreeToolBar.create(treeToolBarComposite, this);
- return treeToolBarComposite;
- }
-
- /**
- * Register a listener to show the property view or execute a query when the
- * tree is double-clicked
- */
- private void registerShowPropertyViewOnDblClick(final Tree tree) {
- tree.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseDoubleClick(final MouseEvent event) {
- boolean handled = false;
- if (event.button == 1) {
- TreeItem[] selection = tree.getSelection();
- for (TreeItem treeItem : selection) {
- Object element = treeItem.getData();
- if (element instanceof QueryItem) {
- QueryItem queryItem = (QueryItem) element;
- SelectedQuery query = queryItem.getQuery();
- query.executeQuery();
- handled = true;
- }
-
- // If the user has activated the code synchronization
- if (EcoreBrowser.this.browserConfiguration.getAppearanceConfiguration()
- .isSynchronizeSourceCode()) {
- EObject eObject = (EObject) Platform.getAdapterManager().getAdapter(
- element, EObject.class);
-
- IStatusLineManager statusLineManager = getActionBars()
- .getStatusLineManager();
-
- if (eObject != null) {
- // Look for an extension declaring the
- // doubleClickListener extension point
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IExtensionPoint extPointDblClick = registry
- .getExtensionPoint("org.eclipse.gmt.modisco.infra.browser.doubleClickListener"); //$NON-NLS-1$
-
- if (extPointDblClick != null) {
- for (IExtension ext : extPointDblClick.getExtensions()) {
- for (IConfigurationElement configElt : ext
- .getConfigurationElements()) {
- String classAttribute = configElt.getAttribute("class"); //$NON-NLS-1$
- if (classAttribute != null) {
- try {
- DoubleClickListener listener = (DoubleClickListener) configElt
- .createExecutableExtension("class"); //$NON-NLS-1$
- // Synchronize this eObject
- // with its source code
- listener.synchronizeEObject(eObject,
- statusLineManager);
- } catch (CoreException e) {
- MoDiscoLogger.logError(e,
- MoDiscoBrowserPlugin.getPlugin());
- } finally {
- handled = true;
- }
- }
- }
- }
- } else {
- if (statusLineManager != null) {
- statusLineManager
- .setErrorMessage(Messages.EcoreBrowser_noSynchronisationExtensionFound);
- } else {
- MoDiscoLogger
- .logWarning(
- Messages.EcoreBrowser_noSynchronisationExtensionFound,
- MoDiscoBrowserPlugin.getPlugin());
- }
-
- }
- }
- }
-
- }
- if (!handled) {
- openPropertiesView();
- }
- }
- }
- });
- }
-
- public boolean isSynchronizeSourceCode() {
- return this.browserConfiguration.getAppearanceConfiguration().isSynchronizeSourceCode();
- }
-
- public void setSynchronizeSourceCode(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setSynchronizeSourceCode(value);
- internalRefreshTree();
- }
-
- /**
- * Create the search panel, containing a label and search field.
- *
- * @param parent
- * the parent composite, which must have a GridLayout
- */
- protected void createSearchPanel(final Composite parent) {
- final Composite searchPanel = new Composite(parent, SWT.NONE);
- searchPanel.setLayout(new GridLayout());
-
- searchPanel.setLayout(new FillLayout());
- final GridData searchPanelGridData = new GridData();
- searchPanelGridData.grabExcessHorizontalSpace = true;
- searchPanelGridData.horizontalAlignment = SWT.FILL;
- searchPanel.setLayoutData(searchPanelGridData);
-
- // Label searchLabel = new Label(searchPanel, SWT.NONE);
- // searchLabel.setText("&Search:");
-
- this.searchBox = new Text(searchPanel, SWT.SEARCH);
- this.searchBox.addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(final KeyEvent e) {
- if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
- // ENTER: start a search
- search();
- } else if (e.keyCode == SWT.ESC) {
- // ESCAPE: restore the view after a search
- EcoreBrowser.this.searchBox.setText(""); //$NON-NLS-1$
- search();
- }
- }
- });
-
- this.searchBox.setMessage(Messages.EcoreBrowser_typeFilterText);
- this.searchBox.setData("org.eclipse.swtbot.widget.key", "EcoreBrowser.searchBox"); //$NON-NLS-1$//$NON-NLS-2$
- fixClipboardCommands(this.searchBox);
- }
-
- /**
- * Called when the user initiates a search. Find the list of all the
- * instances of the selected metaclass that have a name containing the
- * search string (entered by the user in the search box), in a case
- * insensitive way. Set this list as input of the tree viewer.
- * <p>
- * Do the search in a Job that can be canceled by the user.
- * <p>
- * If the search box is empty, then restore the previous tree viewer input.
- */
- protected void search() {
- final String searchText = this.searchBox.getText().toLowerCase();
-
- if (searchText.trim().length() == 0) {
- if (this.savedInput != null && this.savedInput != this.treeViewer.getInput()) {
- this.treeViewer.setInput(this.savedInput);
- }
- return;
- }
-
- final List<EClass> selectedMetaclasses = findSelectedEClasses();
- if (selectedMetaclasses.isEmpty()) {
- return;
- }
-
- this.searchJob = new Job(Messages.EcoreBrowser_jobName_SearchInModelEditor) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
-
- final ResourceSet resourceSet = EcoreBrowser.this.fResourceSet;
- final EList<Resource> resources = resourceSet.getResources();
- if (resources.size() < 1) {
- return Status.OK_STATUS;
- }
-
- // the search results : will become the input of the tree viewer
- final SearchResults searchResults = new SearchResults(
- EcoreBrowser.this.browserConfiguration);
-
- InstancesForMetaclasses instancesForMetaclasses = EcoreBrowser.this.browserConfiguration
- .getInstancesForMetaclasses();
- for (EClass eClass : selectedMetaclasses) {
- ArrayList<EObject> elements = instancesForMetaclasses.getInstancesForMetaclass(
- eClass).getElements();
- for (EObject eObject : elements) {
- final ModelElementItem modelElementItem = new ModelElementItemEx(eObject,
- null, EcoreBrowser.this.browserConfiguration);
- final String objectText = modelElementItem.getName().toLowerCase();
- if (objectText.contains(searchText)) {
- searchResults.add(eObject);
- }
- // if the user canceled the search
- if (monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- }
- }
- }
-
- // do only the minimum amount of work in the UI thread
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- // do not try to restore selection
- EcoreBrowser.this.treeViewer.setSelection(null);
- EcoreBrowser.this.treeViewer.setInput(searchResults);
- }
- });
- return Status.OK_STATUS;
- }
- };
- this.searchJob.setUser(true);
- this.searchJob.setPriority(Job.LONG);
- this.searchJob.schedule();
- }
-
- /**
- * @return the {@link EClass}es corresponding to the metaclasses selected in
- * the metaclass list (empty list if none)
- */
- private List<EClass> findSelectedEClasses() {
-
- final ArrayList<EClass> selectedMetaclasses = new ArrayList<EClass>();
-
- final ISelection selection = this.metaclassViewer.getSelection();
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object element = iterator.next();
- if (element instanceof EClass) {
- final EClass eClass = (EClass) element;
- addMetaclassToSelection(eClass, selectedMetaclasses, this.browserConfiguration
- .getAppearanceConfiguration().isDisplayInstancesOfSubclasses());
- }
- }
- }
- return selectedMetaclasses;
- }
-
- /**
- * Adds the given metaclass to the given selection.
- *
- * @param addSubclasses
- * also adds subclasses
- */
- private void addMetaclassToSelection(final EClass eClass,
- final ArrayList<EClass> selectedMetaclasses, final boolean addSubclasses) {
- selectedMetaclasses.add(eClass);
- // add subclasses recursively
- if (addSubclasses) {
- InstancesForMetaclasses instancesForMetaclasses = this.browserConfiguration
- .getInstancesForMetaclasses();
- InstancesForMetaclass instancesForMetaclass = instancesForMetaclasses
- .getInstancesForMetaclass(eClass);
- if (instancesForMetaclass != null) {
- InstancesForMetaclass[] subclasses = instancesForMetaclass.getSubclasses();
- for (InstancesForMetaclass subclass : subclasses) {
- addMetaclassToSelection(subclass.getEClass(), selectedMetaclasses,
- addSubclasses);
- }
- } else {
- MoDiscoLogger.logError("Could not find subclasses of '" + eClass.getName() + "'", //$NON-NLS-1$ //$NON-NLS-2$
- MoDiscoBrowserPlugin.getPlugin());
- }
-
- }
- }
-
- /**
- * Listen to selection changes in the metaclass list viewer, and update the
- * tree viewer accordingly.
- */
- private final class MetaclassListViewerSelectionChangedListener implements
- ISelectionChangedListener {
-
- /** Memorize the tree selection for each metaclass */
- private final HashMap<EClass, ITreeSelection> selections = new HashMap<EClass, ITreeSelection>();
- /** The metaclass that was selected before the selection changed */
- private EClass lastSelectedMetaclass = null;
-
- /**
- * Get the selected entries corresponding to the given selection in the
- * metaclass viewer (may be empty)
- */
- private InstancesForMetaclass[] getEntriesForSelection(final ISelection selection) {
- final ArrayList<InstancesForMetaclass> instancesForMetaclasses = new ArrayList<InstancesForMetaclass>();
-
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- for (final Iterator<?> iterator = structuredSelection.iterator(); iterator
- .hasNext();) {
- final Object element = iterator.next();
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- instancesForMetaclasses.add(instancesForMetaclass);
- }
- }
- }
-
- return instancesForMetaclasses
- .toArray(new InstancesForMetaclass[instancesForMetaclasses.size()]);
- }
-
- /**
- * Updates the tree viewer when the selection changes in the metaclass
- * viewer. Keeps track of the tree selection for each metaclass, and
- * restores it when possible.
- */
- public void selectionChanged(final SelectionChangedEvent event) {
-
- // save the selection
- if (this.lastSelectedMetaclass != null) {
- this.selections.put(this.lastSelectedMetaclass,
- (ITreeSelection) EcoreBrowser.this.treeViewer.getSelection());
- }
-
- final ISelection metaclassSelection = event.getSelection();
- final InstancesForMetaclass[] entries = getEntriesForSelection(metaclassSelection);
-
- ITreeSelection savedSelection = null;
- Object input = null;
- if (entries.length > 0) {
- savedSelection = this.selections.get(entries[0].getEClass());
-
- final EClass[] selectedMetaclasses = new EClass[entries.length];
- int i = 0;
- for (final InstancesForMetaclass entry : entries) {
- selectedMetaclasses[i++] = entry.getEClass();
- }
-
- input = new MetaclassList(EcoreBrowser.this.browserConfiguration,
- selectedMetaclasses);
- this.lastSelectedMetaclass = entries[0].getEClass();
- } else {
- this.lastSelectedMetaclass = null;
- }
-
- try {
- // speedup and avoid flickering
- EcoreBrowser.this.treeViewer.getTree().setRedraw(false);
-
- if (EcoreBrowser.this.searchBox != null) {
- EcoreBrowser.this.searchBox.setText(""); //$NON-NLS-1$
- }
-
- // do not restore selection twice
- EcoreBrowser.this.treeViewer.setSelection(null);
-
- // set the list of model elements as the input of the treeview
- EcoreBrowser.this.treeViewer.setInput(input);
- EcoreBrowser.this.savedInput = input;
- EcoreBrowser.this.treeViewer.setSelection(savedSelection, true);
- } finally {
- EcoreBrowser.this.treeViewer.getTree().setRedraw(true);
- }
-
- markNavigationLocation();
- }
- }
-
- public void setShowEmptyLinks(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowEmptyLinks(value);
- internalRefreshTree();
- }
-
- public boolean isShowEmptyLinks() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowEmptyLinks();
- }
-
- public void setSortInstances(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setSortInstances(value);
- internalRefreshTree();
- }
-
- public boolean isSortInstances() {
- return this.browserConfiguration.getAppearanceConfiguration().isSortInstances();
- }
-
- public void setShowDerivedLinks(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowDerivedLinks(value);
- internalRefreshTree();
- }
-
- public boolean isShowDerivedLinks() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowDerivedLinks();
- }
-
- public void setShowFullQualifiedNames(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowFullQualifiedNames(value);
- internalRefreshTree();
- this.metaclassViewer.refresh();
- }
-
- public boolean isShowFullQualifiedNames() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowFullQualifiedNames();
- }
-
- public void setShowMultiplicity(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowMultiplicity(value);
- internalRefreshTree();
- }
-
- public boolean isShowMultiplicity() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowMultiplicity();
- }
-
- public void setShowOppositeLinks(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowOppositeLinks(value);
- internalRefreshTree();
- }
-
- public boolean isShowOppositeLinks() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowOppositeLinks();
- }
-
- public void setShowContainer(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowContainer(value);
- internalRefreshTree();
- }
-
- public boolean isShowContainer() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowContainer();
- }
-
- public void setSortLinks(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setSortLinks(value);
- internalRefreshTree();
- }
-
- public boolean isSortLinks() {
- return this.browserConfiguration.getAppearanceConfiguration().isSortLinks();
- }
-
- public void setSortLinksByType(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setSortLinksByType(value);
- internalRefreshTree();
- }
-
- public boolean isSortLinksByType() {
- return this.browserConfiguration.getAppearanceConfiguration().isSortLinksByType();
- }
-
- public void setShowAttributes(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowAttributes(value);
- internalRefreshTree();
- }
-
- public boolean isShowAttributes() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowAttributes();
- }
-
- public void setShowEmptyAttributes(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowEmptyAttributes(value);
- internalRefreshTree();
- }
-
- public boolean isShowEmptyAttributes() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowEmptyAttributes();
- }
-
- public void setFontSizeDelta(final int value) {
- this.browserConfiguration.getAppearanceConfiguration().setFontSizeDelta(value);
- setupPreferredFont();
- }
-
- public int getFontSizeDelta() {
- return this.browserConfiguration.getAppearanceConfiguration().getFontSizeDelta();
- }
-
- public void setShowOrdering(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowOrdering(value);
- internalRefreshTree();
- }
-
- public boolean isShowOrdering() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowOrdering();
- }
-
- public void setShowTypeOfLinks(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowTypeOfLinks(value);
- internalRefreshTree();
- }
-
- public boolean isShowTypeOfLinks() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowTypeOfLinks();
- }
-
- public void setShowElementIDs(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowElementIDs(value);
- internalRefreshTree();
- }
-
- public boolean isShowElementIDs() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowElementIDs();
- }
-
- public void setShowURI(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowURI(value);
- internalRefreshTree();
- }
-
- public boolean isShowURI() {
- return this.browserConfiguration.getAppearanceConfiguration().isShowURI();
- }
-
- public void showOnlyInstancesPanel() {
- this.sashForm.setSashWidth(0);
- this.sashForm.setWeights(new int[] { 0, 1 });
- }
-
- public void showOnlyTypesPanel() {
- this.sashForm.setSashWidth(0);
- this.sashForm.setWeights(new int[] { 1, 0 });
- }
-
- public void showBothPanels() {
- this.sashForm.setSashWidth(EcoreBrowser.SASH_WIDTH);
- this.sashForm.setWeights(new int[] { EcoreBrowser.LEFT_PANE_SASH_WEIGHT,
- EcoreBrowser.RIGHT_PANE_SASH_WEIGHT });
- }
-
- /** This is how the framework determines which interfaces we implement. */
- @SuppressWarnings("unchecked")
- @Override
- public Object getAdapter(final Class key) {
- if (key.equals(IPropertySheetPage.class)) {
- // Store the propertySheetPage to be able to call dispose() on it.
- if (this.propertySheetPage == null) {
- this.propertySheetPage = getPropertySheetPage();
- }
- return getPropertySheetPage();
- }
- return super.getAdapter(key);
- }
-
- /** This accesses a cached version of the property sheet page. */
- public IPropertySheetPage getPropertySheetPage() {
- if (this.propertySheetPage == null) {
- this.propertySheetPage = new ExtendedPropertySheetPage(this.editingDomain) {
- @Override
- public void setSelectionToViewer(final List<?> selection) {
- EcoreBrowser.this.setSelectionToViewer(selection);
- EcoreBrowser.this.setFocus();
- }
-
- @Override
- public void setActionBars(final IActionBars actionBars) {
- super.setActionBars(actionBars);
- getActionBarContributor().shareGlobalActions(this, actionBars);
- }
-
- @Override
- public void selectionChanged(final IWorkbenchPart part, final ISelection selection0) {
- ISelection selection = EcoreBrowser.this.getEditorSelection();
-
- boolean selectionNotified = false;
- if (selection instanceof IStructuredSelection) {
- if (((IStructuredSelection) selection).toArray().length == 1) {
- Object objSelected = ((IStructuredSelection) selection)
- .getFirstElement();
- if (objSelected instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) objSelected;
- super.selectionChanged(part, new StructuredSelection(
- modelElementItem.getEObject()));
- selectionNotified = true;
- } else if (objSelected instanceof AttributeItem) {
- super.selectionChanged(part, new StructuredSelection(
- ((AttributeItem) objSelected).getAttribute()));
- selectionNotified = true;
- } else if (objSelected instanceof LinkItem) {
- super.selectionChanged(part, new StructuredSelection(
- ((LinkItem) objSelected).getReference()));
- selectionNotified = true;
- }
- }
- }
- if (!selectionNotified) {
- super.selectionChanged(part, StructuredSelection.EMPTY);
- }
- }
- };
- if (this.propertySheetPage instanceof PropertySheetPage) {
- ((PropertySheetPage) this.propertySheetPage)
- .setPropertySourceProvider(new AdapterFactoryContentProvider(
- this.adapterFactoryWithRegistry) {
- @Override
- protected IPropertySource createPropertySource(final Object object,
- final IItemPropertySource itemPropertySource) {
- return new PropertySource(object, itemPropertySource) {
- @Override
- protected IPropertyDescriptor createPropertyDescriptor(
- final IItemPropertyDescriptor itemPropertyDescriptor) {
- return new PropertyDescriptor(this.object,
- itemPropertyDescriptor);
- }
- };
- }
- });
- }
- }
- return this.propertySheetPage;
- }
-
- @Override
- public boolean isDirty() {
- if (isReadOnly()) {
- return false;
- }
- return ((BasicCommandStack) this.editingDomain.getCommandStack()).isSaveNeeded();
- }
-
- /**
- * This is for implementing {@link org.eclipse.ui.IEditorPart} : saves the
- * model file.
- */
- @Override
- public void doSave(final IProgressMonitor progressMonitor) {
- if (isReadOnly()) {
- return;
- }
-
- // Save only resources that have actually changed.
- final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
- saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,
- Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
-
- // Do the work within an operation because this is a long running
- // activity that modifies the workbench.
- WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
- // This is the method that gets invoked when the operation runs.
- @Override
- public void execute(final IProgressMonitor monitor) {
- // Save the resources to the file system.
- boolean first = true;
- for (Resource resource : EcoreBrowser.this.editingDomain.getResourceSet()
- .getResources()) {
- // see Bug 311005 - UnknownServiceException when trying to
- // save a UML model
- synchronized (resource) {
- URI uri = resource.getURI();
- if ((first || !resource.getContents().isEmpty() || isPersisted(resource))
- && !EcoreBrowser.this.editingDomain.isReadOnly(resource)
- && uri != null && (uri.isPlatformResource() || uri.isFile())) {
- try {
- long timeStamp = resource.getTimeStamp();
- resource.save(saveOptions);
- if (resource.getTimeStamp() != timeStamp) {
- EcoreBrowser.this.savedResources.add(resource);
- }
- } catch (final Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- DialogUtils.openErrorDialog(getSite().getShell(), e,
- Messages.EcoreBrowser_errorSavingResource);
- EcoreBrowser.this.resourceToDiagnosticMap.put(resource,
- analyzeResourceProblems(resource, e));
- }
- first = false;
- }
- }
- }
- }
- };
-
- this.updateProblemIndication = false;
- try {
- // This runs the options, and shows progress.
- new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
-
- // Refresh the necessary state.
- ((BasicCommandStack) this.editingDomain.getCommandStack()).saveIsDone();
- firePropertyChange(IEditorPart.PROP_DIRTY);
- } catch (Exception exception) {
- // Something went wrong that shouldn't.
- MoDiscoBrowserPlugin.getPlugin().log(exception);
- }
- this.updateProblemIndication = true;
- updateProblemIndication();
- }
-
- @Override
- public void doSaveAs() {
- SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
- saveAsDialog.open();
- IPath path = saveAsDialog.getResult();
- if (path != null) {
- IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
- if (file != null) {
- doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true),
- new FileEditorInput(file));
- }
- }
- }
-
- protected void doSaveAs(final URI uri, final IEditorInput editorInput) {
- this.editingDomain.getResourceSet().getResources().get(0).setURI(uri);
- setInputWithNotify(editorInput);
- setPartName(editorInput.getName());
- IProgressMonitor progressMonitor;
- IStatusLineManager statusLineManager = getActionBars().getStatusLineManager();
- if (statusLineManager != null) {
- progressMonitor = statusLineManager.getProgressMonitor();
- } else {
- progressMonitor = new NullProgressMonitor();
- }
- doSave(progressMonitor);
- }
-
- @Override
- public boolean isSaveAsAllowed() {
- return !isReadOnly();
- }
-
- /**
- * This returns whether something has been persisted to the URI of the
- * specified resource. The implementation uses the URI converter from the
- * editor's resource set to try to open an input stream.
- */
- protected boolean isPersisted(final Resource resource) {
- boolean result = false;
- try {
- InputStream stream = this.editingDomain.getResourceSet().getURIConverter()
- .createInputStream(resource.getURI());
- if (stream != null) {
- result = true;
- stream.close();
- }
- } catch (IOException e) {
- result = false;
- }
- return result;
- }
-
- /**
- * This is called during startup to initialize the editor with its site and
- * input.
- */
- @Override
- public void init(final IEditorSite site, final IEditorInput editorInput) {
- // TODO: check input is of expected type
- try {
- setSite(site);
- setInputWithNotify(editorInput);
- setPartName(editorInput.getName());
- site.setSelectionProvider(this);
- site.getPage().addPartListener(this.partListener);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this.resourceChangeListener,
- IResourceChangeEvent.POST_CHANGE);
- } catch (final Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- }
-
- /** Focus the tree viewer when the editor is focused */
- @Override
- public void setFocus() {
- // Done in setFocus because we don't want the job to start until the
- // editor is visible. Otherwise it still hangs the UI.
- if (this.openModelJob == null) {
- this.openModelJob = new Job(Messages.EcoreBrowser_jobOpeningModelInMoDiscoBrowser) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- boolean result = backgroundOpenModel(monitor);
- EcoreBrowser.this.loaded = result;
- if (result) {
- return Status.OK_STATUS;
- }
- return Status.CANCEL_STATUS;
- }
- };
- this.openModelJob.setPriority(Job.LONG);
- getProgressService().schedule(this.openModelJob);
- } else if (this.treeViewer != null) {
- this.treeViewer.getTree().setFocus();
- }
- }
-
- /** This implements {@link org.eclipse.jface.viewers.ISelectionProvider}. */
- public void addSelectionChangedListener(final ISelectionChangedListener listener) {
- this.selectionChangedListeners.add(listener);
- }
-
- /** This implements {@link org.eclipse.jface.viewers.ISelectionProvider}. */
- public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
- this.selectionChangedListeners.remove(listener);
- }
-
- /**
- * Returns the "unwrapped" selection of the editor, with Ecore elements
- * instead of the proxies used internally
- */
- public ISelection getSelection() {
- return BrowserUtils.unwrapSelection(this.editorSelection);
- }
-
- /** @return the "real" selection, with proxy objects (ModelElementItem, etc.) */
- public ISelection getEditorSelection() {
- return this.editorSelection;
- }
-
- /**
- * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to
- * set this editor's overall selection. Calling this result will notify the
- * listeners.
- */
- public void setSelection(final ISelection selection) {
- this.editorSelection = selection;
-
- for (final ISelectionChangedListener listener : this.selectionChangedListeners) {
- // depending on the listener type, unwrap the selection
- if (listener instanceof IBrowserSelectionChangedListener) {
- // expose the proxy objects
- listener.selectionChanged(new SelectionChangedEvent(this, selection));
- } else {
- // expose the underlying Ecore elements
- listener.selectionChanged(new SelectionChangedEvent(this, BrowserUtils
- .unwrapSelection(selection)));
- }
- }
- setStatusLineMessage(selection);
- }
-
- /** Connect the given viewer to the editor's selection */
- private void hookViewerToSelection(final Viewer viewer) {
- if (viewer == null) {
- return;
- }
-
- if (this.selectionChangedListener == null) {
- // Create the listener on demand
- this.selectionChangedListener = new ISelectionChangedListener() {
- // This just notifies those things that are affected by the
- // selection
- public void selectionChanged(final SelectionChangedEvent selectionChangedEvent) {
- setSelection(selectionChangedEvent.getSelection());
- }
- };
- }
-
- viewer.addSelectionChangedListener(this.selectionChangedListener);
-
- // Set the editor's selection based on the viewer's selection
- setSelection(viewer.getSelection());
- }
-
- /** Set the status line message depending on the given selection */
- public void setStatusLineMessage(final ISelection selection) {
- // TODO: maybe display more useful information?
- final IStatusLineManager statusLineManager = getActionBars().getStatusLineManager();
-
- if (statusLineManager != null) {
- if (selection instanceof IStructuredSelection) {
- final Collection<?> collection = ((IStructuredSelection) selection).toList();
- switch (collection.size()) {
- case 0:
- statusLineManager.setMessage(Messages.EcoreBrowser_noObjectSelected);
- break;
- case 1:
- final Object object = collection.iterator().next();
- if (object instanceof ITreeElement) {
- final ITreeElement treeElement = (ITreeElement) object;
- statusLineManager.setMessage(NLS.bind(
- Messages.EcoreBrowser_singleObjectSelected, treeElement.getText()));
- }
- break;
- default:
- statusLineManager.setMessage(NLS.bind(
- Messages.EcoreBrowser_multiObjectSelected,
- Integer.toString(collection.size())));
- break;
- }
- } else {
- statusLineManager.setMessage(""); //$NON-NLS-1$
- }
- }
- }
-
- /**
- * This implements {@link org.eclipse.jface.action.IMenuListener} to help
- * fill the context menus with contributions from the Edit menu.
- */
- public void menuAboutToShow(final IMenuManager menuManager) {
- ((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
- }
-
- public BrowserActionBarContributor getActionBarContributor() {
- return (BrowserActionBarContributor) getEditorSite().getActionBarContributor();
- }
-
- public IActionBars getActionBars() {
- return getActionBarContributor().getActionBars();
- }
-
- /** Clean up */
- @Override
- public void dispose() {
- stopOpeningModel();
-
- this.disposing = true;
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(this.resourceChangeListener);
- getSite().getPage().removePartListener(this.partListener);
-
- this.adapterFactoryWithRegistry.dispose();
- this.sashForm.dispose();
-
- if (getActionBarContributor().getActiveEditor() == this) {
- getActionBarContributor().setActiveEditor(null);
- }
-
- if (this.propertySheetPage != null) {
- this.propertySheetPage.dispose();
- }
-
- if (this.treeViewer != null && this.selectionChangedListener != null) {
- this.treeViewer.removeSelectionChangedListener(this.selectionChangedListener);
- this.selectionChangedListener = null;
- }
-
- // dispose fonts
- this.browserConfiguration.getAppearanceConfiguration().setCustomFont(null);
- this.browserConfiguration.getAppearanceConfiguration().setCustomItalicFont(null);
-
- // avoid leaking editor
- this.browserConfiguration.dispose();
-
- JFaceResources.getFontRegistry().removeListener(this.fontChangeListener);
-
- this.customTreePainter.dispose();
- // dispose the customization engine, which removes listeners too
- this.browserConfiguration.getAppearanceConfiguration().getCustomizationEngine().dispose();
- this.fCustomizationEngineChangeListener = null;
-
- FacetSetCatalog.getSingleton().removeChangeListener(this.fFacetsChangeListener);
-
- this.fFormToolkit.dispose();
-
- // avoid memory leak for EMF registry resources since a new
- // adapter is created each time the same resource is opened
- // in a different editor
- Set<Resource> browsedResources = this.browserConfiguration.getBrowsedResources();
- if (browsedResources != null) {
- for (Resource resource : browsedResources) {
- ListIterator<Adapter> listIterator = resource.eAdapters().listIterator();
- while (listIterator.hasNext()) {
- Adapter adapter = listIterator.next();
- if (adapter instanceof MetaclassInstancesAdapterWithFacet) {
- MetaclassInstancesAdapterWithFacet adapterWithFacet = (MetaclassInstancesAdapterWithFacet) adapter;
- if (adapterWithFacet.getFacetContext() == getBrowserConfiguration()
- .getAppearanceConfiguration().getFacetContext()) {
- listIterator.remove();
- }
- }
- }
- }
- }
- // let the FacetContext be GCed
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(null);
-
- // if (!isReadOnly()) {
- // // unload all resources
- // final EList<Resource> resources = this.fResourceSet.getResources();
- // final Job cleanupJob = new
- // Job(Messages.EcoreBrowser_jobName_UnloadResources) {
- // @Override
- // protected IStatus run(final IProgressMonitor monitor) {
- // for (final Resource resource : resources) {
- // resource.unload();
- // }
- // return Status.OK_STATUS;
- // }
- // };
- // cleanupJob.setPriority(Job.DECORATE);
- // cleanupJob.setSystem(true);
- // cleanupJob.schedule();
- // }
-
- super.dispose();
- }
-
- @SuppressWarnings("deprecation")
- private void stopOpeningModel() {
- if (this.openModelJob != null && this.openModelJob.getState() == Job.RUNNING) {
- this.openModelJob.cancel();
- Thread thread = this.openModelJob.getThread();
- if (thread != null) {
- thread.stop();
- }
- }
- }
-
- /** Open the selected element in the list of elements of the same metaclass */
- public void browse() {
- final ISelection selection = getEditorSelection();
- if (selection instanceof ITreeSelection) {
- final ITreeSelection treeSelection = (ITreeSelection) selection;
- final Object selectedElement = treeSelection.getFirstElement();
- if (selectedElement instanceof ModelElementItem) {
- final ModelElementItem modelElementItem = (ModelElementItem) selectedElement;
- browseTo(modelElementItem);
- }
- }
- }
-
- /** Open the given element in the list of elements of the same metaclass */
- public void browseTo(final ModelElementItem modelElementItem) {
- final EObject modelElement = modelElementItem.getEObject();
- browseTo(modelElement);
- }
-
- /** Open the given element in the list of elements of the same metaclass */
- public void browseTo(final EObject modelElement) {
- browseTo(modelElement, modelElement.eClass());
- }
-
- /**
- * Open the given element in the list of elements of the given metaclass
- * (which can be a Facet).
- */
- public void browseTo(final EObject modelElement, final EClass eClass) {
- markNavigationLocation();
- // Select the metaclass in the metaclass list viewer
- this.metaclassViewer.selectMetaclass(eClass);
-
- TreePath treePath = findTreePathForElement(modelElement);
- if (treePath != null) {
- // deselect any previously selected elements
- this.treeViewer.setSelection(null);
- this.treeViewer.setSelection(new TreeSelection(treePath), true);
- if (this.treeViewer.getSelection().isEmpty()) {
- delayedBrowseTo(modelElement);
- } else {
- markNavigationLocation();
- }
- } else {
- delayedBrowseTo(modelElement);
- }
- }
-
- /**
- * delayed because the browser doesn't always update synchronously
- * (temporary "loading..." nodes)
- */
- private void delayedBrowseTo(final EObject modelElement) {
- Listener refreshListener = new Listener() {
- public void handleEvent(final Event event) {
- removeRefreshListener(this);
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- TreePath treePath2 = findTreePathForElement(modelElement);
- EcoreBrowser.this.treeViewer.setSelection(null);
- EcoreBrowser.this.treeViewer.setSelection(new TreeSelection(treePath2),
- true);
- markNavigationLocation();
- }
- });
- }
- };
- addRefreshListener(refreshListener);
- }
-
- public boolean browseToByURI(final String uriFragment) {
- EObject eObject = EMFUtil.findElementByURI(uriFragment, this.fResourceSet);
- if (eObject != null) {
- browseTo(eObject);
- return true;
- }
- return false;
- }
-
- /**
- * Finds the path of the given element in the tree viewer. The element is
- * looked for at the root and under BigListItemProviders in the case the
- * elements are split.
- *
- * @return the path or <code>null</code> if the element was not found
- */
- private TreePath findTreePathForElement(final EObject eObject) {
- final Object input = this.treeViewer.getInput();
- if (input instanceof MetaclassList) {
- final MetaclassList metaclassListItemProvider = (MetaclassList) input;
- final Collection<?> elements = metaclassListItemProvider.getElements();
- for (final Object element : elements) {
- // if the elements are split
- if (element instanceof BigListItem) {
- final BigListItem bigListItemProvider = (BigListItem) element;
- final Collection<?> subElements = bigListItemProvider.getChildren();
- for (final Object subElement : subElements) {
- if (subElement instanceof ModelElementItem) {
- final ModelElementItem other = (ModelElementItem) subElement;
- if (other.getEObject().equals(eObject)) {
- return new TreePath(new Object[] { subElement });
- }
- }
- }
- }
-
- if (element instanceof ModelElementItem) {
- final ModelElementItem other = (ModelElementItem) element;
- if (other.getEObject().equals(eObject)) {
- return new TreePath(new Object[] { element });
- }
- }
- }
- }
- return null;
- }
-
- /** Implements {@link INavigationLocationProvider} */
- public INavigationLocation createEmptyNavigationLocation() {
- return new BrowserNavigationLocation(this);
- }
-
- /**
- * Implements {@link INavigationLocationProvider}. Create a location that
- * can be navigated back to, using the "back" button
- */
- public INavigationLocation createNavigationLocation() {
- // navigation to the first element of the selection
- final EClass firstSelectedMetaclass = this.metaclassViewer.getFirstSelectedMetaclass();
- return new BrowserNavigationLocation(this, firstSelectedMetaclass,
- (ITreeSelection) this.treeViewer.getSelection());
- }
-
- /** Mark a location that can be navigated back to, using the "back" button */
- protected void markNavigationLocation() {
- getSite().getPage().getNavigationHistory().markLocation(this);
- }
-
- /**
- * Restore a location (used for implementing history).
- *
- * @param eClass
- * the metaclass viewer's selection
- * @param selection
- * the tree viewer's selection
- */
- public void restoreLocation(final EClass eClass, final ITreeSelection selection) {
- this.metaclassViewer.selectMetaclass(eClass);
- this.treeViewer.setSelection(selection);
- }
-
- private final List<Listener> refreshListeners = new ArrayList<Listener>();
-
- public void addRefreshListener(final Listener refreshListener) {
- if (!this.refreshListeners.contains(refreshListener)) {
- this.refreshListeners.add(refreshListener);
- }
- }
-
- public void removeRefreshListener(final Listener refreshListener) {
- this.refreshListeners.remove(refreshListener);
- }
-
- public void notifyRefresh() {
- for (Listener listener : new ArrayList<Listener>(this.refreshListeners)) {
- listener.handleEvent(new Event());
- }
- }
-
- /**
- * Refresh the editor
- *
- * @param metaclassViewerToo
- * whether the metaclass view must be refreshed too, or only the
- * tree viewer
- */
- public void refreshDelayed(final boolean metaclassViewerToo) {
- if (this.disposing) {
- return;
- }
- if (this.refreshJob == null) {
- this.refreshJob = new Job(Messages.EcoreBrowser_refreshingModelViewers) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- internalRefreshTree();
- if (metaclassViewerToo) {
- getMetaclassViewer().refresh();
- }
- notifyRefresh();
- }
- });
- return Status.OK_STATUS;
- }
- };
- } else {
- /*
- * If refreshTreeDelayed is called again before the job delay
- * passed, then cancel the job and re-schedule a new one.
- */
- this.refreshJob.cancel();
- }
- // we don't want to keep refreshing while computing children,
- // because it slows down the computation
- if (this.fContentProvider.isComputing()) {
- final int delay = 100;
- this.refreshJob.setPriority(Job.DECORATE);
- this.refreshJob.schedule(delay);
- } else {
- this.refreshJob.setPriority(Job.INTERACTIVE);
- this.refreshJob.schedule();
- }
- }
-
- public void clearInstancesCache() {
- AppearanceConfiguration appearanceConfiguration = this.browserConfiguration
- .getAppearanceConfiguration();
- MetaclassInstancesAdapterFactoryWithFacet.getInstance().setFacetContext(
- appearanceConfiguration.getFacetContext());
- Set<Resource> browsedResources = this.browserConfiguration.getBrowsedResources();
- if (browsedResources != null) {
- for (Resource resource : browsedResources) {
- MetaclassInstances instances = (MetaclassInstances) MetaclassInstancesAdapterFactoryWithFacet
- .getInstance().adapt(resource, MetaclassInstances.class);
- instances.clearCache();
- }
- }
- }
-
- private void internalRefreshTree() {
- if (!this.treeViewer.getTree().isDisposed()) {
- try {
- this.treeViewer.getTree().setRedraw(false);
- this.treeViewer.refresh();
- } finally {
- this.treeViewer.getTree().setRedraw(true);
- }
- }
- }
-
- public BrowserConfiguration getBrowserConfiguration() {
- return this.browserConfiguration;
- }
-
- private void openPropertiesView() {
- try {
- getEditorSite().getPage().showView(EcoreBrowser.PROPERTY_VIEW_ID);
- } catch (final PartInitException e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- public ResourceSet getResourceSet() {
- return this.fResourceSet;
- // return getEditingDomain().getResourceSet();
- }
-
- public void loadCustomizations(final Collection<MetamodelView> customizationsToLoad) {
- final CustomizationEngine customizationEngine = this.browserConfiguration
- .getAppearanceConfiguration().getCustomizationEngine();
-
- if (this.fCustomizationEngineChangeListener == null) {
- this.fCustomizationEngineChangeListener = new ChangeListener() {
- public void changed() {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- refreshDelayed(true);
- }
- });
- }
- };
- customizationEngine.addChangeListener(this.fCustomizationEngineChangeListener);
- }
-
- customizationEngine.clear();
- for (final MetamodelView customizationToLoad : customizationsToLoad) {
- customizationEngine.registerCustomization(customizationToLoad);
- }
- customizationEngine.loadCustomizations();
- }
-
- private void loadDefaultCustomizations() {
- Collection<MetamodelView> customizations = CustomizationsCatalog.filterForMetamodel(
- CustomizationsCatalog.getInstance().getRegistryDefaultCustomizations(),
- getReferencedEPackages());
- if (customizations.size() > 0) {
- loadCustomizations(customizations);
- }
- }
-
- /** used by unit tests */
- protected TreeToolBar getInstancesToolBar() {
- return this.instancesToolBar;
- }
-
- protected void reloadOnFacetChange() {
- if (this.fFacetsChangeListener == null) {
- this.fFacetsChangeListener = new ModiscoCatalogChangeListener() {
- private void changed() {
- if (!EcoreBrowser.this.loaded) {
- return;
- }
- Job reloadFacetsJob = new Job(Messages.EcoreBrowser_ReloadingFacets) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- // reloading Facets by name, since the elements are
- // different after a FacetSet model reload
- List<String> facetsToReload = new ArrayList<String>();
- Collection<Facet> loadedFacets = getBrowserConfiguration()
- .getAppearanceConfiguration().getLoadedFacets();
- for (Facet facet : loadedFacets) {
- FacetSet facetSet = facet.getFacetSet();
- facetsToReload.add(facetSet.getName() + "#" + facet.getName()); //$NON-NLS-1$
- }
- getBrowserConfiguration().getAppearanceConfiguration().clearFacets();
-
- Collection<FacetSet> allFacetSets = FacetSetCatalog.getSingleton()
- .getAllFacetSets();
-
- for (FacetSet facetSet : allFacetSets) {
- EList<Facet> facets = facetSet.getFacets();
- for (Facet facet : facets) {
- for (String fullname : facetsToReload) {
- if (fullname.equals(facetSet.getName() + "#" //$NON-NLS-1$
- + facet.getName())) {
- getBrowserConfiguration().getAppearanceConfiguration()
- .loadFacet(facet);
- break;
- }
- }
- }
- }
- // for modified facets
- getBrowserConfiguration().getInstancesForMetaclasses()
- .buildDerivationTree();
- return Status.OK_STATUS;
- }
- };
- reloadFacetsJob.setPriority(Job.DECORATE);
- reloadFacetsJob.schedule();
- }
-
- public void removed(final IFile file) {
- changed();
- }
-
- public void changed(final EObject eObject, final IFile file) {
- changed();
- }
-
- public void added(final EObject eObject, final IFile file) {
- changed();
- }
- };
- FacetSetCatalog.getSingleton().addChangeListener(this.fFacetsChangeListener);
- }
- }
-
- public void modelChanged() {
- getBrowserConfiguration().getAppearanceConfiguration().touch();
- refreshDelayed(true);
- }
-
- /**
- * Handles activation of the editor or it's associated views.
- */
- protected void handleActivate() {
- // Recompute the read only state.
- if (this.editingDomain.getResourceToReadOnlyMap() != null) {
- this.editingDomain.getResourceToReadOnlyMap().clear();
-
- // Refresh any actions that may become enabled or disabled.
- setSelection(getEditorSelection());
- }
-
- if (!this.removedResources.isEmpty()) {
- if (handleDirtyConflict()) {
- getSite().getPage().closeEditor(EcoreBrowser.this, false);
- } else {
- this.removedResources.clear();
- this.changedResources.clear();
- this.savedResources.clear();
- }
- } else if (!this.changedResources.isEmpty()) {
- this.changedResources.removeAll(this.savedResources);
- handleChangedResources();
- this.changedResources.clear();
- this.savedResources.clear();
- }
- }
-
- /**
- * Shows a dialog that asks if conflicting changes should be discarded.
- */
- protected boolean handleDirtyConflict() {
- return MessageDialog.openQuestion(getSite().getShell(), Messages.UI_FileConflict_label,
- Messages.WARN_FileConflict);
- }
-
- /**
- * Handles what to do with changed resources on activation.
- */
- protected void handleChangedResources() {
- if (!this.changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
- if (isDirty()) {
- this.changedResources.addAll(this.editingDomain.getResourceSet().getResources());
- }
- this.editingDomain.getCommandStack().flush();
-
- this.updateProblemIndication = false;
- for (Resource resource : this.changedResources) {
- if (resource.isLoaded()) {
- resource.unload();
- try {
- resource.load(Collections.EMPTY_MAP);
- } catch (IOException e) {
- final URI uri = resource.getURI();
- final String uristr = uri.toString();
- final String logMsg = String.format(
- "The MoDisco browser failed to reload the resource %s.", //$NON-NLS-1$
- uristr);
- Logger.logError(
- e, logMsg , MoDiscoBrowserPlugin.getPlugin());
- final String userMsg = String.format(
- "%s, cf. %s", //$NON-NLS-1$
- Messages.EcoreBrowser_errorLoadingResource,
- uristr);
- DialogUtils.openErrorDialog(getSite().getShell(), e,
- userMsg);
- if (!this.resourceToDiagnosticMap.containsKey(resource)) {
- this.resourceToDiagnosticMap.put(resource,
- analyzeResourceProblems(resource, e));
- }
- }
- }
- }
-
- if (AdapterFactoryEditingDomain.isStale(this.editorSelection)) {
- setSelection(StructuredSelection.EMPTY);
- }
-
- this.updateProblemIndication = true;
- updateProblemIndication();
- }
- }
-
- /**
- * Updates the problems indication with the information described in the
- * specified diagnostic.
- */
- protected void updateProblemIndication() {
- if (this.updateProblemIndication) {
- BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
- MoDiscoBrowserPlugin.PLUGIN_ID, 0, null,
- new Object[] { this.editingDomain.getResourceSet() });
- int nWarnings = 0;
- int nErrors = 0;
- int nInfo = 0;
-
- for (Diagnostic childDiagnostic : this.resourceToDiagnosticMap.values()) {
- if (childDiagnostic.getSeverity() != Diagnostic.OK) {
- diagnostic.add(childDiagnostic);
- if (childDiagnostic.getSeverity() == Diagnostic.WARNING) {
- nWarnings++;
- } else if (childDiagnostic.getSeverity() == Diagnostic.ERROR) {
- nErrors++;
- } else if (childDiagnostic.getSeverity() == Diagnostic.INFO) {
- nInfo++;
- }
- }
- }
-
- StringBuilder builder = new StringBuilder();
-
- if (nErrors == 1) {
- builder.append(NLS.bind(Messages.EcoreBrowser_error, nErrors));
- } else if (nErrors > 1) {
- builder.append(NLS.bind(Messages.EcoreBrowser_errors, nErrors));
- }
-
- if (nWarnings == 1) {
- if (builder.length() > 0) {
- builder.append(Messages.EcoreBrowser_separator);
- }
- builder.append(NLS.bind(Messages.EcoreBrowser_warning, nWarnings));
- } else if (nWarnings > 1) {
- if (builder.length() > 0) {
- builder.append(Messages.EcoreBrowser_separator);
- }
- builder.append(NLS.bind(Messages.EcoreBrowser_warnings, nWarnings));
- }
-
- if (nInfo == 1) {
- if (builder.length() > 0) {
- builder.append(Messages.EcoreBrowser_separator);
- }
- builder.append(NLS.bind(Messages.EcoreBrowser_info, nInfo));
- } else if (nInfo > 1) {
- if (builder.length() > 0) {
- builder.append(Messages.EcoreBrowser_separator);
- }
- builder.append(NLS.bind(Messages.EcoreBrowser_infos, nInfo));
- }
-
- if (!this.errorsButton.isDisposed()) {
- if (builder.length() > 0) {
- this.errorsButton.setText(builder.toString());
- this.errorsButton.setVisible(true);
- } else {
- this.errorsButton.setVisible(false);
- }
-
- final GridData errorsButtonGridData = new GridData();
- if (this.errorsButton.isVisible()) {
- this.errorsButton.setSize(this.errorsButton.computeSize(SWT.DEFAULT,
- SWT.DEFAULT));
- errorsButtonGridData.exclude = false;
- } else {
- errorsButtonGridData.exclude = true;
- }
- this.errorsButton.setLayoutData(errorsButtonGridData);
- this.errorsButton.getParent().layout();
- }
-
- this.fDiagnostic = diagnostic;
-
- if (this.markerHelper.hasMarkers(this.editingDomain.getResourceSet())) {
- this.markerHelper.deleteMarkers(this.editingDomain.getResourceSet());
- if (diagnostic.getSeverity() != Diagnostic.OK) {
- try {
- this.markerHelper.createMarkers(diagnostic);
- } catch (CoreException exception) {
- MoDiscoBrowserPlugin.getPlugin().log(exception);
- }
- }
- }
- }
- }
-
- /**
- * Returns a diagnostic describing the errors and warnings listed in the
- * resource and the specified exception (if any).
- */
- public Diagnostic analyzeResourceProblems(final Resource resource, final Exception exception) {
- if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
- Object errorData;
- if (exception == null) {
- errorData = resource;
- } else {
- errorData = exception;
- }
- BasicDiagnostic basicDiagnostic = new BasicDiagnostic(Diagnostic.ERROR,
- MoDiscoBrowserPlugin.PLUGIN_ID, 0, NLS.bind(Messages.UI_ErrorFile_message,
- resource.getURI()), new Object[] { errorData });
- basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
- return basicDiagnostic;
- } else if (exception != null) {
- return new BasicDiagnostic(Diagnostic.ERROR, MoDiscoBrowserPlugin.PLUGIN_ID, 0,
- NLS.bind(Messages.UI_ErrorFile_message, resource.getURI()),
- new Object[] { exception });
- } else {
- return Diagnostic.OK_INSTANCE;
- }
- }
-
- class BrowserAdapterFactory extends ComposedAdapterFactory implements IEditingDomainProvider {
- public BrowserAdapterFactory(final ComposedAdapterFactory.Descriptor.Registry registry) {
- super(registry);
- }
-
- public EditingDomain getEditingDomain() {
- return EcoreBrowser.this.getEditingDomain();
- }
- }
-
- /**
- * This sets up the editing domain for the model editor
- */
- protected void initializeEditingDomain() {
- if (this.fResourceSet == null) {
- initializeEditingDomain(new ResourceSetImpl());
- }
- }
-
- protected void initializeEditingDomain(final ResourceSet resourceSet) {
- // Create an adapter factory that yields item providers.
- this.adapterFactoryWithRegistry = new BrowserAdapterFactory(
- ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
- this.adapterFactoryWithRegistry
- .addAdapterFactory(new ResourceItemProviderAdapterFactory());
- this.adapterFactoryWithRegistry
- .addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
- final CommandStack commandStack = createCommandStack();
- // Create the editing domain with a special command stack.
- final BrowserEditingDomain newEditingDomain = new BrowserEditingDomain(
- this.adapterFactoryWithRegistry, commandStack, resourceSet, this);
- setEditingDomain(newEditingDomain);
- }
-
- private CommandStack createCommandStack() {
- // Create the command stack that will notify this editor as commands
- // are executed.
- CommandStack commandStack;
- if (isReadOnly()) {
- commandStack = new ReadOnlyCommandStack();
- } else {
- commandStack = new BasicCommandStack();
- }
- commandStack.addCommandStackListener(new CommandStackListener() {
- public void commandStackChanged(final EventObject event) {
- getParentComposite().getDisplay().asyncExec(new Runnable() {
- public void run() {
- firePropertyChange(IEditorPart.PROP_DIRTY);
- // Try to select the affected objects.
- final Command mostRecentCommand = ((CommandStack) event.getSource())
- .getMostRecentCommand();
- if (mostRecentCommand != null) {
- // asyncExec is to make it happen after the
- // refresh
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- try {
- // avoid the view jumping around as
- // the selection changes
- // several times
- EcoreBrowser.this.treeViewer.getTree().setRedraw(false);
- selectAffectedElements(mostRecentCommand);
- } finally {
- EcoreBrowser.this.treeViewer.getTree().setRedraw(true);
- }
- }
- });
- }
- IPropertySheetPage page = EcoreBrowser.this.getPropertySheetPage();
- if (page != null && page.getControl() != null
- && !page.getControl().isDisposed()) {
- if (page instanceof PropertySheetPage) {
- PropertySheetPage propertyPage = (PropertySheetPage) page;
- propertyPage.refresh();
- } else if (page instanceof TabbedPropertySheetPage) {
- TabbedPropertySheetPage tabbedPropertyPage = (TabbedPropertySheetPage) page;
- if (tabbedPropertyPage.getCurrentTab() != null) {
- tabbedPropertyPage.refresh();
- }
- }
- }
- }
- });
- }
- });
- return commandStack;
- }
-
- /** added for integration into Papyrus */
- protected void setEditingDomain(final AdapterFactoryEditingDomain editingDomain) {
- this.editingDomain = editingDomain;
- }
-
- /** This is here for the listener to be able to call it. */
- @Override
- protected void firePropertyChange(final int action) {
- super.firePropertyChange(action);
- }
-
- /**
- * Implements {@link IGotoMarker}. Select the EObject corresponding to the
- * given marker
- */
- public void gotoMarker(final IMarker marker) {
- try {
- if (marker.getType().equals(EValidator.MARKER)) {
- String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
- if (uriAttribute != null) {
- URI uri = URI.createURI(uriAttribute);
- EObject eObject = this.fResourceSet.getEObject(uri, true);
- if (eObject != null) {
- browseTo(eObject);
- }
- }
- }
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- }
-
- public Composite getParentComposite() {
- return this.parentComposite;
- }
-
- public EditingDomain getEditingDomain() {
- return this.editingDomain;
- }
-
- public Collection<Resource> getSavedResources() {
- return this.savedResources;
- }
-
- public Collection<Resource> getChangedResources() {
- return this.changedResources;
- }
-
- public Collection<Resource> getRemovedResources() {
- return this.removedResources;
- }
-
- /**
- * If <code>true</code>, prevent modification or save. For example, if the
- * resource being viewed comes from the package registry, it must not be
- * saved.
- */
- public boolean isReadOnly() {
- return !(getEditorInput() instanceof FileEditorInput);
- }
-
- public TreeViewer getTreeViewer() {
- return this.treeViewer;
- }
-
- public void setStyleSashForm(final int styleSashForm) {
- this.styleSashForm = styleSashForm;
- }
-
- protected void selectAffectedElements(final Command command) {
- if (command instanceof DragAndDropOnLinkCommand) {
- DragAndDropOnLinkCommand dragAndDropOnLinkCommand = (DragAndDropOnLinkCommand) command;
- Command dropCommand = dragAndDropOnLinkCommand.getDropCommand();
- selectAffectedElements(dropCommand, null, dragAndDropOnLinkCommand.getLinkItem());
- } else if (command instanceof DragAndDropOnModelElementCommand) {
- DragAndDropOnModelElementCommand dragAndDropOnModelElementCommand = (DragAndDropOnModelElementCommand) command;
- Command dropCommand = dragAndDropOnModelElementCommand.getDropCommand();
- selectAffectedElements(dropCommand,
- dragAndDropOnModelElementCommand.getModelElementItem(), null);
- } else if (this.editingDomain instanceof BrowserEditingDomain) {
- BrowserEditingDomain browserEditingDomain = (BrowserEditingDomain) this.editingDomain;
- Object selectedElementForCommand = browserEditingDomain
- .getEditorSelectionForCommand(command);
- if (selectedElementForCommand instanceof ModelElementItem) {
- ModelElementItem selectedModelElementItem = (ModelElementItem) selectedElementForCommand;
- selectAffectedElements(command, selectedModelElementItem, null);
- } else if (selectedElementForCommand instanceof LinkItem) {
- LinkItem linkItem = (LinkItem) selectedElementForCommand;
- selectAffectedElements(command, (ModelElementItem) linkItem.getTreeParent(),
- linkItem);
- }
- }
- }
-
- private void selectAffectedElements(final Command command,
- final ModelElementItem contextModelElementItem, final LinkItem contextLinkItem) {
- if (command instanceof AddCommand) {
- AddCommand addCommand = (AddCommand) command;
- if (contextLinkItem != null) {
- boolean result = selectElements(contextLinkItem, addCommand.getCollection());
- if (!result) {
- setSelection(Collections.singletonList(contextLinkItem), true);
- this.treeViewer.expandToLevel(contextLinkItem, 1);
- }
- } else if (contextModelElementItem != null) {
- selectElements(contextModelElementItem, addCommand.getFeature(),
- addCommand.getCollection());
- } else {
- selectElements(addCommand.getOwner(), addCommand.getFeature(),
- addCommand.getCollection());
- }
- } else if (command instanceof SetCommand) {
- SetCommand setCommand = (SetCommand) command;
- if (contextModelElementItem != null) {
- boolean result = selectElements(contextModelElementItem, setCommand.getFeature(),
- Collections.singleton(setCommand.getValue()));
- if (!result) {
- ITreeElement treeParent = contextModelElementItem.getTreeParent();
- setSelection(Collections.singletonList(treeParent), true);
- this.treeViewer.expandToLevel(treeParent, 1);
- }
- } else {
- selectElements(setCommand.getOwner(), setCommand.getFeature(),
- Collections.singleton(setCommand.getValue()));
- }
- } else if (command instanceof CreateChildCommand) {
- CreateChildCommand createChildCommand = (CreateChildCommand) command;
- Command command2 = createChildCommand.getCommand();
- selectAffectedElements(command2, contextModelElementItem, contextLinkItem);
- } else if (command instanceof DeleteCommand) {
- DeleteCommand deleteCommand = (DeleteCommand) command;
- List<Command> commandList = deleteCommand.getCommandList();
- if (commandList.size() > 0) {
- selectAffectedElements(commandList.get(0), contextModelElementItem, contextLinkItem);
- }
- } else if (command instanceof RemoveCommand) {
- RemoveCommand removeCommand = (RemoveCommand) command;
- LinkItem linkItem = null;
- if (contextModelElementItem != null) {
- ITreeElement parent = contextModelElementItem.getTreeParent();
- if (parent instanceof LinkItem) {
- linkItem = (LinkItem) parent;
- } else if (parent instanceof ModelElementItem) {
- // ↑ possible with "collapse" customization
- ModelElementItem modelElementItem = (ModelElementItem) parent;
- setSelection(Collections.singletonList(modelElementItem), true);
- return;
- }
- }
- if (linkItem == null) {
- browseTo(removeCommand.getOwner());
- ModelElementItem modelElementItem = getSelectedModelElementItem();
- linkItem = getLink(modelElementItem, removeCommand.getFeature());
- }
- if (linkItem != null) {
- this.treeViewer.expandToLevel(linkItem, 1);
- setSelection(Collections.singletonList(linkItem), true);
- }
- } else if (command instanceof CompoundCommand) {
- CompoundCommand compoundCommand = (CompoundCommand) command;
- List<Command> commandList = compoundCommand.getCommandList();
- if (commandList.size() > 0) {
- selectAffectedElements(commandList.get(commandList.size() - 1),
- contextModelElementItem, contextLinkItem);
- }
- } else if (command instanceof CommandWrapper) {
- CommandWrapper commandWrapper = (CommandWrapper) command;
- selectAffectedElements(commandWrapper.getCommand(), contextModelElementItem,
- contextLinkItem);
- }
-
- // PasteFromClipboardCommand : deliberately not handled, to let the user
- // paste multiple times, without having to reselect the parent element
- // each time
- }
-
- protected void selectElements(final EObject owner, final EStructuralFeature feature,
- final Collection<?> collection) {
- // TreePath treePath = findTreePathForElement(owner);
- // Object lastSegment = treePath.getLastSegment();
- browseTo(owner);
- ModelElementItem modelElementItem = getSelectedModelElementItem();
- selectElements(modelElementItem, feature, collection);
- }
-
- protected boolean selectElements(final ModelElementItem modelElementItem,
- final EStructuralFeature feature, final Collection<?> collection) {
- if (modelElementItem != null) {
- LinkItem linkItem = getLink(modelElementItem, feature);
- if (linkItem != null) {
- boolean result = selectElements(linkItem, collection);
- if (!result) {
- setSelection(Collections.singletonList(linkItem), true);
- this.treeViewer.expandToLevel(linkItem, 1);
- }
- return true;
- }
- }
- return false;
- }
-
- protected boolean selectElements(final LinkItem linkItem, final Collection<?> collection) {
- List<ModelElementItem> elementItems = new ArrayList<ModelElementItem>();
- for (Object object : collection) {
- if (object instanceof EObject) {
- EObject eObject = (EObject) object;
- ModelElementItem elementItem = getElement(linkItem, eObject);
- if (elementItem != null) {
- elementItems.add(elementItem);
- }
- }
- }
- if (!elementItems.isEmpty()) {
- setSelection(elementItems, true);
- return true;
- }
- return false;
- }
-
- protected void setSelection(final List<? extends ITreeElement> treeElements,
- final boolean reveal) {
- List<TreePath> treePaths = new ArrayList<TreePath>();
- for (ITreeElement treeElement : treeElements) {
- List<ITreeElement> segments = new ArrayList<ITreeElement>();
- ITreeElement current = treeElement;
- while (current != null) {
- segments.add(current);
- current = current.getTreeParent();
- }
-
- if (segments.size() > 0) {
- ITreeElement[] segmentsArray = new ITreeElement[segments.size()];
- for (int i = 0; i < segments.size(); i++) {
- segmentsArray[i] = segments.get(segments.size() - i - 1);
- }
- treePaths.add(new TreePath(segmentsArray));
- }
- }
-
- if (!treePaths.isEmpty()) {
- this.treeViewer.setSelection(
- new TreeSelection(treePaths.toArray(new TreePath[treePaths.size()])), reveal);
- }
- }
-
- protected LinkItem getLink(final ModelElementItem selectedModelElementItem,
- final EStructuralFeature feature) {
- ITreeContentProvider contentProvider = (ITreeContentProvider) this.treeViewer
- .getContentProvider();
- Object[] children = contentProvider.getChildren(selectedModelElementItem);
- for (Object child : children) {
- if (child instanceof LinkItem) {
- LinkItem linkItem = (LinkItem) child;
- if (linkItem.getReference() == feature) {
- return linkItem;
- }
- }
- }
- return null;
- }
-
- protected ModelElementItem getElement(final LinkItem linkItem, final EObject eObject) {
- ITreeContentProvider contentProvider = (ITreeContentProvider) this.treeViewer
- .getContentProvider();
- Object[] children = contentProvider.getChildren(linkItem);
- for (Object child : children) {
- if (child instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) child;
- if (EcoreUtil.getURI(modelElementItem.getEObject()).equals(
- EcoreUtil.getURI(eObject))) {
- return modelElementItem;
- }
- }
- }
- return null;
- }
-
- protected ModelElementItem getSelectedModelElementItem() {
- ITreeSelection selection = (ITreeSelection) this.treeViewer.getSelection();
- Object firstElement = selection.getFirstElement();
- if (firstElement instanceof ModelElementItemEx) {
- ModelElementItemEx modelElementItem = (ModelElementItemEx) firstElement;
- return modelElementItem;
- }
- return null;
- }
-
- public void doWhenLoaded(final Runnable runnable) {
- if (this.loaded) {
- Display.getDefault().syncExec(runnable);
- } else {
- this.doWhenLoaded.add(runnable);
- }
- }
-
- /**
- * Replace the default context by a dummy one when the given widget is
- * focused. The dummy context is used to redefine the "Ctrl+X", "Ctrl+C" and
- * "Ctrl+V" key bindings to a command which does nothing. This is useful to
- * prevent these commands associated to the existing context from being
- * executed when this widget is focused.
- */
- private void fixClipboardCommands(final Control control) {
- final IWorkbench workbench = PlatformUI.getWorkbench();
- final IContextService contextService = (IContextService) workbench
- .getService(IContextService.class);
-
- control.addFocusListener(new FocusListener() {
- private IContextActivation contextActivation = null;
-
- public void focusGained(final FocusEvent event) {
- this.contextActivation = contextService
- .activateContext("org.eclipse.gmt.modisco.infra.browser.dummyContext"); //$NON-NLS-1$
- }
-
- public void focusLost(final FocusEvent event) {
- if (this.contextActivation != null) {
- contextService.deactivateContext(this.contextActivation);
- }
- }
- });
- }
-
- /**
- * * Adapter used to update the problem indication when resources are
- * demanded loaded.
- */
- private final EContentAdapter problemIndicationAdapter = new EContentAdapter() {
- @Override
- public void notifyChanged(final Notification notification) {
- if (notification.getNotifier() instanceof Resource) {
- switch (notification.getFeatureID(Resource.class)) {
- case Resource.RESOURCE__IS_LOADED:
- case Resource.RESOURCE__ERRORS:
- case Resource.RESOURCE__WARNINGS:
- Resource resource = (Resource) notification.getNotifier();
- Diagnostic diagnostic = analyzeResourceProblems(resource, null);
- if (diagnostic.getSeverity() != Diagnostic.OK) {
- EcoreBrowser.this.resourceToDiagnosticMap.put(resource, diagnostic);
- } else {
- EcoreBrowser.this.resourceToDiagnosticMap.remove(resource);
- }
-
- if (EcoreBrowser.this.updateProblemIndication) {
- getSite().getShell().getDisplay().asyncExec(new Runnable() {
- public void run() {
- updateProblemIndication();
- }
- });
- }
- break;
- default:
- }
- } else {
- super.notifyChanged(notification);
- }
- }
-
- @Override
- protected void setTarget(final Resource theTarget) {
- basicSetTarget(theTarget);
- }
-
- @Override
- protected void unsetTarget(final Resource theTarget) {
- basicUnsetTarget(theTarget);
- }
- };
-
- /**
- * Refreshes the selection (checked) state of actions in the Browser's
- * toolbar.
- */
- public void refreshToolbar() {
- this.instancesToolBar.refresh();
- }
-
- protected Text getSearchBox() {
- return this.searchBox;
- }
-
- protected void setSearchBox(final Text searchBox) {
- this.searchBox = searchBox;
- }
-
- public IWorkbenchSiteProgressService getProgressService() {
- IWorkbenchSiteProgressService service = null;
- Object siteService = getSite().getAdapter(IWorkbenchSiteProgressService.class);
- if (siteService != null) {
- service = (IWorkbenchSiteProgressService) siteService;
- }
- return service;
- }
-
- public boolean isRefreshing() {
- return this.refreshJob != null && this.refreshJob.getState() != Job.NONE;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/FacetTooltip.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/FacetTooltip.java
deleted file mode 100644
index d6812f576..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/FacetTooltip.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.CustomTreePainter;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.CustomTreePainter.StickerToPaint;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-
-/**
- * Add a tooltip to the tree, that appears when the mouse hovers over a facet
- * "sticker", to display the name of this facet. Cannot use standard tree
- * tooltips here, because these can only be defined for an entire tree, and not
- * for single items.
- * <p>
- * caveat: since these tooltips are hand-built, they don't look native on
- * Windows Vista or 7
- */
-public final class FacetTooltip {
-
- // TODO: extend
- // org.eclipse.gmt.modisco.infra.common.ui.internal.controls.Tooltip
-
- private static final String TREEITEM_DATA_KEY = "_TREEITEM"; //$NON-NLS-1$
-
- public static FacetTooltip create(final Tree tree, final CustomTreePainter customTreePainter) {
- return new FacetTooltip(tree, customTreePainter);
- }
-
- private FacetTooltip(final Tree tree, final CustomTreePainter customTreePainter) {
- tree.setToolTipText(""); //$NON-NLS-1$
- addTooltip(tree, customTreePainter);
- }
-
- private Shell fTip = null;
- private Label fLabel = null;
-
- private void addTooltip(final Tree tree, final CustomTreePainter customTreePainter) {
-
- final Listener treeListener = new Listener() {
-
- public void handleEvent(final Event event) {
- switch (event.type) {
- case SWT.Dispose:
- case SWT.KeyDown:
- case SWT.MouseMove:
- if (FacetTooltip.this.fTip == null) {
- break;
- }
- FacetTooltip.this.fTip.dispose();
- FacetTooltip.this.fTip = null;
- FacetTooltip.this.fLabel = null;
- break;
- case SWT.MouseHover:
- Display display = Display.getCurrent();
-
- TreeItem item = null;
- item = tree.getItem(new Point(event.x, event.y));
-
- if (item != null) {
- Object data = item.getData();
- if (data instanceof ModelElementItem) {
- ModelElementItem modelElementItem = (ModelElementItem) data;
- EObject eObject = modelElementItem.getEObject();
- Rectangle bounds = item.getBounds();
- int maxX = tree.getClientArea().width
- + tree.getHorizontalBar().getSelection();
- List<StickerToPaint> stickersToPaint = customTreePainter
- .getStickersToPaintFor(eObject, bounds.x, bounds.width, bounds.y,
- bounds.height, maxX);
- Facet facet = findFacetAt(event.x, event.y, stickersToPaint);
-
- if (facet != null) {
- createTooltip(display, facet.getName());
- FacetTooltip.this.fLabel.setData(FacetTooltip.TREEITEM_DATA_KEY,
- item);
- }
- }
-
- }
- break;
- default:
- MoDiscoBrowserPlugin.logError("Unhandled event"); //$NON-NLS-1$
- }
- }
- };
- tree.addListener(SWT.Dispose, treeListener);
- tree.addListener(SWT.KeyDown, treeListener);
- tree.addListener(SWT.MouseMove, treeListener);
- tree.addListener(SWT.MouseHover, treeListener);
- }
-
- private void addMouseExitListener(final Label label) {
- Listener labelListener = new Listener() {
- public void handleEvent(final Event event) {
- Shell shell = label.getShell();
- shell.dispose();
- }
- };
- label.addListener(SWT.MouseExit, labelListener);
- }
-
- private Facet findFacetAt(final int x, final int y, final List<StickerToPaint> stickersToPaint) {
- for (StickerToPaint stickerToPaint : stickersToPaint) {
- Rectangle bounds = stickerToPaint.getBounds();
- if (x >= bounds.x && x < bounds.x + bounds.width && y >= bounds.y
- && y < bounds.y + bounds.height) {
- Facet facet = stickerToPaint.getFacet();
- if (facet != null) {
- return facet;
- }
- }
- }
- return null;
- }
-
- private void createTooltip(final Display display, final String text) {
- if (this.fTip != null && !this.fTip.isDisposed()) {
- this.fTip.dispose();
- }
- this.fTip = new Shell(display.getActiveShell(), SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL);
- this.fTip.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
- FillLayout layout = new FillLayout();
- layout.marginWidth = 2;
- this.fTip.setLayout(layout);
- this.fLabel = new Label(this.fTip, SWT.NONE);
- this.fLabel.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
- this.fLabel.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-
- this.fLabel.setText(text);
- addMouseExitListener(this.fLabel);
-
- Point size = this.fTip.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-
- Point pt = display.getCursorLocation();
- final int verticalCursorOffset = 10;
- pt.y -= size.y + verticalCursorOffset;
-
- // move the tooltip into the visible area of the screen
- Rectangle clientArea = Display.getCurrent().getClientArea();
- if (pt.x + size.x > clientArea.width) {
- pt.x = clientArea.width - size.x;
- }
- if (pt.y + size.y > clientArea.height) {
- pt.y = clientArea.height - size.y;
- }
-
- this.fTip.setBounds(pt.x, pt.y, size.x, size.y);
- this.fTip.setVisible(true);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/IBrowserSelectionChangedListener.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/IBrowserSelectionChangedListener.java
deleted file mode 100644
index 08ffc5d65..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/IBrowserSelectionChangedListener.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-
-/**
- * Listeners on the Model Browser implementing this interface will receive
- * selection events with the original proxy objects (whereas listeners merely
- * implementing ISelectionChangedListener will receive the Ecore model elements
- * underlying the selected elements)
- */
-public interface IBrowserSelectionChangedListener extends ISelectionChangedListener {
- // empty interface: used for tagging
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/LeftPane.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/LeftPane.java
deleted file mode 100644
index 253d4742b..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/LeftPane.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * The left pane in the model editor, containing the list (tree) of metaclasses
- * and the list of model services
- */
-public class LeftPane {
-
- /** The viewer where a list of metaclasses is shown */
- private MetaclassViewer metaclassViewer;
- private final BrowserConfiguration editorConfiguration;
- private MetaclassViewToolBar toolbar;
- private Composite toolBarComposite;
- private final Composite parent;
- private final Composite toolbarParent;
- private final FormToolkit formToolkit;
- private final IWorkbenchPartSite site;
-
- public LeftPane(final Composite toolbarParent, final Composite parent,
- final BrowserConfiguration editorConfiguration, final FormToolkit formToolkit,
- final IWorkbenchPartSite site) {
- this.editorConfiguration = editorConfiguration;
- this.parent = parent;
- this.formToolkit = formToolkit;
- this.site = site;
- this.toolbarParent = toolbarParent;
-
- // GridLayout gridLayout = new GridLayout(1, false);
- // gridLayout.marginBottom = 5;
- // gridLayout.marginHeight = 0;
- // gridLayout.marginWidth = 0;
- // parent.setLayout(gridLayout);
-
- // GridData metaclassViewerGridData = new GridData();
- // metaclassViewerGridData.grabExcessHorizontalSpace = true;
- // metaclassViewerGridData.grabExcessVerticalSpace = true;
- // metaclassViewerGridData.horizontalAlignment = SWT.FILL;
- // metaclassViewerGridData.verticalAlignment = SWT.FILL;
- // this.metaclassViewer.getViewer().getControl().setLayoutData(metaclassViewerGridData);
- }
-
- public Composite getToolBarComposite() {
- if (this.toolbar == null) {
- createToolBar(this.toolbarParent);
- }
- return this.toolBarComposite;
- }
-
- public MetaclassViewToolBar getToolbar() {
- if (this.toolbar == null) {
- createToolBar(this.toolbarParent);
- }
- return this.toolbar;
- }
-
- private void createToolBar(final Composite pParent) {
- this.toolBarComposite = new Composite(pParent, SWT.WRAP);
- // GridData toolBarGridData = new GridData();
- // toolBarGridData.grabExcessHorizontalSpace = true;
- // toolBarGridData.horizontalAlignment = SWT.FILL;
- // toolBarComposite.setLayoutData(toolBarGridData);
-
- this.toolbar = new MetaclassViewToolBar(this.toolBarComposite, this.editorConfiguration);
- this.toolbar.setMetaclassViewer(getMetaclassViewer());
- }
-
- public MetaclassViewer getMetaclassViewer() {
- if (this.metaclassViewer == null) {
- this.metaclassViewer = new MetaclassViewer(this.parent, this.editorConfiguration,
- this.formToolkit, this.site);
- }
- return this.metaclassViewer;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassUnwrappingSelectionProvider.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassUnwrappingSelectionProvider.java
deleted file mode 100644
index 0966644b4..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassUnwrappingSelectionProvider.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-
-/**
- * Unwraps the MetaclassViewer elements (see
- * {@link org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider}, from
- * which this class is derived).
- *
- */
-public class MetaclassUnwrappingSelectionProvider extends
- org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider {
-
- public MetaclassUnwrappingSelectionProvider(final ISelectionProvider selectionProvider) {
- super(selectionProvider);
- }
-
- @Override
- public void setSelection(final ISelection selection) {
- // unwrap InstancesForMetaclass wrappers
- final ISelection selection2 = MetaclassViewer.unwrapSelection(selection);
- super.setSelection(selection2);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewToolBar.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewToolBar.java
deleted file mode 100644
index f314bf534..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewToolBar.java
+++ /dev/null
@@ -1,221 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration.MetaclassesSortMode;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-
-public class MetaclassViewToolBar {
- private final ToolBar toolBar;
- private ToolItem btnShowMenu;
- private MetaclassViewer metaclassViewer;
- private final BrowserConfiguration browserConfiguration;
- private final Composite fParentComposite;
-
- public MetaclassViewToolBar(final Composite parent,
- final BrowserConfiguration browserConfiguration) {
- this.fParentComposite = parent;
- this.browserConfiguration = browserConfiguration;
-
- final RowLayout layout = new RowLayout(SWT.HORIZONTAL);
- layout.wrap = true;
- parent.setLayout(layout);
-
- ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
- toolBarManager.add(this.actionShowEmptyMetaclasses);
- toolBarManager.add(this.actionDisplayInstancesOfSubclasses);
- toolBarManager.add(this.actionDerivationTree);
- this.toolBar = toolBarManager.createControl(parent);
-
- initialize();
- createShowMenuAction();
- }
-
- private void createShowMenuAction() {
- this.btnShowMenu = new ToolItem(this.toolBar, SWT.PUSH);
- this.btnShowMenu.setToolTipText(Messages.MetaclassViewToolBar_showViewMenu);
- this.btnShowMenu.setImage(ImageProvider.getInstance().getViewMenuIcon());
- Listener listener = new Listener() {
- public void handleEvent(final Event event) {
- if (event.type != SWT.MouseDown
- || MetaclassViewToolBar.this.toolBar.getItem(new Point(event.x, event.y)) == MetaclassViewToolBar.this.btnShowMenu) {
- openViewMenu();
- }
- }
- };
- // no selection event is sent when clicking on Windows
- if (Platform.getOS().equals(Platform.OS_WIN32)) {
- // listen on the toolbar so that the menu can appear on MouseDown
- this.toolBar.addListener(SWT.MouseDown, listener);
- }
- // and for keyboard accessibility
- this.btnShowMenu.addListener(SWT.Selection, listener);
- }
-
- public Menu openViewMenu() {
- MenuManager menuManager = new MenuManager();
- menuManager.add(this.actionShowEmptyMetaclasses);
- menuManager.add(this.actionDisplayInstancesOfSubclasses);
- menuManager.add(this.actionDerivationTree);
- menuManager.add(this.actionSortByName);
- menuManager.add(this.actionSortByCount);
- menuManager.add(this.actionShowMetaclassesFullQualifiedName);
- menuManager.add(this.actionGroupByPackage);
- Menu contextMenu = menuManager.createContextMenu(this.fParentComposite);
- Rectangle bounds = Display.getCurrent().map(this.toolBar, null,
- this.btnShowMenu.getBounds());
- contextMenu.setLocation(bounds.x, bounds.y + bounds.height);
- contextMenu.setVisible(true);
- return contextMenu;
- }
-
- private final Action actionDisplayInstancesOfSubclasses = new Action(
- Messages.MetaclassViewToolBar_displayInstancesOfSubclasses, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_displayInstancesOfSubclasses);
- setImageDescriptor(ImageProvider.getInstance().getDerivedInstancesImageDescriptor());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer.setDisplayInstancesOfSubclasses(isChecked());
- }
- };
-
- private final Action actionSortByName = new Action(Messages.MetaclassViewToolBar_sortByName,
- IAction.AS_RADIO_BUTTON) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_sortByName);
- setImageDescriptor(ImageProvider.getInstance().getSortInstancesIcon());
- }
-
- @Override
- public void run() {
-
- MetaclassViewToolBar.this.metaclassViewer
- .setSortMode(AppearanceConfiguration.MetaclassesSortMode.ByName);
- }
- };
-
- private final Action actionSortByCount = new Action(Messages.MetaclassViewToolBar_sortByCount,
- IAction.AS_RADIO_BUTTON) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_sortByCount);
- setImageDescriptor(ImageProvider.getInstance().getSortNumericallyIcon());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer
- .setSortMode(AppearanceConfiguration.MetaclassesSortMode.ByCount);
- }
- };
-
- private final Action actionShowMetaclassesFullQualifiedName = new Action(
- Messages.MetaclassViewToolBar_showFullQualifiedNames, SWT.CHECK) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_showFullQualifiedNames);
- setImageDescriptor(ImageProvider.getInstance()
- .getShowFullQualifiedNamesImageDescriptor());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer
- .setShowMetaclassesFullQualifiedNames(isChecked());
- }
- };
-
- private final Action actionShowEmptyMetaclasses = new Action(
- Messages.MetaclassViewToolBar_showEmptyMetaclasses, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_showEmptyMetaclasses);
- setImageDescriptor(ImageProvider.getInstance().getShowEmptyMetaclassesIcon());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer.setShowEmptyMetaclasses(isChecked());
- }
- };
-
- private final Action actionGroupByPackage = new Action(
- Messages.MetaclassViewToolBar_groupByPackage, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_groupByPackage);
- setImageDescriptor(ImageProvider.getInstance().getPackageImageDescriptor());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer.setGroupByPackage(isChecked());
- }
- };
-
- private final Action actionDerivationTree = new Action(
- Messages.MetaclassViewToolBar_showDerivationTree, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.MetaclassViewToolBar_showDerivationTree);
- setImageDescriptor(ImageProvider.getInstance().getDerivationTreeIcon());
- }
-
- @Override
- public void run() {
- MetaclassViewToolBar.this.metaclassViewer.setShowDerivationTree(isChecked());
- MetaclassViewToolBar.this.actionGroupByPackage.setEnabled(!isChecked());
- }
- };
-
- public void setMetaclassViewer(final MetaclassViewer metaclassViewer) {
- this.metaclassViewer = metaclassViewer;
- }
-
- /** Initialize the tool bar buttons with their initial value */
- private void initialize() {
- final MetaclassesSortMode metaclassesSortMode = this.browserConfiguration
- .getAppearanceConfiguration().getMetaclassesSortMode();
- this.actionSortByName.setChecked(metaclassesSortMode == MetaclassesSortMode.ByName);
- this.actionSortByCount.setChecked(metaclassesSortMode == MetaclassesSortMode.ByCount);
- this.actionShowMetaclassesFullQualifiedName.setChecked(this.browserConfiguration
- .getAppearanceConfiguration().isShowMetaclassesFullQualifiedNames());
- this.actionShowEmptyMetaclasses.setChecked(this.browserConfiguration
- .getAppearanceConfiguration().isShowEmptyMetaclasses());
- this.actionGroupByPackage.setChecked(this.browserConfiguration.getAppearanceConfiguration()
- .isGroupByPackage());
- this.actionDisplayInstancesOfSubclasses.setChecked(this.browserConfiguration
- .getAppearanceConfiguration().isDisplayInstancesOfSubclasses());
- this.actionDerivationTree.setChecked(this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree());
-
- this.actionGroupByPackage.setEnabled(!this.browserConfiguration
- .getAppearanceConfiguration().isShowDerivationTree());
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewer.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewer.java
deleted file mode 100644
index 2ac1afa24..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewer.java
+++ /dev/null
@@ -1,861 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.edit.EMFEditPlugin;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclass;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclasses;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.AppearanceConfiguration.MetaclassesSortMode;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.customization.CustomizationEngine;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.extensions.IconProvidersRegistry;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.jface.viewers.IColorProvider;
-import org.eclipse.jface.viewers.IFontProvider;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.viewers.ViewerFilter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * The viewer for displaying the list of metaclasses that appears in the model
- * editor. The input of this viewer is an instance of the
- * {@link InstancesForMetaclasses} class and the elements are instances of
- * {@link InstancesForMetaclass}.
- */
-public class MetaclassViewer implements ISelectionProvider {
-
- public static final String MENU_ID = EcoreBrowser.EDITOR_ID + ".MetaclassViewer.menu"; //$NON-NLS-1$
-
- private final TreeViewer treeViewer;
-
- /** The configuration of the model editor */
- private final BrowserConfiguration browserConfiguration;
-
- private static final RGB RGB_GRAY = new RGB(128, 128, 128);
- private static final RGB RGB_GREEN = new RGB(0, 128, 0);
-
- private final IWorkbenchPartSite site;
-
- /**
- * @param parent
- * the composite in which this viewer must be created
- * @param browserConfiguration
- * the configuration of the model browser, which is passed on to
- * the {@link MetaclassViewer}s.
- * @param formToolkit
- * @param site
- */
- public MetaclassViewer(final Composite parent, final BrowserConfiguration browserConfiguration,
- final FormToolkit formToolkit, final IWorkbenchPartSite site) {
- this.browserConfiguration = browserConfiguration;
- this.site = site;
-
- final Tree tree = formToolkit.createTree(parent, SWT.MULTI | SWT.BORDER);
- this.treeViewer = new TreeViewer(tree);
-
- initViewer();
-
- createContextMenu(tree);
- }
-
- public void setInput(final Object input) {
- this.treeViewer.setInput(input);
- }
-
- /** Create a context menu on the tree of metaclasses */
- protected void createContextMenu(final Control control) {
- final MetaclassViewerMenuManager menuManager = new MetaclassViewerMenuManager(this,
- this.browserConfiguration);
- final Menu menu = menuManager.createContextMenu(control);
- control.setMenu(menu);
- this.site.registerContextMenu(MetaclassViewer.MENU_ID, menuManager,
- new MetaclassUnwrappingSelectionProvider(this));
- }
-
- /** Select the class corresponding to the root element (the 'model' element) */
- public void selectRootElement() {
- this.treeViewer.setSelection(null);
- final EList<Resource> resources = this.browserConfiguration.getResourceSet().getResources();
- if (resources.size() > 0) {
- Resource resource = resources.get(0);
- synchronized (resource) {
- final EList<EObject> contents = resource.getContents();
- if (contents.size() > 0) {
- final EObject object = contents.get(0);
- selectMetaclass(object.eClass());
- }
- }
- }
- }
-
- /** Select the given metaclass */
- public void selectMetaclass(final EClass eClass) {
- Object input = this.treeViewer.getInput();
- if (input instanceof InstancesForMetaclasses) {
- InstancesForMetaclasses instancesForMetaclasses = (InstancesForMetaclasses) input;
- final InstancesForMetaclass instancesForMetaclass = instancesForMetaclasses
- .getInstancesForMetaclass(eClass);
- if (instancesForMetaclass != null) {
- // to force the services pane to clear its selection
- // this.treeViewer.getTree().setFocus();
- // this.browserConfiguration.getEditor().setFocus();
- this.treeViewer.setSelection(new StructuredSelection(instancesForMetaclass), true);
- }
- }
- }
-
- /**
- * Return a list of qualified names of selected metaclasses, or an empty
- * list if none
- */
- public String[] getSelectedMetaclassesQualifiedNames() {
- final ArrayList<String> selectedMetaclasses = new ArrayList<String>();
- final ISelection selection = this.treeViewer.getSelection();
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object selectedElement = iterator.next();
- if (selectedElement instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) selectedElement;
- selectedMetaclasses.add(instancesForMetaclass.getClassQualifiedName());
- }
- }
- }
- return selectedMetaclasses.toArray(new String[selectedMetaclasses.size()]);
- }
-
- /** Return a list of selected metaclasses, or an empty list if none */
- public EClass[] getSelectedMetaclasses() {
- final ArrayList<EClass> selectedMetaclasses = new ArrayList<EClass>();
- final ISelection selection = this.treeViewer.getSelection();
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object selectedElement = iterator.next();
- if (selectedElement instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) selectedElement;
- selectedMetaclasses.add(instancesForMetaclass.getEClass());
- }
- }
- }
- return selectedMetaclasses.toArray(new EClass[selectedMetaclasses.size()]);
- }
-
- /**
- * Return the qualified name of the first selected metaclass, or null if
- * none
- */
- public String getFirstSelectedMetaclassQualifiedName() {
- final String[] selectedMetaclassesQualifiedNames = getSelectedMetaclassesQualifiedNames();
-
- String firstSelectedMetaclass = null;
- if (selectedMetaclassesQualifiedNames.length > 0) {
- firstSelectedMetaclass = selectedMetaclassesQualifiedNames[0];
- }
- return firstSelectedMetaclass;
- }
-
- /**
- * Return the first selected metaclass, or null if none
- */
- public EClass getFirstSelectedMetaclass() {
- final EClass[] selectedMetaclasses = getSelectedMetaclasses();
-
- EClass firstSelectedMetaclass = null;
- if (selectedMetaclasses.length > 0) {
- firstSelectedMetaclass = selectedMetaclasses[0];
- }
- return firstSelectedMetaclass;
- }
-
- protected class EmptyMetaclassesFilter extends ViewerFilter {
- @Override
- public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
- if (!MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowEmptyMetaclasses()) {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- final int count = getInstanceCountFor(instancesForMetaclass);
- if (count == 0) {
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- // don't hide a node on a branch leading to a
- // non-empty class
- return isOneSubclassNonEmpty(instancesForMetaclass);
- }
-
- return false;
- }
- } else if (element instanceof PackageGroup) {
- // don't show empty packages
- return !isEmpty((PackageGroup) element);
- }
- }
- return true;
- }
-
- /** @return whether the given package is empty */
- private boolean isEmpty(final PackageGroup packageGroup) {
- for (final Object element : packageGroup) {
- if (element instanceof PackageGroup) {
- final PackageGroup p = (PackageGroup) element;
- if (!isEmpty(p)) {
- return false;
- }
- } else if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- if (getInstanceCountFor(instancesForMetaclass) != 0) {
- return false;
- }
- }
- }
-
- return true;
- }
-
- private boolean isOneSubclassNonEmpty(final InstancesForMetaclass instancesForMetaclass) {
- final InstancesForMetaclass[] subclasses = instancesForMetaclass.getSubclasses();
- for (final InstancesForMetaclass subclass : subclasses) {
- if (getInstanceCountFor(subclass) > 0 || isOneSubclassNonEmpty(subclass)) {
- return true;
- }
- }
- return false;
- }
-
- private int getInstanceCountFor(final InstancesForMetaclass instancesForMetaclass) {
- int count = 0;
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isDisplayInstancesOfSubclasses()) {
- count = instancesForMetaclass.totalSize();
- } else {
- count = instancesForMetaclass.size();
- }
- return count;
- }
- }
-
- /** Filter to hide metaclasses that are customized as not visible */
- protected static class HiddenMetaclassesFilter extends ViewerFilter {
-
- private final CustomizationEngine customizationEngine;
-
- public HiddenMetaclassesFilter(final CustomizationEngine customizationEngine) {
- this.customizationEngine = customizationEngine;
- }
-
- @Override
- public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- EClass eClass = instancesForMetaclass.getEClass();
- return this.customizationEngine.isMetaclassVisible(eClass);
- }
- return true;
- }
- }
-
- protected class MetaclassLabelProvider extends LabelProvider implements IColorProvider,
- IFontProvider {
-
- private final Color colorGrayedOut;
- private final Color colorFacets;
-
- public MetaclassLabelProvider() {
- this.colorGrayedOut = new Color(Display.getDefault(), MetaclassViewer.RGB_GRAY);
- this.colorFacets = new Color(Display.getDefault(), MetaclassViewer.RGB_GREEN);
- }
-
- @Override
- public String getText(final Object element) {
- if (element == EcoreBrowser.LOADING_MESSAGE) {
- return EcoreBrowser.LOADING_MESSAGE;
- }
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
-
- int count = 0;
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isDisplayInstancesOfSubclasses()) {
- count = instancesForMetaclass.totalSize();
- } else {
- count = instancesForMetaclass.size();
- }
- String name;
-
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowMetaclassesFullQualifiedNames()) {
- name = instancesForMetaclass.getClassQualifiedName();
- } else {
- // only show the short name of the class (instead of the
- // full qualified name)
- name = instancesForMetaclass.getEClass().getName();
- }
-
- return name + " (" + count + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- if (element instanceof PackageGroup) {
- final PackageGroup packageGroup = (PackageGroup) element;
- return packageGroup.getName();
- }
-
- return element.toString();
- }
-
- @Override
- public Image getImage(final Object element) {
- try {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- final EClass eClass = instancesForMetaclass.getEClass();
-
- final CustomizationEngine customizationEngine = MetaclassViewer.this.browserConfiguration
- .getAppearanceConfiguration().getCustomizationEngine();
- // customized icon for metaclass
- Image metaclassIcon = customizationEngine.getMetaclassIcon(null, eClass);
- if (metaclassIcon != null) {
- return metaclassIcon;
- }
-
- // customized icon (the same image as for instances of this
- // metaclass)
- // XXX deprecated but still supported
- final Image customizedIcon = customizationEngine.getTypeIcon(null, eClass);
- if (customizedIcon != null) {
- return customizedIcon;
- }
-
- if (!eClass.isAbstract()) {
- // instantiate an element in order to be able to use the
- // image provider
- final EObject dummyInstance = eClass.getEPackage().getEFactoryInstance()
- .create(eClass);
-
- // icon provided by an extension
- final IconProvidersRegistry iconProvidersRegistry = IconProvidersRegistry
- .getInstance();
- final Image icon = iconProvidersRegistry.getIcon(dummyInstance);
- if (icon != null) {
- return icon;
- }
-
- // icon provided by an adapter from the registry
- final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) MetaclassViewer.this.browserConfiguration
- .getAppearanceConfiguration().getAdapterFactory()
- .adapt(dummyInstance, IItemLabelProvider.class);
-
- if (itemLabelProvider != null) {
- return ExtendedImageRegistry.getInstance().getImage(
- itemLabelProvider.getImage(dummyInstance));
- }
- }
-
- // default icon for facets : generic facet icon
- if (eClass instanceof Facet) {
- return ImageProvider.getInstance().getFacetIcon();
- }
-
- // default EMF generated icon
- final String className = eClass.getName();
- final URI imageURI = URI.createURI(EMFEditPlugin.INSTANCE.getImage(
- "full/obj16/Item").toString() //$NON-NLS-1$
- + "#" + className); //$NON-NLS-1$
- return ExtendedImageRegistry.getInstance().getImage(imageURI);
- }
-
- if (element instanceof PackageGroup) {
- return ImageProvider.getInstance().getPackageIcon();
- }
-
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException("Error retrieving image", e); //$NON-NLS-1$
- }
- return null;
- }
-
- public Color getBackground(final Object element) {
- return null;
- }
-
- public Color getForeground(final Object element) {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- int count = 0;
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isDisplayInstancesOfSubclasses()) {
- count = instancesForMetaclass.totalSize();
- } else {
- count = instancesForMetaclass.size();
- }
- if (count == 0) {
- return this.colorGrayedOut;
- }
- if (instancesForMetaclass.getEClass() instanceof Facet) {
- return this.colorFacets;
- }
- }
-
- // default color
- return null;
- }
-
- public Font getFont(final Object element) {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- if (instancesForMetaclass.getEClass().isAbstract()) {
- return MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .getCustomItalicFont();
- }
- }
-
- // default font (possibly customized)
- return MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .getCustomFont();
- }
-
- @Override
- public void dispose() {
- this.colorGrayedOut.dispose();
- this.colorFacets.dispose();
- super.dispose();
- }
-
- }
-
- /**
- * A list corresponding to a group of metaclasses belonging to the same
- * package, or sub-packages.
- */
- @SuppressWarnings("serial")
- protected static class PackageGroup extends ArrayList<Object> {
- /** The name of the package */
- private final String name;
- private final Object parent;
-
- public PackageGroup(final Object parent, final String name) {
- this.parent = parent;
- this.name = name;
- }
-
- public Object getParent() {
- return this.parent;
- }
-
- public String getName() {
- if (this.name == null) {
- return ""; //$NON-NLS-1$
- }
- return this.name;
- }
- }
-
- protected class MetaclassContentProvider implements ITreeContentProvider {
- public Object[] getElements(final Object inputElement) {
- if (inputElement == EcoreBrowser.LOADING_MESSAGE) {
- return new Object[] { EcoreBrowser.LOADING_MESSAGE };
- }
-
- final InstancesForMetaclasses instancesForMetaclasses = (InstancesForMetaclasses) inputElement;
- InstancesForMetaclass[] instancesByMetaclass = instancesForMetaclasses
- .getInstancesForMetaclasses();
-
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- instancesByMetaclass = instancesForMetaclasses.getRootMetaclasses();
- }
-
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isGroupByPackage()
- && !MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- return groupByPackage(instancesByMetaclass);
- }
- return instancesByMetaclass;
- }
-
- public void dispose() {
- // nothing
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
- // nothing
- }
-
- public Object[] getChildren(final Object parentElement) {
- if (parentElement instanceof PackageGroup) {
- final PackageGroup packageGroup = (PackageGroup) parentElement;
- return packageGroup.toArray(new Object[packageGroup.size()]);
- }
-
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- if (parentElement instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) parentElement;
- return instancesForMetaclass.getSubclasses();
- }
- }
-
- return new Object[0];
- }
-
- public Object getParent(final Object element) {
- if (element instanceof PackageGroup) {
- final PackageGroup packageGroup = (PackageGroup) element;
- return packageGroup.getParent();
- }
-
- if (element instanceof InstancesForMetaclass) {
-
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- final EList<EClass> superTypes = instancesForMetaclass.getEClass()
- .getESuperTypes();
- if (superTypes.size() > 0) {
- // return the first parent found
- final InstancesForMetaclass superclass = MetaclassViewer.this.browserConfiguration
- .getInstancesForMetaclasses().getInstancesForMetaclass(
- superTypes.get(0));
- return superclass;
- }
- } else if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isGroupByPackage()) {
- return instancesForMetaclass.getParent();
- }
- }
-
- return null;
- }
-
- public boolean hasChildren(final Object element) {
- if (element instanceof PackageGroup) {
- final PackageGroup packageGroup = (PackageGroup) element;
- return packageGroup.size() > 0;
- }
-
- if (MetaclassViewer.this.browserConfiguration.getAppearanceConfiguration()
- .isShowDerivationTree()) {
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- return instancesForMetaclass.getSubclasses().length > 0;
- }
- }
-
- return false;
- }
- }
-
- /** Initialize the viewer with a content and label provider */
- private void initViewer() {
-
- this.treeViewer.setContentProvider(new MetaclassContentProvider());
- this.treeViewer.setLabelProvider(new MetaclassLabelProvider());
-
- // A filter for empty metaclasses (which don't have any instance in the
- // model)
- this.treeViewer.addFilter(new EmptyMetaclassesFilter());
- // A filter for metaclasses hidden through a customization
- this.treeViewer.addFilter(new HiddenMetaclassesFilter(this.browserConfiguration
- .getAppearanceConfiguration().getCustomizationEngine()));
-
- setSortMode(this.browserConfiguration.getAppearanceConfiguration().getMetaclassesSortMode());
- }
-
- /**
- * Group the given metaclasses by packages.
- *
- * @return a list of packages containing metaclasses or other packages
- * recursively
- */
- public Object[] groupByPackage(final InstancesForMetaclass[] instancesByMetaclass) {
-
- final ArrayList<Object> toplevelItems = new ArrayList<Object>();
-
- for (final InstancesForMetaclass instancesForMetaclass : instancesByMetaclass) {
- final EClass eClass = instancesForMetaclass.getEClass();
- // path segments in reverse order
- final ArrayList<String> pathSegments = new ArrayList<String>();
- pathSegments.add(eClass.getName());
-
- EPackage ePackage = eClass.getEPackage();
- while (ePackage != null) {
- pathSegments.add(ePackage.getName());
- ePackage = ePackage.getESuperPackage();
- }
-
- // copy path segments in reverse in a string table
- final String[] path = new String[pathSegments.size()];
- int i = pathSegments.size() - 1;
- for (final String segment : pathSegments) {
- path[i--] = segment;
- }
-
- addToPackage(instancesForMetaclass, path, 0, toplevelItems, null);
- }
-
- return toplevelItems.toArray(new Object[toplevelItems.size()]);
- }
-
- /**
- * A recursive function that creates a hierarchy of packages containing
- * metaclasses
- *
- * @param instancesForMetaclass
- * the metaclass to add to a package
- * @param path
- * a list of package segments
- * @param index
- * the index of the first package segment to consider
- * @param items
- * the items corresponding to the level from which the path is
- * defined (index)
- * @param parent
- * the parent of the object in the tree
- */
- private void addToPackage(final InstancesForMetaclass instancesForMetaclass,
- final String[] path, final int index, final ArrayList<Object> items, final Object parent) {
-
- if (path.length - index == 1) {
- instancesForMetaclass.setParent(parent);
- items.add(instancesForMetaclass);
- } else if (path.length - index > 1) {
- // see if the package already exists
- for (final Object item : items) {
- if (item instanceof PackageGroup) {
- final PackageGroup packageGroup = (PackageGroup) item;
- try {
- if (packageGroup.getName().equals(path[index])) {
- // add the element to an existing package
- addToPackage(instancesForMetaclass, path, index + 1, packageGroup,
- packageGroup);
- return;
- }
- } catch (Exception e) {
- MoDiscoLogger.logError(e,
- "Failed to deal with: " + packageGroup.toString(), //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- }
- }
- }
-
- // create a new package for the element
- final PackageGroup packageGroup = new PackageGroup(parent, path[index]);
- items.add(packageGroup);
- addToPackage(instancesForMetaclass, path, index + 1, packageGroup, packageGroup);
- }
- }
-
- public void refresh() {
- if (!this.treeViewer.getTree().isDisposed()) {
- try {
- this.treeViewer.getTree().setRedraw(false);
- this.treeViewer.refresh();
- } finally {
- this.treeViewer.getTree().setRedraw(true);
- }
- }
- }
-
- public void reload() {
- final InstancesForMetaclasses instancesForMetaclasses = this.browserConfiguration
- .getInstancesForMetaclasses();
- this.treeViewer.setInput(instancesForMetaclasses);
- refresh();
- }
-
- public void addSelectionChangedListener(final ISelectionChangedListener listener) {
- this.treeViewer.addSelectionChangedListener(listener);
- }
-
- public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
- this.treeViewer.removeSelectionChangedListener(listener);
- }
-
- public void clearSelection() {
- this.treeViewer.setSelection(null);
- }
-
- public ISelection getSelection() {
- return unwrapSelection(this.treeViewer.getSelection());
- }
-
- /**
- * Replace proxy {@link InstancesForMetaclass} objects by their underlying
- * Ecore {@link EClass} in the given selection
- *
- * @return the unwrapped version of the selection
- */
- public static ISelection unwrapSelection(final ISelection selection) {
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- final List<Object> elements = new ArrayList<Object>();
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object element = iterator.next();
- if (element instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) element;
- elements.add(instancesForMetaclass.getEClass());
- } else {
- elements.add(element);
- }
- }
- return new StructuredSelection(elements);
- }
- return selection;
- }
-
- public void setSortMode(final MetaclassesSortMode mode) {
- this.browserConfiguration.getAppearanceConfiguration().setMetaclassesSortMode(mode);
-
- if (mode == MetaclassesSortMode.ByName) {
- this.treeViewer.setComparator(new ViewerComparator() {
- @Override
- public int compare(final Viewer viewer, final Object e1, final Object e2) {
- String first = getDisplayedName(e1);
- String second = getDisplayedName(e2);
- if (first == null) {
- // Bug 324417 - [ModelBrowser] error when showing
- // metaclasses with null name
- first = "null"; //$NON-NLS-1$
- }
- return first.compareToIgnoreCase(second);
- }
- });
- } else if (mode == MetaclassesSortMode.ByCount) {
- this.treeViewer.setComparator(new ViewerComparator() {
- @Override
- public int compare(final Viewer viewer, final Object e1, final Object e2) {
- final int first = getCount(e1);
- final int second = getCount(e2);
- return first - second;
- }
- });
- }
- }
-
- public void setShowMetaclassesFullQualifiedNames(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration()
- .setShowMetaclassesFullQualifiedNames(value);
- this.treeViewer.refresh();
- }
-
- public void setShowEmptyMetaclasses(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowEmptyMetaclasses(value);
- refresh();
- }
-
- public void setGroupByPackage(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setGroupByPackage(value);
- refresh();
- }
-
- public void setDisplayInstancesOfSubclasses(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setDisplayInstancesOfSubclasses(
- value);
- refresh();
- // force the model tree to refresh
- if (!this.treeViewer.getSelection().isEmpty()) {
- this.treeViewer.setSelection(this.treeViewer.getSelection());
- }
- }
-
- public void setShowDerivationTree(final boolean value) {
- this.browserConfiguration.getAppearanceConfiguration().setShowDerivationTree(value);
- refresh();
- }
-
- /**
- * @return the name that is displayed for the following element in the
- * viewer
- */
- private String getDisplayedName(final Object object) {
- String name = ""; //$NON-NLS-1$
- if (object instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) object;
- if (this.browserConfiguration.getAppearanceConfiguration()
- .isShowMetaclassesFullQualifiedNames()) {
- name = instancesForMetaclass.getClassQualifiedName();
- } else {
- name = instancesForMetaclass.getEClass().getName();
- }
- }
- return name;
- }
-
- /**
- * @return the instance count for the given element (metaclass) in the
- * viewer
- */
- private int getCount(final Object object) {
- int count = 0;
- if (object instanceof InstancesForMetaclass) {
- final InstancesForMetaclass instancesForMetaclass = (InstancesForMetaclass) object;
- if (this.browserConfiguration.getAppearanceConfiguration()
- .isDisplayInstancesOfSubclasses()) {
- count = instancesForMetaclass.totalSize();
- } else {
- count = instancesForMetaclass.size();
- }
- }
- return count;
- }
-
- public void setFont(final Font font) {
- this.treeViewer.getTree().setFont(font);
- }
-
- public Viewer getViewer() {
- return this.treeViewer;
- }
-
- public void setSelection(final ISelection selection) {
- this.treeViewer.setSelection(selection);
- }
-} \ No newline at end of file
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewerMenuManager.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewerMenuManager.java
deleted file mode 100644
index 757fb5af2..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/MetaclassViewerMenuManager.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.ArrayList;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclass;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditor;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditorInput;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableElement;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-
-public class MetaclassViewerMenuManager extends MenuManager implements IMenuListener {
-
- private final BrowserConfiguration browserConfiguration;
- private final MetaclassViewer metaclassViewer;
-
- public MetaclassViewerMenuManager(final MetaclassViewer metaclassViewer,
- final BrowserConfiguration browserConfiguration) {
- super("#PopUp"); //$NON-NLS-1$
- this.metaclassViewer = metaclassViewer;
- this.browserConfiguration = browserConfiguration;
- addMenuActions();
- addMenuListener(this);
- }
-
- private void addMenuActions() {
- add(this.openTableEditorAction);
- add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
- }
-
- /** This action opens a table editor on the selected metaclass */
- private final IAction openTableEditorAction = new Action(Messages.openTableEditorOnSelection) {
- @Override
- public void run() {
- final EClass[] selectedMetaclasses = MetaclassViewerMenuManager.this.metaclassViewer
- .getSelectedMetaclasses();
- final ArrayList<TableElement> elements = new ArrayList<TableElement>();
-
- for (final EClass selectedMetaclass : selectedMetaclasses) {
- final InstancesForMetaclass instancesForMetaclass = MetaclassViewerMenuManager.this.browserConfiguration
- .getInstancesForMetaclasses().getInstancesForMetaclass(selectedMetaclass);
- if (instancesForMetaclass != null) {
- ArrayList<EObject> instances = instancesForMetaclass.getElements();
- for (EObject eObject : instances) {
- elements.add(new TableElement(eObject));
- }
- if (MetaclassViewerMenuManager.this.browserConfiguration
- .getAppearanceConfiguration().isDisplayInstancesOfSubclasses()) {
- ArrayList<EObject> derivedElements = instancesForMetaclass
- .getDerivedElements();
- for (EObject eObject : derivedElements) {
- elements.add(new TableElement(eObject));
- }
- }
- }
- }
-
- final String[] selectedMetaclassesNames = MetaclassViewerMenuManager.this.metaclassViewer
- .getSelectedMetaclassesQualifiedNames();
- final TableEditorInput tableEditorInput = new TableEditorInput(
- MetaclassViewerMenuManager.this.browserConfiguration, elements,
- getDescriptionFor(selectedMetaclassesNames));
-
- final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage();
- try {
- IDE.openEditor(activePage, tableEditorInput, TableEditor.EDITOR_ID, true);
- } catch (final PartInitException e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- private String getDescriptionFor(final String[] selectedMetaclasses) {
- if (selectedMetaclasses.length < 1) {
- throw new IllegalArgumentException();
- }
-
- final StringBuilder description = new StringBuilder();
- description.append(Messages.MetaclassViewerMenuManager_instancesOf);
- description.append(selectedMetaclasses[0]);
- for (int i = 1; i < selectedMetaclasses.length; i++) {
- description.append(", " + selectedMetaclasses[i]); //$NON-NLS-1$
- }
- return description.toString();
- }
- };
-
- public void menuAboutToShow(final IMenuManager manager) {
- final EObject[] selectedMetaclasses = this.metaclassViewer.getSelectedMetaclasses();
- this.openTableEditorAction.setEnabled(selectedMetaclasses.length > 0);
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/NonBlockingElementComputation.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/NonBlockingElementComputation.java
deleted file mode 100644
index de00fc683..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/NonBlockingElementComputation.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - Bug 341463 - [Model browser] stays on "loading..." indefinitely
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
-
-/**
- * Computes a value synchronously initially, and continues asynchronously if the
- * computation takes too much time.
- *
- * @param <T>
- * The type of the result of the computation.
- */
-public abstract class NonBlockingElementComputation<T> {
-
- private static final boolean DEBUG = false;
- private static final int MAX_SYNCHRONOUS_WAIT_DELAY = 200;
- private final Set<Object> computing = Collections.synchronizedSet(new HashSet<Object>());
- private final IWorkbenchSiteProgressService progressService;
-
- private class ValueRef {
- private T value;
-
- public T getValue() {
- return this.value;
- }
-
- public void setValue(final T value) {
- this.value = value;
- }
- }
-
- public NonBlockingElementComputation(final IWorkbenchSiteProgressService progressService) {
- this.progressService = progressService;
- }
-
- protected abstract T basicCompute(final Object element);
-
- protected abstract T getTemporaryDefaultValue();
-
- public T computeValue(final Object element) {
- if (this.computing.contains(element)) {
- return getTemporaryDefaultValue();
- }
-
- final ValueRef valueRef = new ValueRef();
- final Object signal = new Object();
- final boolean[] finished = new boolean[1];
- final boolean[] needsRefresh = new boolean[1];
-
- Job job = new Job(Messages.BrowserContentProvider_computingChildren) {
- @Override
- protected IStatus run(final IProgressMonitor monitor) {
- try {
- debugPrint("computing"); //$NON-NLS-1$
- NonBlockingElementComputation.this.computing.add(element);
- T value = basicCompute(element);
- valueRef.setValue(value);
- finished[0] = true;
- boolean localNeedsRefresh;
- synchronized (signal) {
- signal.notify();
- localNeedsRefresh = needsRefresh[0];
- }
- if (localNeedsRefresh) {
- computationFinished();
- }
- return Status.OK_STATUS;
- } finally {
- NonBlockingElementComputation.this.computing.remove(element);
- }
- }
- };
- job.setSystem(true);
- job.setPriority(Job.LONG);
- this.progressService.schedule(job, 0);
- try {
- // See Bug 327633: [Model Browser] avoid blocking the UI
- synchronized (signal) {
- signal.wait(NonBlockingElementComputation.MAX_SYNCHRONOUS_WAIT_DELAY);
- }
- if (!finished[0]) {
- debugPrint("asynchronous"); //$NON-NLS-1$
- /*
- * Return a temporary "loading..." object. It will be
- * automatically replaced by real content thanks to the model
- * change notifications that trigger a refresh.
- */
- synchronized (signal) {
- needsRefresh[0] = true;
- }
- return getTemporaryDefaultValue();
- }
- } catch (InterruptedException e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- debugPrint("synchronous"); //$NON-NLS-1$
- return valueRef.getValue();
- }
-
- private void debugPrint(final String message) {
- if (NonBlockingElementComputation.DEBUG) {
- System.out.println(message + " [" //$NON-NLS-1$
- + NonBlockingElementComputation.this.getClass().getSimpleName() + "]"); //$NON-NLS-1$
- }
- }
-
- protected abstract void computationFinished();
-
- public boolean isComputing() {
- return !this.computing.isEmpty();
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/ReadOnlyCommandStack.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/ReadOnlyCommandStack.java
deleted file mode 100644
index fb4e15ba8..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/ReadOnlyCommandStack.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.command.CommandStack;
-import org.eclipse.emf.common.command.CommandStackListener;
-
-public class ReadOnlyCommandStack implements CommandStack {
-
- public void execute(final Command command) {
- // nothing
- }
-
- public boolean canUndo() {
- return false;
- }
-
- public void undo() {
- // nothing
- }
-
- public boolean canRedo() {
- return false;
- }
-
- public Command getUndoCommand() {
- return null;
- }
-
- public Command getRedoCommand() {
- return null;
- }
-
- public Command getMostRecentCommand() {
- return null;
- }
-
- public void redo() {
- // nothing
- }
-
- public void flush() {
- // nothing
- }
-
- public void addCommandStackListener(final CommandStackListener listener) {
- // nothing
- }
-
- public void removeCommandStackListener(final CommandStackListener listener) {
- // nothing
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/TreeToolBar.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/TreeToolBar.java
deleted file mode 100644
index 98e375e77..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/TreeToolBar.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Guyomar (Mia-software)
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-
-public final class TreeToolBar {
-
- private final ToolBar toolBar;
- private ToolItem btnShowMenu;
- private final EcoreBrowser browser;
- private final Composite fParentComposite;
-
- public static TreeToolBar create(final Composite parent, final EcoreBrowser browser) {
- return new TreeToolBar(parent, browser);
- }
-
- private TreeToolBar(final Composite parent, final EcoreBrowser browser) {
- this.fParentComposite = parent;
- this.browser = browser;
-
- final RowLayout layout = new RowLayout(SWT.HORIZONTAL);
- layout.wrap = true;
- parent.setLayout(layout);
-
- ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
- toolBarManager.add(this.actionCollapseAll);
- toolBarManager.add(this.actionSortInstances);
- toolBarManager.add(this.actionShowEmptyLinks);
- toolBarManager.add(this.actionShowDerivedLinks);
- this.toolBar = toolBarManager.createControl(parent);
-
- initialize();
- createShowMenuAction();
- }
-
- private void createShowMenuAction() {
- this.btnShowMenu = new ToolItem(this.toolBar, SWT.PUSH);
- this.btnShowMenu.setToolTipText(Messages.MetaclassViewToolBar_showViewMenu);
- this.btnShowMenu.setImage(ImageProvider.getInstance().getViewMenuIcon());
- Listener listener = new Listener() {
- public void handleEvent(final Event event) {
- if (event.type != SWT.MouseDown
- || TreeToolBar.this.toolBar.getItem(new Point(event.x, event.y)) == TreeToolBar.this.btnShowMenu) {
- openViewMenu();
- }
- }
- };
- // no selection event is sent when clicking on Windows
- if (Platform.getOS().equals(Platform.OS_WIN32)) {
- // listen on the toolbar so that the menu can appear on MouseDown
- this.toolBar.addListener(SWT.MouseDown, listener);
- }
- // and for keyboard accessibility
- this.btnShowMenu.addListener(SWT.Selection, listener);
- }
-
- public Menu openViewMenu() {
- MenuManager menuManager = new MenuManager();
- menuManager.add(this.actionSortInstances);
- menuManager.add(this.actionShowEmptyLinks);
- menuManager.add(this.actionShowDerivedLinks);
- menuManager.add(this.actionSortLinks);
- menuManager.add(this.actionSortLinksByType);
- menuManager.add(this.actionShowFullQualifiedNames);
- menuManager.add(this.actionShowMultiplicity);
- menuManager.add(this.actionShowOrdering);
- menuManager.add(this.actionShowOppositeLinks);
- menuManager.add(this.actionShowContainer);
- menuManager.add(this.actionShowAttributes);
- menuManager.add(this.actionShowEmptyAttributes);
- menuManager.add(this.actionShowTypeOfLinks);
- menuManager.add(this.actionShowElementIDs);
- menuManager.add(this.actionShowURI);
- menuManager.add(this.actionSynchroniseModelWithSourceCode);
- Menu contextMenu = menuManager.createContextMenu(this.fParentComposite);
- Rectangle bounds = Display.getCurrent().map(this.toolBar, null,
- this.btnShowMenu.getBounds());
- contextMenu.setLocation(bounds.x, bounds.y + bounds.height);
- contextMenu.setVisible(true);
- return contextMenu;
- }
-
- private final Action actionShowTypeOfLinks = new Action(Messages.TreeToolBar_showTypeOfLinks,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showTypeOfLinks);
- setImageDescriptor(ImageProvider.getInstance().getLinkTypeIconDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowTypeOfLinks(isChecked());
- }
- };
-
- private final Action actionShowEmptyLinks = new Action(Messages.TreeToolBar_showEmptyLinks,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showEmptyLinks);
- setImageDescriptor(ImageProvider.getInstance().getEmptyLinksImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowEmptyLinks(isChecked());
- }
- };
-
- private final Action actionShowDerivedLinks = new Action(Messages.TreeToolBar_showDerivedLinks,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showDerivedLinks);
- setImageDescriptor(ImageProvider.getInstance().getShowDerivedLinksImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowDerivedLinks(isChecked());
- }
- };
-
- private final Action actionSortInstances = new Action(Messages.TreeToolBar_sortInstances,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_sortInstances);
- setImageDescriptor(ImageProvider.getInstance().getSortInstancesIcon());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setSortInstances(isChecked());
- }
- };
-
- private final Action actionSortLinks = new Action(Messages.TreeToolBar_sortLinks,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_sortLinks);
- setImageDescriptor(ImageProvider.getInstance().getSortLinksImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setSortLinks(isChecked());
- }
- };
-
- private final Action actionSortLinksByType = new Action(Messages.TreeToolBar_sortLinksByType,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_sortLinksByType);
- setImageDescriptor(ImageProvider.getInstance().getSortLinksByTypeImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setSortLinksByType(isChecked());
- }
- };
-
- private final Action actionShowFullQualifiedNames = new Action(
- Messages.TreeToolBar_showFullQualifiedNames, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showFullQualifiedNames);
- setImageDescriptor(ImageProvider.getInstance()
- .getShowFullQualifiedNamesImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowFullQualifiedNames(isChecked());
- }
- };
-
- private final Action actionShowMultiplicity = new Action(Messages.TreeToolBar_showMultiplicity,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showMultiplicity);
- setImageDescriptor(ImageProvider.getInstance().getShowMultiplicityImageDescriptor());
-
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowMultiplicity(isChecked());
- }
- };
-
- private final Action actionShowOppositeLinks = new Action(
- Messages.TreeToolBar_showOppositeLinks, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showOppositeLinks);
- setImageDescriptor(ImageProvider.getInstance().getShowOppositeLinksImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowOppositeLinks(isChecked());
- }
- };
-
- private final Action actionShowContainer = new Action(Messages.TreeToolBar_showContainer,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showContainer);
- setImageDescriptor(ImageProvider.getInstance().getContainerImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowContainer(isChecked());
- }
- };
-
- private final Action actionShowAttributes = new Action(Messages.TreeToolBar_showAttributes,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showAttributes);
- setImageDescriptor(ImageProvider.getInstance().getAttributeImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowAttributes(isChecked());
- TreeToolBar.this.actionShowEmptyAttributes.setEnabled(isChecked());
- }
- };
-
- private final Action actionShowEmptyAttributes = new Action(
- Messages.TreeToolBar_showEmptyAttributes, IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showEmptyAttributes);
- setImageDescriptor(ImageProvider.getInstance().getEmptyAttributeImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowEmptyAttributes(isChecked());
- }
- };
-
- private final Action actionShowOrdering = new Action(Messages.TreeToolBar_showOrdering,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showOrdering);
- setImageDescriptor(ImageProvider.getInstance().getOrderingImageDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowOrdering(isChecked());
- }
- };
-
- private final Action actionShowElementIDs = new Action(Messages.TreeToolBar_showElementIDs,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showElementIDs);
- setImageDescriptor(ImageProvider.getInstance().getShowElementIDsDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowElementIDs(isChecked());
- }
- };
-
- private final Action actionShowURI = new Action(Messages.TreeToolBar_showURI,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_showURI);
- setImageDescriptor(ImageProvider.getInstance().getShowURIDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setShowURI(isChecked());
- }
- };
-
- private final Action actionCollapseAll = new Action(Messages.TreeToolBar_collapseAll,
- IAction.AS_PUSH_BUTTON) {
- {
- setToolTipText(Messages.TreeToolBar_collapseAll);
- setImageDescriptor(ImageProvider.getInstance().getCollapseAllDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.getTreeViewer().collapseAll();
- }
- };
-
- private final Action actionSynchroniseModelWithSourceCode = new Action(Messages.TreeToolBar_synchronizeSourceCode,
- IAction.AS_CHECK_BOX) {
- {
- setToolTipText(Messages.TreeToolBar_synchronizeSourceCode);
- setImageDescriptor(ImageProvider.getInstance().getSynchronizeSourceCodeDescriptor());
- }
-
- @Override
- public void run() {
- TreeToolBar.this.browser.setSynchronizeSourceCode(isChecked());
- }
- };
-
- public void refresh() {
- initialize();
- }
-
- private void initialize() {
- this.actionShowEmptyLinks.setChecked(this.browser.isShowEmptyLinks());
- this.actionSortInstances.setChecked(this.browser.isSortInstances());
- this.actionSortLinks.setChecked(this.browser.isSortLinks());
- this.actionSortLinksByType.setChecked(this.browser.isSortLinksByType());
- this.actionShowDerivedLinks.setChecked(this.browser.isShowDerivedLinks());
- this.actionShowFullQualifiedNames.setChecked(this.browser.isShowFullQualifiedNames());
- this.actionShowMultiplicity.setChecked(this.browser.isShowMultiplicity());
- this.actionShowOppositeLinks.setChecked(this.browser.isShowOppositeLinks());
- this.actionShowContainer.setChecked(this.browser.isShowContainer());
- this.actionShowAttributes.setChecked(this.browser.isShowAttributes());
- this.actionShowEmptyAttributes.setChecked(this.browser.isShowEmptyAttributes());
- this.actionShowOrdering.setChecked(this.browser.isShowOrdering());
- this.actionShowTypeOfLinks.setChecked(this.browser.isShowTypeOfLinks());
- this.actionShowElementIDs.setChecked(this.browser.isShowElementIDs());
- this.actionShowURI.setChecked(this.browser.isShowURI());
- this.actionSynchroniseModelWithSourceCode.setChecked(this.browser.isSynchronizeSourceCode());
-
- this.actionShowEmptyAttributes.setEnabled(this.browser.isShowAttributes());
-
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/WorkspaceChangeListener.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/WorkspaceChangeListener.java
deleted file mode 100644
index 7b2ccc290..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/WorkspaceChangeListener.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- * Nicolas Payneau (Mia-Software) - Enable editability
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.UriUtils;
-
-/**
- * Listens to workspace changes to detect changed resources and update the
- * browser accordingly
- */
-public class WorkspaceChangeListener implements IResourceChangeListener {
-
- private final EcoreBrowser fBrowser;
-
- public WorkspaceChangeListener(final EcoreBrowser browser) {
- this.fBrowser = browser;
- }
-
- public void resourceChanged(final IResourceChangeEvent event) {
- final IResourceDelta eventDelta = event.getDelta();
- try {
- class ResourceDeltaVisitor implements IResourceDeltaVisitor {
- private final ResourceSet resourceSet = WorkspaceChangeListener.this.fBrowser
- .getEditingDomain().getResourceSet();
- private final Collection<Resource> changedResourcesDelta = new ArrayList<Resource>();
- private final Collection<Resource> removedResourcesDelta = new ArrayList<Resource>();
-
- public boolean visit(final IResourceDelta deltaResource) {
- if (deltaResource.getResource().getType() == IResource.FILE) {
- if (deltaResource.getKind() == IResourceDelta.REMOVED
- || deltaResource.getKind() == IResourceDelta.CHANGED
- && deltaResource.getFlags() != IResourceDelta.MARKERS) {
- final String resourcePath = deltaResource.getFullPath().toString();
- final Resource resource = this.resourceSet.getResource(UriUtils
- .createUri(resourcePath), false);
- if (resource != null) {
- if (deltaResource.getKind() == IResourceDelta.REMOVED) {
- this.removedResourcesDelta.add(resource);
- } else if (!WorkspaceChangeListener.this.fBrowser
- .getSavedResources().remove(resource)) {
- this.changedResourcesDelta.add(resource);
- }
- }
- }
- }
-
- return true;
- }
-
- public Collection<Resource> getChangedResources() {
- return this.changedResourcesDelta;
- }
-
- public Collection<Resource> getRemovedResources() {
- return this.removedResourcesDelta;
- }
- }
-
- final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
- eventDelta.accept(visitor);
-
- if (!visitor.getRemovedResources().isEmpty()) {
- WorkspaceChangeListener.this.fBrowser.getSite().getShell().getDisplay().asyncExec(
- new Runnable() {
- public void run() {
- WorkspaceChangeListener.this.fBrowser.getRemovedResources().addAll(
- visitor.getRemovedResources());
- if (!WorkspaceChangeListener.this.fBrowser.isDirty()) {
- WorkspaceChangeListener.this.fBrowser.getSite().getPage()
- .closeEditor(WorkspaceChangeListener.this.fBrowser,
- false);
- }
- }
- });
- }
-
- if (!visitor.getChangedResources().isEmpty()) {
- WorkspaceChangeListener.this.fBrowser.getSite().getShell().getDisplay().asyncExec(
- new Runnable() {
- public void run() {
- WorkspaceChangeListener.this.fBrowser.getChangedResources().addAll(
- visitor.getChangedResources());
- if (WorkspaceChangeListener.this.fBrowser.getSite().getPage()
- .getActiveEditor() == WorkspaceChangeListener.this.fBrowser) {
- WorkspaceChangeListener.this.fBrowser.handleActivate();
- }
- }
- });
- }
- } catch (CoreException exception) {
- MoDiscoBrowserPlugin.logException(exception);
- }
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ColumnDescription.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ColumnDescription.java
deleted file mode 100644
index 2d844c987..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ColumnDescription.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-/** A description of what to show in a column */
-public class ColumnDescription {
- /** The possible column types */
- public enum Type {
- DEFAULT_LABEL, METACLASS_NAME, ATTRIBUTE, REFERENCE, ECONTAINER, CONTEXT
- }
-
- /** The type of this column */
- private final Type type;
- /**
- * The attribute displayed in the column, when <code>type</code> is
- * {@link Type#ATTRIBUTE}
- */
- private EAttribute fAttribute = null;
- /**
- * The reference displayed in the column, when <code>type</code> is
- * {@link Type#REFERENCE}
- */
- private EReference fReference = null;
-
- public ColumnDescription(final Type type) {
- this.type = type;
- }
-
- public ColumnDescription(final EAttribute attribute) {
- this.type = ColumnDescription.Type.ATTRIBUTE;
- this.fAttribute = attribute;
- }
-
- public ColumnDescription(final EReference reference) {
- this.fReference = reference;
- this.type = ColumnDescription.Type.REFERENCE;
- }
-
- public ColumnDescription(final EStructuralFeature feature) {
- if (feature instanceof EAttribute) {
- EAttribute attribute = (EAttribute) feature;
- this.fAttribute = attribute;
- this.type = ColumnDescription.Type.ATTRIBUTE;
- } else if (feature instanceof EReference) {
- EReference reference = (EReference) feature;
- this.fReference = reference;
- this.type = ColumnDescription.Type.REFERENCE;
- } else {
- throw new IllegalArgumentException();
- }
- }
-
- public Type getType() {
- return this.type;
- }
-
- public EAttribute getAttribute() {
- if (this.type != ColumnDescription.Type.ATTRIBUTE) {
- throw new IllegalStateException();
- }
-
- return this.fAttribute;
- }
-
- public EReference getReference() {
- if (this.type != ColumnDescription.Type.REFERENCE) {
- throw new IllegalStateException();
- }
-
- return this.fReference;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ITableEditor.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ITableEditor.java
deleted file mode 100644
index b949a3f89..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/ITableEditor.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-public interface ITableEditor {
-
- void setSortColumnsByType(boolean value);
-
- void setHideEmptyColumns(boolean value);
-
- void setOnlyShowCommonColumns(boolean value);
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditor.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditor.java
deleted file mode 100644
index 9a6a6a5c7..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditor.java
+++ /dev/null
@@ -1,1118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.emf.common.ui.URIEditorInput;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.core.ModelElementItemEx;
-import org.eclipse.gmt.modisco.infra.browser.custom.MetamodelView;
-import org.eclipse.gmt.modisco.infra.browser.custom.core.CustomizationsCatalog;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.ColumnDescription.Type;
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditorInput.ElementsDescription;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.customization.CustomizationEngine;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.LinkItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.model.ModelElementItem;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.StringUtils;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.editorInputs.ResourceEditorInput;
-import org.eclipse.gmt.modisco.infra.facet.FacetStructuralFeature;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetContext;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.viewers.CellNavigationStrategy;
-import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.TableViewerFocusCellManager;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerCell;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IPartListener;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.part.EditorPart;
-import org.eclipse.ui.part.FileEditorInput;
-
-public class TableEditor extends EditorPart implements ISelectionProvider, IMenuListener,
- ITableEditor {
-
- private static final int LABEL_COLUMN_WIDTH = 125;
- private static final int DEFAULT_COLUMN_WIDTH = 100;
- private static final int MAX_INITIAL_COLUMN_WIDTH = 300;
- public static final String EDITOR_ID = "org.eclipse.gmt.modisco.infra.browser.table.editorID"; //$NON-NLS-1$
- /**
- * The number of items above which a virtual table is used. The virtual
- * style is not always used because it prevents correct packing of columns
- * (since the elements' labels are not computed in advance).
- */
- private static final int USE_VIRTUAL_THRESHOLD = 1000;
-
- /** The data key for columns that are hidden because they are empty */
- private static final String KEY_EMPTY_HIDDEN = "emptyHidden"; //$NON-NLS-1$
-
- /**
- * The data key for columns that are hidden because the feature (attribute
- * or reference) they represent is not common to all the elements
- */
- private static final String KEY_NOT_COMMON_HIDDEN = "notCommonHidden"; //$NON-NLS-1$
-
- private TableViewer tableViewer;
- private TableEditorInput tableEditorInput;
- private TableEditorLabelProvider tableEditorLabelProvider;
- private List<ColumnDescription> columnsConfiguration;
- private TableEditorToolBar toolBar;
- private TableEditorContentProvider tableEditorContentProvider;
- private TableViewerFocusCellManager tableViewerFocusCellManager;
- private final Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
-
- @Override
- public void init(final IEditorSite site, final IEditorInput input) throws PartInitException {
- if (input instanceof TableEditorInput) {
- this.tableEditorInput = (TableEditorInput) input;
- setSite(site);
- setInput(this.tableEditorInput);
- setPartName(Messages.TableEditor_tableViewer);
- } else {
- throw new PartInitException("Input should be of type TableEditorInput"); //$NON-NLS-1$
- }
- }
-
- protected TableEditorInput getTableEditorInput() {
- return this.tableEditorInput;
- }
-
- @Override
- public void createPartControl(final Composite parent) {
-
- final Composite editorComposite = new Composite(parent, SWT.NONE);
- final GridLayout gridLayout = new GridLayout(1, false);
- gridLayout.marginHeight = 0;
- gridLayout.marginWidth = 2;
- editorComposite.setLayout(gridLayout);
-
- createToolBar(editorComposite);
- this.toolBar.setLabelText(this.tableEditorInput.getDescription());
-
- final GridData tableGridData = new GridData();
- tableGridData.grabExcessHorizontalSpace = true;
- tableGridData.grabExcessVerticalSpace = true;
- tableGridData.horizontalAlignment = SWT.FILL;
- tableGridData.verticalAlignment = SWT.FILL;
-
- int virtualFlag = 0;
- if (this.tableEditorInput.getElements().size() > TableEditor.USE_VIRTUAL_THRESHOLD) {
- virtualFlag = SWT.VIRTUAL;
- }
-
- loadDefaultCustomizations();
-
- this.tableViewer = new TableViewer(editorComposite, SWT.SINGLE | SWT.H_SCROLL
- | SWT.V_SCROLL | SWT.FULL_SELECTION | virtualFlag);
-
- FocusCellOwnerDrawHighlighter focusCellOwnerDrawHighlighter = new FocusCellOwnerDrawHighlighter(
- this.tableViewer);
- this.tableViewerFocusCellManager = new TableViewerFocusCellManager(this.tableViewer,
- focusCellOwnerDrawHighlighter);
-
- this.tableViewer.getTable().setLayoutData(tableGridData);
-
- // use the same font size as in the main editor
- this.tableViewer.getTable().setFont(
- this.tableEditorInput.getBrowserConfiguration().getAppearanceConfiguration()
- .getCustomFont());
- this.tableViewer.getTable().setLinesVisible(true);
- this.tableViewer.getTable().setHeaderVisible(true);
-
- this.tableEditorContentProvider = new TableEditorContentProvider();
- this.columnsConfiguration = createColumnConfiguration();
-
- this.tableEditorLabelProvider = new TableEditorLabelProvider(this.columnsConfiguration,
- this.tableEditorInput.getBrowserConfiguration());
-
- createColumns(this.columnsConfiguration);
-
- this.tableViewer.setContentProvider(this.tableEditorContentProvider);
- this.tableViewer.setLabelProvider(this.tableEditorLabelProvider);
- this.tableViewer.setInput(this.tableEditorInput);
-
- this.tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(final SelectionChangedEvent event) {
- tableSelectionChanged();
- }
- });
-
- // notify listeners when selecting a cell using the keyboard
- this.tableViewer.getTable().addKeyListener(new KeyListener() {
- private final CellNavigationStrategy cellNavigationStrategy = new CellNavigationStrategy();
-
- public void keyReleased(final KeyEvent e) {
- // nothing
- }
-
- public void keyPressed(final KeyEvent e) {
- Event event = new Event();
- event.keyCode = e.keyCode;
- if (this.cellNavigationStrategy.isNavigationEvent(null, event)) {
- tableSelectionChanged();
- }
- }
- });
-
- createContextMenuFor(this.tableViewer);
- registerOpenListeners();
- registerCloseWhenMainEditorClosed();
-
- getSite().setSelectionProvider(this);
-
- packColumns();
- }
-
- protected void tableSelectionChanged() {
- for (ISelectionChangedListener listener : new ArrayList<ISelectionChangedListener>(
- this.selectionChangedListeners)) {
- listener.selectionChanged(new SelectionChangedEvent(this, getSelection()));
- }
- }
-
- private void createToolBar(final Composite parent) {
- final Composite toolBarComposite = new Composite(parent, SWT.NONE);
- this.toolBar = new TableEditorToolBar(toolBarComposite, this);
- }
-
- private void registerCloseWhenMainEditorClosed() {
- final EcoreBrowser editor = this.tableEditorInput.getBrowserConfiguration().getEditor();
- if (editor == null) {
- return;
- }
-
- editor.getEditorSite().getPage().addPartListener(new IPartListener() {
-
- public void partClosed(final IWorkbenchPart part) {
- final EcoreBrowser browser = TableEditor.this.tableEditorInput
- .getBrowserConfiguration().getEditor();
- if (browser != null && part == browser) {
- TableEditor.this.getSite().getPage().closeEditor(TableEditor.this, false);
- part.getSite().getPage().removePartListener(this);
- }
- }
-
- public void partOpened(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partDeactivated(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partBroughtToTop(final IWorkbenchPart part) {
- // nothing
- }
-
- public void partActivated(final IWorkbenchPart part) {
- // nothing
- }
- });
- }
-
- /**
- * Registers listeners used to open an element in the main editor by
- * double-click or &lt;Enter&gt;
- */
- private void registerOpenListeners() {
- // double-click
- this.tableViewer.getTable().addMouseListener(new MouseAdapter() {
- @Override
- public void mouseDoubleClick(final MouseEvent e) {
- final ViewerCell cell = TableEditor.this.tableViewer.getCell(new Point(e.x, e.y));
- int column;
- if (cell == null) {
- column = 0;
- } else {
- column = cell.getColumnIndex();
- }
-
- openSelectionInModelBrowser(column);
- }
- });
-
- // enter
- this.tableViewer.getTable().addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(final KeyEvent e) {
- if (e.keyCode == SWT.CR) {
- openSelectionInModelBrowser(0);
- }
- }
- });
- }
-
- /** pack the table's columns with a limit on max width */
- private void packColumns() {
- final TableColumn[] tableColumns = this.tableViewer.getTable().getColumns();
- for (final TableColumn tableColumn : tableColumns) {
- tableColumn.pack();
- if (tableColumn.getWidth() > TableEditor.MAX_INITIAL_COLUMN_WIDTH) {
- tableColumn.setWidth(TableEditor.MAX_INITIAL_COLUMN_WIDTH);
- }
- }
- }
-
- /** Create a configuration about what to display in columns */
- protected List<ColumnDescription> createColumnConfiguration() {
- ElementsDescription elementsDescription = this.tableEditorInput.getElementsDescription();
-
- final ArrayList<ColumnDescription> columns = new ArrayList<ColumnDescription>();
- if (showLabelColumn()) {
- columns.add(new ColumnDescription(ColumnDescription.Type.DEFAULT_LABEL));
- }
- if (showMetaclassColumn()) {
- columns.add(new ColumnDescription(ColumnDescription.Type.METACLASS_NAME));
- }
- if (elementsDescription.containsEObjects() && showEContainerColumn()) {
- columns.add(new ColumnDescription(ColumnDescription.Type.ECONTAINER));
- }
- if (elementsDescription.containsContexts()) {
- // context, for query results
- columns.add(new ColumnDescription(ColumnDescription.Type.CONTEXT));
- }
-
- for (final EStructuralFeature feature : this.tableEditorInput.getFeatures()) {
- columns.add(new ColumnDescription(feature));
- }
-
- // // first, non-derived references
- // for (final EReference reference :
- // this.tableEditorInput.getReferences()) {
- // if (!reference.isDerived()) {
- // columns.add(new ColumnDescription(reference));
- // }
- // }
- //
- // // then derived references
- // for (final EReference reference :
- // this.tableEditorInput.getReferences()) {
- // if (reference.isDerived()) {
- // columns.add(new ColumnDescription(reference));
- // }
- // }
-
- return columns;
- }
-
- protected boolean showLabelColumn() {
- return true;
- }
-
- protected boolean showMetaclassColumn() {
- return true;
- }
-
- protected boolean showEContainerColumn() {
- return true;
- }
-
- /** Whether no element has this reference set */
- private boolean isEmpty(final EReference reference) {
- final Object[] elements = this.tableEditorContentProvider
- .getElements(this.tableEditorInput);
- FacetContext facetContext = this.tableEditorInput.getBrowserConfiguration()
- .getAppearanceConfiguration().getFacetContext();
- for (final Object e : elements) {
- TableElement tableElement = (TableElement) e;
- Object element = tableElement.getElement();
- if (element instanceof EObject) {
- final EObject eObject = (EObject) element;
- if (hasStructuralFeature(eObject, reference, facetContext)) {
- final Object value = getStructuralFeatureValue(eObject, reference,
- getFacetContext());
- if (reference.isMany()) {
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) value;
- if (!list.isEmpty()) {
- return false;
- }
- } else {
- if (value != null) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
-
- /** Whether no element has this attribute set */
- private boolean isEmpty(final EAttribute attribute) {
- final Object[] elements = this.tableEditorContentProvider
- .getElements(this.tableEditorInput);
- FacetContext facetContext = this.tableEditorInput.getBrowserConfiguration()
- .getAppearanceConfiguration().getFacetContext();
- for (final Object e : elements) {
- TableElement tableElement = (TableElement) e;
- Object element = tableElement.getElement();
- if (element instanceof EObject) {
- final EObject eObject = (EObject) element;
- if (hasStructuralFeature(eObject, attribute, facetContext)) {
- final Object value = getStructuralFeatureValue(eObject, attribute,
- getFacetContext());
- if (attribute.isMany()) {
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) value;
- if (!list.isEmpty()) {
- return false;
- }
- } else {
- if (value != null) {
- return false;
- }
- }
- }
- }
- }
- return true;
- }
-
- private void createColumns(final List<ColumnDescription> columns) {
- int columnIndex = 0;
- for (final ColumnDescription columnDescription : columns) {
- final TableViewerColumn column = new TableViewerColumn(this.tableViewer, SWT.NONE);
- final TableColumn tableColumn = column.getColumn();
- tableColumn.setWidth(TableEditor.DEFAULT_COLUMN_WIDTH);
- tableColumn.setResizable(true);
- tableColumn.setMoveable(true);
- column.getColumn().setData(columnDescription);
-
- switch (columnDescription.getType()) {
- // shows the same thing as in model browser tree
- case DEFAULT_LABEL:
- tableColumn.setText(Messages.TableEditor_columnName_Label);
- tableColumn.setWidth(TableEditor.LABEL_COLUMN_WIDTH);
- break;
- case METACLASS_NAME:
- tableColumn.setText(Messages.TableEditor_columnName_Metaclass);
- break;
- case CONTEXT:
- tableColumn.setText(Messages.TableEditor_ColumnName_queryContext);
- break;
- case ECONTAINER:
- tableColumn.setText("/eContainer"); //$NON-NLS-1$
- break;
- case ATTRIBUTE:
- final EAttribute attribute = columnDescription.getAttribute();
- if (attribute.isDerived()) {
- tableColumn.setText("/" + attribute.getName()); //$NON-NLS-1$
- } else {
- tableColumn.setText(attribute.getName());
- }
- tableColumn.setImage(ImageProvider.getInstance().getAttributeIcon());
- break;
- case REFERENCE:
- final EReference reference = columnDescription.getReference();
- final String multiplicity;
- if (showMultiplicityInColumnNames()) {
- multiplicity = LinkItem.getMultiplicity(reference);
- } else {
- multiplicity = ""; //$NON-NLS-1$
- }
- if (reference.isDerived()) {
- tableColumn.setText("/" + reference.getName() + multiplicity); //$NON-NLS-1$
- } else {
- tableColumn.setText(reference.getName() + multiplicity);
- }
-
- tableColumn.setImage(LinkItem.getImageFor(reference));
- // tableColumn.setImage(ImageProvider.getInstance().getLinkIcon());
- break;
- default:
- MoDiscoBrowserPlugin.logWarning("Unhandled column description type"); //$NON-NLS-1$
- }
-
- final int fColumnIndex = columnIndex;
- @SuppressWarnings("unused")
- TableSorter tableSorter = new TableSorter(this.tableViewer, column) {
- @Override
- protected int doCompare(final Viewer viewer, final Object e1, final Object e2) {
- // reuse the label provider to get the name to compare
- final String label1 = TableEditor.this.tableEditorLabelProvider.getColumnText(
- e1, fColumnIndex);
- final String label2 = TableEditor.this.tableEditorLabelProvider.getColumnText(
- e2, fColumnIndex);
- return label1.compareToIgnoreCase(label2);
- }
- };
-
- columnIndex++;
- }
- }
-
- protected boolean showMultiplicityInColumnNames() {
- return true;
- }
-
- @Override
- public void setFocus() {
- if (this.tableViewer != null) {
- this.tableViewer.getTable().setFocus();
- }
- }
-
- /**
- * Whether the table editor can be opened on the given selection.
- * <code>true</code> if the selection is a link or a collection of model
- * objects.
- */
- public static boolean canBeOpenedOnSelection(final ISelection selection) {
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- if (structuredSelection.size() == 1
- && structuredSelection.getFirstElement() instanceof LinkItem) {
- final LinkItem linkItem = (LinkItem) structuredSelection.getFirstElement();
- return linkItem.getChildren().size() > 0;
- }
-
- boolean empty = true;
- final Iterator<?> iterator = structuredSelection.iterator();
- while (iterator.hasNext()) {
- final Object selectedElement = iterator.next();
- if (selectedElement instanceof ModelElementItem) {
- empty = false;
- } else {
- return false;
- }
- }
- return !empty;
- }
- return false;
- }
-
- private void openSelectionInModelBrowser(final int column) {
- final EObject element = findElementToOpenInModelBrowser(column);
- if (element != null) {
- openElementInModelBrowser(element);
- }
- }
-
- /** @return the first selected element or <code>null</code> if none */
- private TableElement getSelectedElement() {
- final ISelection selection = this.tableViewer.getSelection();
- if (selection instanceof IStructuredSelection) {
- final IStructuredSelection structuredSelection = (IStructuredSelection) selection;
- return (TableElement) structuredSelection.getFirstElement();
- }
- return null;
- }
-
- public EObject findElementToOpenInModelBrowser(final int column) {
- return findElementToOpenInModelBrowser(column, getFacetContext(),
- this.columnsConfiguration, getSelectedElement());
- }
-
- /**
- * Find and return the element that should be opened when the given column
- * is clicked
- *
- * @param tableElement
- */
- public static EObject findElementToOpenInModelBrowser(final int column,
- final FacetContext facetContext, final List<ColumnDescription> columnDescriptions,
- final TableElement mainElement) {
- if (mainElement == null) {
- return null;
- }
- final EObject mainModelElement;
- if (mainElement.getElement() instanceof EObject) {
- mainModelElement = (EObject) mainElement.getElement();
- } else {
- mainModelElement = null;
- }
-
- EObject targetObject = null;
- final ColumnDescription columnDescription = columnDescriptions.get(column);
- final Object value;
- switch (columnDescription.getType()) {
- case ATTRIBUTE:
- if (mainModelElement != null
- && hasStructuralFeature(mainModelElement, columnDescription.getAttribute(),
- facetContext)) {
- value = getStructuralFeatureValue(mainModelElement,
- columnDescription.getAttribute(), facetContext);
- if (value instanceof EObject) {
- targetObject = (EObject) value;
- }
- }
- break;
- case REFERENCE:
- if (mainModelElement != null
- && hasStructuralFeature(mainModelElement, columnDescription.getReference(),
- facetContext)) {
- value = getStructuralFeatureValue(mainModelElement,
- columnDescription.getReference(), facetContext);
- if (columnDescription.getReference().isMany()) {
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) value;
- if (list.size() == 1) {
- targetObject = list.get(0);
- }
- } else {
- targetObject = (EObject) value;
- }
- }
- break;
- case ECONTAINER:
- if (mainModelElement != null) {
- targetObject = mainModelElement.eContainer();
- }
- break;
- case CONTEXT:
- if (mainElement instanceof TableElementWithContext) {
- TableElementWithContext tableElementWithContext = (TableElementWithContext) mainElement;
- targetObject = tableElementWithContext.getContext();
- }
- break;
- case DEFAULT_LABEL:
- targetObject = mainModelElement;
- break;
- default:
- break;
- }
-
- if (targetObject != null) {
- return targetObject;
- }
- return null;
- }
-
- private void openElementInModelBrowser(final EObject element) {
- final EcoreBrowser editor = TableEditor.this.tableEditorInput.getBrowserConfiguration()
- .getEditor();
- if (editor != null) {
- editor.getSite().getPage().activate(editor);
- editor.browseTo(element);
- } else {
- // try to re-open the element in the same browser it came from
- Resource resource = element.eResource();
- if (resource != null) {
- ResourceSet resourceSet = resource.getResourceSet();
- IEditorReference[] editorReferences = getSite().getPage().getEditorReferences();
- for (IEditorReference editorReference : editorReferences) {
- IEditorPart anEditor = editorReference.getEditor(false);
- if (anEditor instanceof EcoreBrowser) {
- EcoreBrowser browser = (EcoreBrowser) anEditor;
- if (browser.getResourceSet() == resourceSet) {
- browser.browseTo(element);
- browser.getSite().getPage().activate(browser);
- return;
- }
- }
- }
- }
-
- // if that failed (the editor is now closed maybe), then open a new
- // model browser and select the element
- final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage();
- try {
- final URI elementURI = EcoreUtil.getURI(element);
- URI resourceURI = elementURI.trimFragment();
- final IEditorInput editorInput;
- if (resourceURI.isPlatformResource()) {
- String platformString = resourceURI.toPlatformString(true);
- IResource res = ResourcesPlugin.getWorkspace().getRoot()
- .findMember(platformString);
- if (res instanceof IFile) {
- IFile file = (IFile) res;
- editorInput = new FileEditorInput(file);
- } else {
- MoDiscoBrowserPlugin.logError("Cannot open model: " + resourceURI); //$NON-NLS-1$
- return;
- }
- } else if (EPackage.Registry.INSTANCE.containsKey(resourceURI.toString())) {
- editorInput = new URIEditorInput(resourceURI);
- } else {
- // open a model browser on a new resource containing the
- // element
- ResourceSet resourceSet = new ResourceSetImpl();
- Resource tempResource = resourceSet.createResource(URI
- .createURI("http://modisco/browser/table/temp")); //$NON-NLS-1$
- tempResource.getContents().add(element);
- editorInput = new ResourceEditorInput(tempResource);
- }
-
- IEditorPart newEditor = IDE.openEditor(activePage, editorInput,
- EcoreBrowser.EDITOR_ID, true);
- if (newEditor instanceof EcoreBrowser) {
- EcoreBrowser browser = (EcoreBrowser) newEditor;
- String uriFragment = element.eResource().getURIFragment(element);
- browser.browseToByURI(uriFragment);
- }
- } catch (final PartInitException e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
- }
-
- @Override
- public boolean isDirty() {
- return false;
- }
-
- @Override
- public boolean isSaveAsAllowed() {
- return false;
- }
-
- @Override
- public void doSave(final IProgressMonitor monitor) {
- // nothing
- }
-
- @Override
- public void doSaveAs() {
- // nothing
- }
-
- /** Hide columns which don't contain any elements */
- public void setHideEmptyColumns(final boolean hideEmptyColumns) {
- try {
- this.tableViewer.getControl().setRedraw(false);
- for (final ColumnDescription columnDescription : this.columnsConfiguration) {
- boolean bEmpty = false;
- if (columnDescription.getType() == Type.ATTRIBUTE) {
- bEmpty = isEmpty(columnDescription.getAttribute());
- } else if (columnDescription.getType() == Type.REFERENCE) {
- bEmpty = isEmpty(columnDescription.getReference());
- }
-
- final TableColumn column = findColumn(columnDescription);
- if (hideEmptyColumns && bEmpty) {
- if (column != null) {
- // indicates that the column is hidden because it is
- // empty
- column.setData(TableEditor.KEY_EMPTY_HIDDEN, Boolean.TRUE);
- hideColumn(column);
- }
- } else if (!hideEmptyColumns
- && Boolean.TRUE == column.getData(TableEditor.KEY_EMPTY_HIDDEN)) {
- column.setData(TableEditor.KEY_EMPTY_HIDDEN, Boolean.FALSE);
- showEmptyColumn(column);
- }
- }
- } finally {
- this.tableViewer.getControl().setRedraw(true);
- }
- }
-
- /**
- * Sort columns by type of link (attributes first, then references, then
- * derived references, ...)
- */
- public void setSortColumnsByType(final boolean bSort) {
- try {
- this.tableViewer.getControl().setRedraw(false);
- TableColumn[] columns = this.tableViewer.getTable().getColumns();
- int[] order = new int[columns.length];
- if (bSort) {
- int i = 0;
- for (int j = 0; j < this.columnsConfiguration.size(); j++) {
- ColumnDescription columnDescription = this.columnsConfiguration.get(j);
- if (columnDescription.getType() == Type.CONTEXT
- || columnDescription.getType() == Type.DEFAULT_LABEL
- || columnDescription.getType() == Type.ECONTAINER
- || columnDescription.getType() == Type.METACLASS_NAME) {
- order[i++] = j;
- }
- }
-
- for (int j = 0; j < this.columnsConfiguration.size(); j++) {
- ColumnDescription columnDescription = this.columnsConfiguration.get(j);
- if (columnDescription.getType() == Type.ATTRIBUTE) {
- order[i++] = j;
- }
- }
-
- final class Link {
- private final int index;
- private final EReference reference;
-
- private Link(final int index, final EReference reference) {
- this.index = index;
- this.reference = reference;
- }
- }
-
- List<Link> links = new ArrayList<Link>();
- for (int j = 0; j < this.columnsConfiguration.size(); j++) {
- ColumnDescription columnDescription = this.columnsConfiguration.get(j);
- if (columnDescription.getType() == Type.REFERENCE) {
- links.add(new Link(j, columnDescription.getReference()));
- }
- }
-
- Collections.sort(links, new Comparator<Link>() {
- public int compare(final Link o1, final Link o2) {
- final int r1 = ModelElementItem.getReferenceRank(o1.reference);
- final int r2 = ModelElementItem.getReferenceRank(o2.reference);
- return r1 - r2;
- }
- });
-
- for (Link link : links) {
- order[i++] = link.index;
- }
-
- } else {
- for (int i = 0; i < columns.length; i++) {
- order[i] = i;
- }
- }
- this.tableViewer.getTable().setColumnOrder(order);
-
- } catch (Exception e) {
- MoDiscoLogger.logError(e, "Error sorting columns by type", //$NON-NLS-1$
- MoDiscoBrowserPlugin.getPlugin());
- } finally {
- this.tableViewer.getControl().setRedraw(true);
- }
- }
-
- /**
- * Whether to show columns which are specific to a few elements (false), or
- * only columns which are common to all the elements (true)
- */
- public void setOnlyShowCommonColumns(final boolean onlyShowCommonColumns) {
- try {
- this.tableViewer.getControl().setRedraw(false);
- final EClass[] metaclasses = this.tableEditorInput.getMetaclasses();
-
- for (final ColumnDescription columnDescription : this.columnsConfiguration) {
- boolean common = true;
- if (columnDescription.getType() == Type.ATTRIBUTE) {
- common = isCommon(columnDescription.getAttribute(), metaclasses);
- } else if (columnDescription.getType() == Type.REFERENCE) {
- common = isCommon(columnDescription.getReference(), metaclasses);
- }
-
- final TableColumn column = findColumn(columnDescription);
- if (onlyShowCommonColumns && !common) {
- if (column != null) {
- // indicates that the column is hidden because its
- // feature
- // is not common to all the elements
- column.setData(TableEditor.KEY_NOT_COMMON_HIDDEN, Boolean.TRUE);
- hideColumn(column);
- }
- } else if (!onlyShowCommonColumns
- && Boolean.TRUE == column.getData(TableEditor.KEY_NOT_COMMON_HIDDEN)) {
- column.setData(TableEditor.KEY_NOT_COMMON_HIDDEN, Boolean.FALSE);
- showEmptyColumn(column);
- }
- }
- } finally {
- this.tableViewer.getControl().setRedraw(true);
- }
- }
-
- /** Hide the given table column */
- private void hideColumn(final TableColumn column) {
- column.setWidth(0);
- column.setResizable(false);
- }
-
- /** Show the given column after checking that it shouldn't be hidden anymore */
- private void showEmptyColumn(final TableColumn column) {
- if (Boolean.TRUE != column.getData(TableEditor.KEY_EMPTY_HIDDEN)
- && Boolean.TRUE != column.getData(TableEditor.KEY_NOT_COMMON_HIDDEN)) {
- column.pack();
- column.setResizable(true);
- }
- }
-
- /** @return whether the given feature is common to all the given metaclasses */
- private boolean isCommon(final EStructuralFeature feature, final EClass[] metaclasses) {
- for (final EClass metaclass : metaclasses) {
- if (!metaclass.getEAllStructuralFeatures().contains(feature)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Find the column with the given {@link ColumnDescription}
- *
- * @return the column
- */
- private TableColumn findColumn(final ColumnDescription columnDescription) {
- final TableColumn[] columns = this.tableViewer.getTable().getColumns();
- for (final TableColumn tableColumn : columns) {
- if (tableColumn.getData() == columnDescription) {
- return tableColumn;
- }
- }
- return null;
- }
-
- /**
- * Get a descriptive label that will be shown when a table editor is opened
- * on the given reference
- */
- public static String getEditorDescriptionFor(final EObject parent, final EReference reference,
- final BrowserConfiguration browserConfiguration) {
-
- final String parentLabel = new ModelElementItemEx(parent, null, browserConfiguration)
- .getText();
- return NLS.bind(Messages.TableEditor_contentsDescription, parentLabel, reference.getName());
- }
-
- private static Object getStructuralFeatureValue(final EObject eObject,
- final EStructuralFeature structuralFeature, final FacetContext facetContext) {
- if (structuralFeature instanceof FacetStructuralFeature) {
- try {
- return facetContext.get(eObject, structuralFeature);
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- return null;
- }
- }
- return eObject.eGet(structuralFeature);
- }
-
- private static boolean hasStructuralFeature(final EObject eObject,
- final EStructuralFeature structuralFeature, final FacetContext facetContext) {
- final EClass eClass = eObject.eClass();
- if (facetContext.getFacetFeatures(eObject).contains(structuralFeature)) {
- return true;
- }
- return eClass.getEAllStructuralFeatures().contains(structuralFeature);
- }
-
- public void addSelectionChangedListener(final ISelectionChangedListener listener) {
- if (!this.selectionChangedListeners.contains(listener)) {
- this.selectionChangedListeners.add(listener);
- }
- }
-
- public ISelection getSelection() {
- ViewerCell focusCell = this.tableViewerFocusCellManager.getFocusCell();
- if (focusCell == null) {
- return new StructuredSelection();
- }
- int columnIndex = focusCell.getColumnIndex();
- EObject eObject = findElementToOpenInModelBrowser(columnIndex);
- if (eObject == null) {
- return new StructuredSelection();
- }
- return new StructuredSelection(eObject);
- }
-
- private FacetContext getFacetContext() {
- return this.tableEditorInput.getBrowserConfiguration().getAppearanceConfiguration()
- .getFacetContext();
- }
-
- public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
- this.selectionChangedListeners.remove(listener);
- }
-
- public void setSelection(final ISelection selection) {
- this.tableViewer.setSelection(selection);
- }
-
- /**
- * Create a context menu for the viewer, add a listener, and register the
- * menu for extension.
- */
- protected void createContextMenuFor(final StructuredViewer viewer) {
- final MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
- contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
- contextMenu.setRemoveAllWhenShown(true);
- contextMenu.addMenuListener(this);
- final Menu menu = contextMenu.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(menu);
- getSite().registerContextMenu(contextMenu, this);
- }
-
- public void menuAboutToShow(final IMenuManager menuManager) {
- int columnIndex = this.tableViewerFocusCellManager.getFocusCell().getColumnIndex();
- final ColumnDescription columnDescription = TableEditor.this.columnsConfiguration
- .get(columnIndex);
-
- EObject element = null;
- final TableElement mainElement = getSelectedElement();
-
- final EObject mainModelElement;
- if (columnDescription.getType() == Type.CONTEXT) {
- mainModelElement = ((TableElementWithContext) mainElement).getContext();
- } else {
- if (mainElement != null && mainElement.getElement() instanceof EObject) {
- mainModelElement = (EObject) mainElement.getElement();
- } else {
- return;
- }
- }
-
- if (columnDescription.getType() == Type.REFERENCE) {
- boolean oneElement = true;
- if (columnDescription.getReference().isMany()) {
- // test whether the many-valued list has only 1 element
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) getStructuralFeatureValue(
- mainModelElement, columnDescription.getReference(), getFacetContext());
- oneElement = list.size() == 1;
- }
-
- if (oneElement) {
- element = findElementToOpenInModelBrowser(columnIndex);
- if (element != null) {
- createBrowseMenuItemFor(element, menuManager);
- }
- } else {
- createViewInTableMenuItemFor(mainModelElement, columnDescription.getReference(),
- menuManager);
- }
- } else if (columnDescription.getType() == Type.ECONTAINER) {
- element = mainModelElement.eContainer();
- if (element != null) {
- createBrowseMenuItemFor(element, menuManager);
- }
- }
-
- if (element != mainModelElement) {
- createBrowseMenuItemFor(mainModelElement, menuManager);
- }
- }
-
- private void createBrowseMenuItemFor(final EObject element, final IMenuManager menuManager) {
- if (element == null) {
- return;
- }
-
- final String text = TableEditor.this.tableEditorLabelProvider.getTextFor(element);
- menuManager.add(new Action(NLS.bind(Messages.TableEditor_browse,
- StringUtils.truncateBeforeNewline(text))) {
- @Override
- public void run() {
- openElementInModelBrowser(element);
- }
- });
- }
-
- private void createViewInTableMenuItemFor(final EObject parentElement,
- final EReference reference, final IMenuManager menuManager) {
- @SuppressWarnings("unchecked")
- final EList<EObject> elements = (EList<EObject>) getStructuralFeatureValue(parentElement,
- reference, getFacetContext());
-
- menuManager.add(new Action(Messages.openTableEditorOnSelection) {
- @Override
- public boolean isEnabled() {
- return elements.size() > 0;
- }
-
- @Override
- public void run() {
- final BrowserConfiguration browserConfiguration = TableEditor.this.tableEditorInput
- .getBrowserConfiguration();
- final String description = getEditorDescriptionFor(parentElement, reference,
- browserConfiguration);
- getFactory().openOn(TableEditor.this.tableEditorInput.getBrowserConfiguration(),
- elements, description);
- }
-
- });
- }
-
- /** Override to open with a subclassed factory */
- protected TableEditorFactory getFactory() {
- return TableEditorFactory.getInstance();
- }
-
- protected CustomizationEngine getCustomizationEngine() {
- return this.tableEditorInput.getBrowserConfiguration().getAppearanceConfiguration()
- .getCustomizationEngine();
- }
-
- public void loadCustomizations(final List<MetamodelView> customizationsToLoad) {
- final CustomizationEngine customizationEngine = getCustomizationEngine();
- customizationEngine.clear();
- for (final MetamodelView customizationToLoad : customizationsToLoad) {
- customizationEngine.registerCustomization(customizationToLoad);
- }
- customizationEngine.loadCustomizations();
- }
-
- private void loadDefaultCustomizations() {
- if (getCustomizationEngine().getRegisteredCustomizations().isEmpty()) {
- loadCustomizations(CustomizationsCatalog.getInstance()
- .getRegistryDefaultCustomizations());
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorContentProvider.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorContentProvider.java
deleted file mode 100644
index 0db77c627..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorContentProvider.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import java.util.List;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-
-public class TableEditorContentProvider implements IStructuredContentProvider {
-
- public Object[] getElements(final Object inputElement) {
- final TableEditorInput input = (TableEditorInput) inputElement;
- final List<TableElement> elements = input.getElements();
- return elements.toArray(new Object[elements.size()]);
- }
-
- public void dispose() {
- // nothing
- }
-
- public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
- // nothing
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorFactory.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorFactory.java
deleted file mode 100644
index 7287a0f72..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorFactory.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory.Descriptor.Registry;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.query.runtime.ModelQueryResult;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-
-public class TableEditorFactory {
-
- private static TableEditorFactory instance;
-
- protected TableEditorFactory() {
- // singleton
- }
-
- public static TableEditorFactory getInstance() {
- if (TableEditorFactory.instance == null) {
- TableEditorFactory.instance = new TableEditorFactory();
- }
- return TableEditorFactory.instance;
- }
-
- /**
- * Open a new table view editor on the given list of elements.
- *
- * @param browserConfiguration
- * the main editor configuration
- * @param elements
- * the elements to show as rows in the table
- * @param description
- * a descriptive String of what will be displayed in the table
- * view editor
- */
- public void openOn(final BrowserConfiguration browserConfiguration,
- final List<? extends Object> elements, final String description) {
- List<TableElement> tableElements = new ArrayList<TableElement>();
- for (Object element : elements) {
- tableElements.add(new TableElement(element));
- }
- final TableEditorInput input = new TableEditorInput(browserConfiguration, tableElements,
- description);
- openOn(input);
- }
-
- protected void openOn(final TableEditorInput input) {
- final IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
- .getActivePage();
- try {
- IDE.openEditor(activePage, input, getEditorID(), true);
- } catch (final PartInitException e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- protected String getEditorID() {
- return TableEditor.EDITOR_ID;
- }
-
- /**
- * Open a new table view editor on the given query result.
- *
- * @param result
- * the results of a query to display in the table
- */
- public void openOn(final List<ModelQueryResult> result) {
- List<TableElement> tableElements = new ArrayList<TableElement>();
-
- for (ModelQueryResult modelQueryResult : result) {
- Object value = modelQueryResult.getValue();
- flattenToList(value, tableElements, modelQueryResult.getSource());
- }
-
- // TODO: query name?
- final String description = NLS.bind(Messages.TableEditor_Description_modelQueryResults,
- Integer.valueOf(tableElements.size()));
-
- BrowserConfiguration browserConfiguration = new BrowserConfiguration();
- // XXX already done in constructor?
- final Registry registry = ComposedAdapterFactory.Descriptor.Registry.INSTANCE;
- ComposedAdapterFactory adapterFactoryWithRegistry = new ComposedAdapterFactory(registry);
- browserConfiguration.getAppearanceConfiguration().setAdapterFactory(
- adapterFactoryWithRegistry);
-
- final TableEditorInput input = new TableEditorInput(browserConfiguration, tableElements,
- description);
- openOn(input);
- }
-
- /**
- * Flattens the contents of the given value (if it is {@link Iterable}) into
- * <code>tableElements</code>, or add it directly to this list if it is not
- * iterable.
- */
- private static void flattenToList(final Object value, final List<TableElement> tableElements,
- final EObject context) {
- if (value instanceof Iterable<?>) {
- Iterable<?> iterable = (Iterable<?>) value;
- Iterator<?> iterator = iterable.iterator();
- while (iterator.hasNext()) {
- Object element = iterator.next();
- flattenToList(element, tableElements, context);
- }
- } else {
- tableElements.add(new TableElementWithContext(value, context));
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorInput.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorInput.java
deleted file mode 100644
index 3fdc03729..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorInput.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
-import org.eclipse.emf.common.util.BasicEList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.core.InstancesForMetaclass;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.facet.Facet;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IPersistableElement;
-
-public class TableEditorInput implements IEditorInput {
-
- /** The elements that are displayed in the table */
- private final List<TableElement> elements;
- /** Union of all the elements' structural features */
- private final List<EStructuralFeature> fFeatures;
-
- /** The main browser's configuration */
- private final BrowserConfiguration browserConfiguration;
- /** A textual description of what is shown in the browser */
- private final String description;
- /** All the metaclasses of the elements */
- private HashSet<EClass> metaclasses;
-
- /**
- * Create an input for all the given elements
- *
- * @param browserConfiguration
- * the main browser's configuration
- * @param tableElements
- * the elements to show as rows in the table
- * @param description
- * a descriptive String of what will be displayed in the table
- * view editor
- */
- public TableEditorInput(final BrowserConfiguration browserConfiguration,
- final List<TableElement> tableElements, final String description) {
- this.browserConfiguration = browserConfiguration;
- this.elements = tableElements;
- this.description = description;
-
- this.metaclasses = new HashSet<EClass>();
- for (final TableElement tableElement : tableElements) {
- Object element = tableElement.getElement();
- if (element instanceof EObject) {
- EObject eObject = (EObject) element;
- this.metaclasses.add(eObject.eClass());
- List<Facet> facets = this.browserConfiguration.getAppearanceConfiguration()
- .getFacetContext().getFacets(eObject);
- this.metaclasses.addAll(facets);
- }
- }
-
- // all the attributes of the metaclasses of the elements
- final List<EStructuralFeature> features = new BasicEList<EStructuralFeature>() {
- private static final long serialVersionUID = -2429276823183270956L;
-
- @Override
- protected boolean isUnique() {
- return true;
- }
- };
- for (final EClass eClass : this.metaclasses) {
- features.addAll(eClass.getEAllStructuralFeatures());
- }
-
- this.fFeatures = new ArrayList<EStructuralFeature>(features);
- }
-
- /**
- * Create an input for all elements of the given class
- *
- * @param browserConfiguration
- * the main editor configuration
- * @param eClass
- * the metaclass of the elements to show
- * @param description
- * a descriptive String of what will be displayed in the table
- * view editor
- * */
- public TableEditorInput(final BrowserConfiguration browserConfiguration, final EClass eClass,
- final String description) {
- this.browserConfiguration = browserConfiguration;
- this.description = description;
- final InstancesForMetaclass instances = this.browserConfiguration
- .getInstancesForMetaclasses().getInstancesForMetaclass(eClass);
- this.elements = new ArrayList<TableElement>();
- ArrayList<EObject> instanceElements = instances.getElements();
- for (EObject eObject : instanceElements) {
- this.elements.add(new TableElement(eObject));
- }
- this.fFeatures = new ArrayList<EStructuralFeature>(eClass.getEAllStructuralFeatures());
- }
-
- public List<TableElement> getElements() {
- return this.elements;
- }
-
- public List<EStructuralFeature> getFeatures() {
- return this.fFeatures;
- }
-
- public String getDescription() {
- return this.description;
- }
-
- public BrowserConfiguration getBrowserConfiguration() {
- return this.browserConfiguration;
- }
-
- public boolean exists() {
- return false;
- }
-
- public ImageDescriptor getImageDescriptor() {
- return null;
- }
-
- public String getName() {
- return Messages.TableEditorInput_editorName_TableViewer;
- }
-
- public IPersistableElement getPersistable() {
- return null;
- }
-
- public String getToolTipText() {
- return Messages.TableEditorInput_tooltip_TableViewer;
- }
-
- @SuppressWarnings("unchecked")
- public Object getAdapter(final Class adapter) {
- return null;
- }
-
- public EClass[] getMetaclasses() {
- return this.metaclasses.toArray(new EClass[this.metaclasses.size()]);
- }
-
- public static class ElementsDescription {
- private boolean containsEObjects;
- private boolean containsPrimitiveTypes;
- private boolean containsContexts;
-
- public boolean containsEObjects() {
- return this.containsEObjects;
- }
-
- public boolean containsPrimitiveTypes() {
- return this.containsPrimitiveTypes;
- }
-
- public boolean containsContexts() {
- return this.containsContexts;
- }
- }
-
- public ElementsDescription getElementsDescription() {
- ElementsDescription elementsDescription = new ElementsDescription();
- for (TableElement tableElement : this.elements) {
- if (tableElement instanceof TableElementWithContext) {
- elementsDescription.containsContexts = true;
- }
- Object element = tableElement.getElement();
- if (element instanceof EObject) {
- elementsDescription.containsEObjects = true;
- } else {
- elementsDescription.containsPrimitiveTypes = true;
- }
- }
- return elementsDescription;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorLabelProvider.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorLabelProvider.java
deleted file mode 100644
index 0a5d61774..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorLabelProvider.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import java.util.List;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.core.ModelElementItemEx;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserConfiguration;
-import org.eclipse.gmt.modisco.infra.common.core.internal.utils.StringUtils;
-import org.eclipse.gmt.modisco.infra.facet.FacetAttribute;
-import org.eclipse.gmt.modisco.infra.facet.FacetReference;
-import org.eclipse.gmt.modisco.infra.facet.core.FacetContext;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.swt.graphics.Image;
-
-public class TableEditorLabelProvider extends LabelProvider implements ITableLabelProvider {
-
- private final BrowserConfiguration browserConfiguration;
- private final List<ColumnDescription> columns;
-
- public TableEditorLabelProvider(final List<ColumnDescription> columns,
- final BrowserConfiguration browserConfiguration) {
- this.columns = columns;
- this.browserConfiguration = browserConfiguration;
- }
-
- public String getTextFor(final Object element) {
- if (element == null) {
- return "null"; //$NON-NLS-1$
- }
- if (element instanceof EObject) {
- final EObject eObject = (EObject) element;
- return new ModelElementItemEx(eObject, null, this.browserConfiguration).getText();
- }
- // primitive DataType
- return element.toString();
- }
-
- public Image getImageFor(final Object element) {
- if (element == null) {
- return null;
- }
-
- if (element instanceof EObject) {
- final EObject eObject = (EObject) element;
- return new ModelElementItemEx(eObject, null, this.browserConfiguration).getImage();
- }
-
- return null;
- }
-
- public Image getColumnImage(final Object element, final int columnIndex) {
- if (columnIndex < this.columns.size()) {
- final ColumnDescription columnDescription = this.columns.get(columnIndex);
- TableElement tableElement = (TableElement) element;
-
- switch (columnDescription.getType()) {
- case DEFAULT_LABEL:
- return getImageFor(tableElement.getElement());
- case REFERENCE:
- final EReference reference = columnDescription.getReference();
- final EObject eObject = (EObject) tableElement.getElement();
-
- final Object refValue;
- if (reference instanceof FacetReference) {
- try {
- FacetContext facetContext = this.browserConfiguration
- .getAppearanceConfiguration().getFacetContext();
- if (facetContext.getReferences(eObject).contains(reference)) {
- refValue = facetContext.get(eObject, reference);
- } else {
- return null;
- }
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- return null;
- }
- } else {
- if (!eObject.eClass().getEAllReferences().contains(reference)) {
- return null;
- }
- refValue = eObject.eGet(reference);
- }
-
- if (reference.isMany()) {
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) refValue;
-
- // when only 1 element, then display its icon directly
- if (list.size() == 1) {
- return getImageFor(list.get(0));
- }
- return null;
- }
- if (refValue != null) {
- return getImageFor(refValue);
- }
- break;
- case ECONTAINER:
- return getImageFor(((EObject) tableElement.getElement()).eContainer());
- case CONTEXT:
- return getContextColumnImage(tableElement);
- default:
- return null;
- }
- }
-
- return null;
- }
-
- public String getColumnText(final Object element, final int columnIndex) {
- if (columnIndex >= this.columns.size()) {
- return Messages.TableEditorLabelProvider_indexOutOfBounds;
- }
- TableElement tableElement = (TableElement) element;
-
- final ColumnDescription columnDescription = this.columns.get(columnIndex);
- switch (columnDescription.getType()) {
- case DEFAULT_LABEL:
- return getTextFor(tableElement.getElement());
- case METACLASS_NAME:
- return getMetaclassColumnText(tableElement.getElement());
- case CONTEXT:
- return getContextColumnText(tableElement);
- case ATTRIBUTE:
- return getAttributeColumnText(tableElement.getElement(), columnDescription);
- case REFERENCE:
- return getReferenceColumnText(tableElement.getElement(), columnDescription);
- case ECONTAINER:
- return getTextFor(((EObject) tableElement.getElement()).eContainer());
- default:
- return Messages.TableEditorLabelProvider_unexpectedColumnType;
- }
- }
-
- private String getMetaclassColumnText(final Object element) {
- if (element == null) {
- return ""; //$NON-NLS-1$
- }
- if (element instanceof EObject) {
- EObject eObject = (EObject) element;
- final EClass eClass = eObject.eClass();
- if (eClass == null) {
- return Messages.TableEditorLabelProvider_none;
- }
- return eClass.getName();
- }
- // primitive DataType
- return element.getClass().getSimpleName();
- }
-
- private String getContextColumnText(final TableElement tableElement) {
- if (tableElement instanceof TableElementWithContext) {
- TableElementWithContext tableElementWithContext = (TableElementWithContext) tableElement;
- EObject context = tableElementWithContext.getContext();
- return getTextFor(context);
- }
- return Messages.TableEditorLabelProvider_nullContext;
- }
-
- private Image getContextColumnImage(final TableElement tableElement) {
- if (tableElement instanceof TableElementWithContext) {
- TableElementWithContext tableElementWithContext = (TableElementWithContext) tableElement;
- EObject context = tableElementWithContext.getContext();
- return getImageFor(context);
- }
- return null;
- }
-
- private String getAttributeColumnText(final Object element,
- final ColumnDescription columnDescription) {
- final EObject eObject = (EObject) element;
- final EAttribute attribute = columnDescription.getAttribute();
-
- final Object attrValue;
- if (attribute instanceof FacetAttribute) {
- try {
- FacetContext facetContext = this.browserConfiguration.getAppearanceConfiguration()
- .getFacetContext();
- if (facetContext.getAttributes(eObject).contains(attribute)) {
- attrValue = facetContext.get(eObject, attribute);
- } else {
- return Messages.TableEditorLabelProvider_NA;
- }
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- return Messages.TableEditorLabelProvider_error;
- }
- } else {
- if (!eObject.eClass().getEAllAttributes().contains(attribute)) {
- return Messages.TableEditorLabelProvider_NA;
- }
- attrValue = eObject.eGet(attribute);
- }
-
- if (attrValue == null) {
- return "null"; //$NON-NLS-1$
- }
- return StringUtils.truncateBeforeNewline(getTextFor(attrValue));
- }
-
- private String getReferenceColumnText(final Object element,
- final ColumnDescription columnDescription) {
- final EObject eObject = (EObject) element;
- final EReference reference = columnDescription.getReference();
- final Object refValue;
-
- if (reference instanceof FacetReference) {
- try {
- FacetContext facetContext = this.browserConfiguration.getAppearanceConfiguration()
- .getFacetContext();
- if (facetContext.getReferences(eObject).contains(reference)) {
- refValue = facetContext.get(eObject, reference);
- } else {
- return Messages.TableEditorLabelProvider_NA;
- }
- } catch (Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- return Messages.TableEditorLabelProvider_error;
- }
- } else {
- if (!eObject.eClass().getEAllReferences().contains(reference)) {
- return Messages.TableEditorLabelProvider_NA;
- }
- refValue = eObject.eGet(reference);
- }
-
- if (refValue == null) {
- return "null"; //$NON-NLS-1$
- } else if (reference.isMany()) {
- @SuppressWarnings("unchecked")
- final EList<EObject> list = (EList<EObject>) refValue;
-
- // when only 1 element, then display it directly
- if (list.size() == 1) {
- return getTextFor(list.get(0));
- }
-
- return "(" + list.size() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
- } else {
- return getTextFor(refValue);
- }
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorToolBar.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorToolBar.java
deleted file mode 100644
index 2d445514c..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableEditorToolBar.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.ImageProvider;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-
-public class TableEditorToolBar {
-
- private static final int HEIGHT = 25;
- private final ITableEditor tableEditor;
- private final ToolBar toolBar;
- private final Label label;
-
- /** Sort columns by type */
- private ToolItem btnSortColumnsByType;
- /** Hide columns which don't contain any elements */
- private ToolItem btnHideEmptyColumns;
- /**
- * Whether to show columns which are specific to a few elements, or only
- * columns which are common to all the elements
- */
- private ToolItem btnOnlyShowCommonColumns;
-
- public TableEditorToolBar(final Composite parent, final ITableEditor tableEditor) {
- this.tableEditor = tableEditor;
-
- addLinePainter(parent);
-
- final GridData treeToolBarGridData = new GridData();
- treeToolBarGridData.grabExcessHorizontalSpace = true;
- treeToolBarGridData.horizontalAlignment = SWT.FILL;
- // since the layout is done manually, set fixed parent size
- treeToolBarGridData.heightHint = TableEditorToolBar.HEIGHT;
- parent.setLayoutData(treeToolBarGridData);
-
- this.label = new Label(parent, SWT.NONE);
- this.toolBar = new ToolBar(parent, SWT.NONE);
-
- /*
- * do a manual layout to avoid the tool bar being pushed out of the
- * screen by the label
- */
- parent.addControlListener(new ControlAdapter() {
- @Override
- public void controlResized(final ControlEvent e) {
- final Point toolbarSize = TableEditorToolBar.this.toolBar.computeSize(SWT.DEFAULT,
- SWT.DEFAULT);
- TableEditorToolBar.this.toolBar.setSize(toolbarSize);
-
- final int splitPoint = parent.getSize().x - toolbarSize.x;
-
- TableEditorToolBar.this.toolBar.setLocation(splitPoint, 0);
-
- final int labelPosX = 3, labelPosY = 5, labelHMargin = 6, labelVMargin = 7;
- TableEditorToolBar.this.label.setLocation(labelPosX, labelPosY);
- TableEditorToolBar.this.label.setSize(splitPoint - labelHMargin, parent.getSize().y
- - labelVMargin);
- }
- });
-
- createToolButtons();
- initialize();
- }
-
- /** Paints a line below the tool bar to delimit it neatly */
- private void addLinePainter(final Composite composite) {
- composite.addPaintListener(new PaintListener() {
- public void paintControl(final PaintEvent e) {
- e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
- e.gc.drawLine(0, e.height - 1, e.width, e.height - 1);
- }
- });
- }
-
- private void createToolButtons() {
- this.btnSortColumnsByType = new ToolItem(this.toolBar, SWT.CHECK);
- this.btnSortColumnsByType.setToolTipText(Messages.TableEditorToolBar_tooltip_sortColumnsByType);
- this.btnSortColumnsByType.setImage(ImageProvider.getInstance().getSortLinksByTypeIcon());
- this.btnSortColumnsByType.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent e) {
- TableEditorToolBar.this.tableEditor
- .setSortColumnsByType(TableEditorToolBar.this.btnSortColumnsByType
- .getSelection());
- }
- });
-
- this.btnHideEmptyColumns = new ToolItem(this.toolBar, SWT.CHECK);
- this.btnHideEmptyColumns
- .setToolTipText(Messages.TableEditorToolBar_tooltip_HideEmtpyColumns);
- this.btnHideEmptyColumns.setImage(ImageProvider.getInstance().getHideEmptyColumnsIcon());
- this.btnHideEmptyColumns.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent e) {
- TableEditorToolBar.this.tableEditor
- .setHideEmptyColumns(TableEditorToolBar.this.btnHideEmptyColumns
- .getSelection());
- }
- });
-
- this.btnOnlyShowCommonColumns = new ToolItem(this.toolBar, SWT.CHECK);
- this.btnOnlyShowCommonColumns
- .setToolTipText(Messages.TableEditorToolBar_tooltip_OnlyShowCommonColumns);
- this.btnOnlyShowCommonColumns.setImage(ImageProvider.getInstance().getCommonColumnsIcon());
- this.btnOnlyShowCommonColumns.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent e) {
- TableEditorToolBar.this.tableEditor
- .setOnlyShowCommonColumns(TableEditorToolBar.this.btnOnlyShowCommonColumns
- .getSelection());
- }
- });
- }
-
- /** Initialize the tool bar buttons with their initial value */
- private void initialize() {
- this.btnHideEmptyColumns.setSelection(false);
- this.btnOnlyShowCommonColumns.setSelection(false);
- }
-
- public void setLabelText(final String text) {
- this.label.setText(text);
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElement.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElement.java
deleted file mode 100644
index 4735ad5a9..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElement.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-public class TableElement {
- private final Object element;
-
- public TableElement(final Object element) {
- this.element = element;
- }
-
- public Object getElement() {
- return this.element;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElementWithContext.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElementWithContext.java
deleted file mode 100644
index b4f854356..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableElementWithContext.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import org.eclipse.emf.ecore.EObject;
-
-public class TableElementWithContext extends TableElement {
- private final EObject context;
-
- public TableElementWithContext(final Object element, final EObject context) {
- super(element);
- this.context = context;
- }
-
- public EObject getContext() {
- return this.context;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableSorter.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableSorter.java
deleted file mode 100644
index 3d8c1b835..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/editors/table/TableSorter.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.editors.table;
-
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TableViewerColumn;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Table;
-
-/**
- * Allows sorting a table viewer's columns. Clicking on a column header cycles
- * between ascending, descending and no sorting.
- */
-public abstract class TableSorter extends ViewerComparator {
- public static final int ASCENDING = -1;
- public static final int NONE = 0;
- public static final int DESCENDING = 1;
-
- /** Current sorting direction */
- private int fSortingDirection = 0;
-
- /** The column that is managed by this {@link TableSorter} */
- private final TableViewerColumn column;
-
- /** The table viewer containing the column to be sorted */
- private final TableViewer fTableViewer;
-
- /**
- * @param viewer
- * the table viewer
- * @param column
- * the column to provide sorting for
- */
- public TableSorter(final TableViewer viewer, final TableViewerColumn column) {
- this.fSortingDirection = TableSorter.NONE;
- this.column = column;
- this.fTableViewer = viewer;
-
- column.getColumn().addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent e) {
- columnClicked();
- }
- });
- }
-
- private void columnClicked() {
- // user changed sorting column : always start with descending sorting
- if (this.fTableViewer.getComparator() == null || this.fTableViewer.getComparator() != this) {
- setSorting(TableSorter.DESCENDING);
- return;
- }
-
- switch (this.fSortingDirection) {
- case TableSorter.DESCENDING:
- setSorting(TableSorter.ASCENDING);
- break;
- case TableSorter.ASCENDING:
- setSorting(TableSorter.NONE);
- break;
- case TableSorter.NONE:
- setSorting(TableSorter.DESCENDING);
- break;
- default:
- throw new IllegalStateException("Unhandled sorting direction"); //$NON-NLS-1$
- }
- }
-
- public void setSorting(final int direction) {
- this.fSortingDirection = direction;
- final Table table = this.fTableViewer.getTable();
- switch (direction) {
- case TableSorter.DESCENDING:
- table.setSortColumn(this.column.getColumn());
- table.setSortDirection(SWT.UP);
- this.fTableViewer.setComparator(this);
- // viewer.refresh();
- break;
- case TableSorter.ASCENDING:
- table.setSortColumn(this.column.getColumn());
- table.setSortDirection(SWT.DOWN);
- this.fTableViewer.setComparator(this);
- this.fTableViewer.refresh();
- break;
- case TableSorter.NONE:
- table.setSortColumn(null);
- table.setSortDirection(SWT.NONE);
- this.fTableViewer.setComparator(null);
- // viewer.refresh();
- break;
- default:
- throw new IllegalStateException("Unhandled sorting direction"); //$NON-NLS-1$
- }
- }
-
- @Override
- public int compare(final Viewer viewer, final Object e1, final Object e2) {
- return this.fSortingDirection * doCompare(viewer, e1, e2);
- }
-
- /** Must be defined by subclasses to compare two objects */
- protected abstract int doCompare(Viewer viewer, Object e1, Object e2);
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/LoadingDepthRegistry.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/LoadingDepthRegistry.java
deleted file mode 100644
index 725107661..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/LoadingDepthRegistry.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.gmt.modisco.infra.browser.extensions;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.gmt.modisco.infra.common.core.internal.extensions.AbstractRegistry;
-
-/** Registry for the "loadingDepth" extension point */
-public class LoadingDepthRegistry extends AbstractRegistry {
-
- public static final int INFINITE = -1;
- public static final int UNDEFINED = -2;
-
- private static final String EXTENSION_POINT_NAMESPACE = "org.eclipse.gmt.modisco.infra.browser"; //$NON-NLS-1$
- private static final String EXTENSION_POINT_NAME = "loadingDepth"; //$NON-NLS-1$
-
- private static final String LOADING_DEPTH_ELEMENT = "loadingDepth"; //$NON-NLS-1$
- private static final String METAMODEL_ATTRIBUTE = "metamodel"; //$NON-NLS-1$
- private static final String DEPTH_ATTRIBUTE = "depth"; //$NON-NLS-1$
-
- private static LoadingDepthRegistry instance = null;
-
- /** A map of metamodels nsURIs to loading depths */
- private final Map<String, Integer> loadingDepths = new HashMap<String, Integer>();
-
- public static LoadingDepthRegistry getInstance() {
- if (LoadingDepthRegistry.instance == null) {
- LoadingDepthRegistry.instance = new LoadingDepthRegistry();
- }
- return LoadingDepthRegistry.instance;
- }
-
- public LoadingDepthRegistry() {
- initialize();
- }
-
- public int getLoadingDepth(final String nsURI) {
- Integer depth = this.loadingDepths.get(nsURI);
- if (depth == null || depth < -1) {
- return LoadingDepthRegistry.UNDEFINED;
- }
- return depth;
- }
-
- @Override
- protected String getExtensionPointName() {
- return LoadingDepthRegistry.EXTENSION_POINT_NAME;
- }
-
- @Override
- protected String getExtensionPointNamespace() {
- return LoadingDepthRegistry.EXTENSION_POINT_NAMESPACE;
- }
-
- @Override
- protected void handleRootElement(final IConfigurationElement configurationElement) {
- final String name = configurationElement.getName();
- if (name.equalsIgnoreCase(LoadingDepthRegistry.LOADING_DEPTH_ELEMENT)) {
- readLoadingDepthElement(configurationElement);
- } else {
- logUnknownElement(configurationElement);
- }
- }
-
- /** Read a 'loadingDepth' element */
- private void readLoadingDepthElement(final IConfigurationElement configurationElement) {
- final String metamodel = configurationElement
- .getAttribute(LoadingDepthRegistry.METAMODEL_ATTRIBUTE);
- if (metamodel == null) {
- logMissingAttribute(configurationElement, LoadingDepthRegistry.METAMODEL_ATTRIBUTE);
- return;
- }
- final String depth = configurationElement
- .getAttribute(LoadingDepthRegistry.DEPTH_ATTRIBUTE);
- if (depth == null) {
- logMissingAttribute(configurationElement, LoadingDepthRegistry.DEPTH_ATTRIBUTE);
- return;
- }
-
- int intDepth;
- try {
- intDepth = Integer.parseInt(depth);
- } catch (NumberFormatException e) {
- logError(configurationElement, "depth is not a valid integer"); //$NON-NLS-1$
- return;
- }
-
- if (intDepth < -1) {
- logError(configurationElement, "invalid depth"); //$NON-NLS-1$
- return;
- }
-
- this.loadingDepths.put(metamodel, intDepth);
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/listeners/DoubleClickListener.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/listeners/DoubleClickListener.java
deleted file mode 100644
index 31cceee21..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/extensions/listeners/DoubleClickListener.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2011 Mia-Software.
- * 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:
- * Nicolas Guyomar (Mia-Software) - Code Synchronization
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.extensions.listeners;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.action.IStatusLineManager;
-
-/**
- * @deprecated Will be replaced by EMF Facet,
- * cf. https://bugs.eclipse.org/bugs/show_bug.cgi?id=470715
- */
-@Deprecated
-public interface DoubleClickListener {
-
- public abstract void synchronizeEObject(EObject eObjet, IStatusLineManager statusLineManager);
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/messages.properties b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/messages.properties
deleted file mode 100644
index ca904afc2..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/messages.properties
+++ /dev/null
@@ -1,169 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2011 Mia-Software.
-# 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:
-# Nicolas Bros (Mia-Software) - initial API and implementation
-# Nicolas Payneau (Mia-Software) - Enable editability
-# Nicolas Guyomar (Mia-Software) - Code Synchronisation
-# Nicolas Guyomar (Mia_software) - Bug 333651 Remove of the MoDisco EPackage view and of the metamodel browsing button
-###############################################################################
-
-DialogUriSelection_RegisteredEPackages=Registered EPackages:
-DialogUriSelection_title_OpenModelFromEMFRegistry=Open Model From EMF Registry
-EcoreActionBarContributor_actionBrowse=Browse
-EcoreActionBarContributor_cannotOpenTableEditorNotModelElements=Cannot open table editor: selected objects are not all model elements
-EcoreActionBarContributor_decreaseFontSize=Decrease Font Size
-EcoreActionBarContributor_elementsSelection={0} elements selection
-EcoreActionBarContributor_elementsSelectionUnknowMetamodel=elements selection (unknown metamodel)
-EcoreActionBarContributor_increaseFontSize=Increase Font Size
-EcoreActionBarContributor_restoreFontSize=Restore Font Size
-EcoreBrowser_cannotFindEPackageWithThatURI=Cannot find a registered EPackage for URI "{0}"
-EcoreBrowser_cannotOpenModelFromURI=Cannot open model from URI
-EcoreBrowser_chooseLoadProxiesDepth=Up to which depth do you want to load resources referenced by these proxies?\n("0" for none and "*" to load all referenced resources)
-EcoreBrowser_error={0} Error
-EcoreBrowser_errorLoadingModel=Error Loading Model
-EcoreBrowser_errorLoadingResource=Error loading resource
-EcoreBrowser_errors={0} Errors
-EcoreBrowser_errorsAndWarnings=Errors && Warnings
-EcoreBrowser_errorSavingResource=Error saving resource
-EcoreBrowser_metaclasses=Types
-EcoreBrowser_modelContainsProxies=There are proxies in the model you are opening.\n
-EcoreBrowser_info={0} Info
-EcoreBrowser_infos={0} Infos
-EcoreBrowser_instances=Instances
-EcoreBrowser_jobName_SearchInModelEditor=Search in Model Browser
-EcoreBrowser_jobOpeningModelInMoDiscoBrowser=Opening model in MoDisco browser
-EcoreBrowser_loadingModelPlaceholder=Loading...
-EcoreBrowser_MoDisco_Model_Browser=MoDisco Model Browser
-EcoreBrowser_typeFilterText=type filter text
-InstancesForMetaclass_notFound={0} not found
-openTableEditorOnSelection=View In Table
-EcoreActionBarContributor_showPropertiesView=Show &Properties View
-RefreshViewerAction_refreshViewer=&Refresh
-EcoreBrowser_noObjectSelected=Selected Nothing
-EcoreBrowser_noSynchronisationExtensionFound=No synchronisation strategy has been provided for this element
-EcoreBrowser_notAPositiveInteger="{0}" is not a positive integer
-EcoreBrowser_selectDepthReferencedResources=Select depth to load referenced resources
-EcoreBrowser_separator=,
-EcoreBrowser_singleObjectSelected=Selected Object: {0}
-EcoreBrowser_multiObjectSelected=Selected {0} Objects
-EcoreBrowser_refreshingModelViewers=Refresh model viewers
-EcoreBrowser_ReloadingFacets=Reloading Facets
-EcoreBrowser_warning={0} Warning
-EcoreBrowser_warnings={0} Warnings
-EnableDerivedLinksPromptDialog_enableDerivedLinks=Enable derived links?
-EnableDerivedLinksPromptDialog_enableDerivedLinksLong=You are adding Facets which contain derived links (attributes or references).\nDo you want to show derived links in the model browser?
-EnableDerivedLinksPromptDialog_rememberDecision=Remember my decision
-LoadCustomizationsDialog_Add=>
-LoadCustomizationsDialog_AddAll=>>
-LoadCustomizationsDialog_Loading=Loading...
-LoadCustomizationsDialog_loadReferencedFacetsCheckbox=Load referenced facets
-LoadCustomizationsDialog_Remove=<
-LoadCustomizationsDialog_RemoveAll=<<
-LoadCustomizationsDialog_title_LoadCustomizations=Load Customizations
-LoadFacetsAction_LoadingFacet=Loading Facet:
-LoadFacetsAction_LoadingFacets=Loading Facets
-LoadFacetsDialog_LoadedCustomizations=&Loaded Customizations
-LoadFacetsDialog_AvailableCustomizationsLabel=&Available Customizations
-LoadFacetsDialog_FilterTextMessage=type filter text
-LoadFacetsDialog_AddTooltip=Add
-LoadFacetsDialog_RemoveTooltip=Remove
-LoadFacetsDialog_AddAllTooltip=Add all
-LoadFacetsDialog_RemoveAllTooltip=Remove all
-LoadFacetsDialog_UpLabel=&Up
-LoadFacetsDialog_DownLabel=&Down
-BrowserActionBarContributor_chooseFacetToLoad=Choose facets to load:
-BrowserActionBarContributor_chooseMetamodel=Choose a metamodel
-BrowserActionBarContributor_delete=Delete from model
-BrowserActionBarContributor_deleteButNotUnlink=This element can be deleted but not unlinked.\nDo you want to delete it?
-BrowserActionBarContributor_deleteElement=Delete element
-BrowserActionBarContributor_deleteOrRemove=Delete or remove?
-BrowserActionBarContributor_deleteOrRemove2=Do you want to remove the element from the whole model, or only from the link?
-BrowserActionBarContributor_dialogTitle_LoadFacets=Applied facets
-BrowserActionBarContributor_loadCustomization=Load Customizations
-BrowserActionBarContributor_loadingCustomizationFailed=Loading customization failed
-BrowserActionBarContributor_loadFacets=Load Facets
-BrowserActionBarContributor_loadMetamodel=load metamodel...
-BrowserActionBarContributor_missingRequiredFacet=Missing required facet "{0}" in FacetSet "{1}" for customization "{2}"
-BrowserActionBarContributor_remove=Remove from link
-BrowserActionBarContributor_removeButNotDelete=This element can be removed from its link, but not deleted from the model.\nDo you want to remove it?
-BrowserActionBarContributor_removeElement=Remove element
-BrowserContentProvider_computingChildren=Computing children
-BrowserNavigationLocation_emptySelection=\ (empty selection)
-BrowserNavigationLocation_multiSelection=\ ({0} elements selected)
-BrowserNavigationLocation_singleSelection=\ ({0})
-BrowserNavigationLocation_singleSelectionUnknownClass=\ (a {0} selected)
-BrowserPreferencePage_askLoadingDepthEachTime=Ask each time a model is opened
-BrowserPreferencePage_defaultLoadingDepth=Default referenced resources loading depth (-1 for maximum)
-BrowserPreferencePage_overridesMetamodelSpecificSettings=Overrides metamodel-specific settings
-MetaclassViewerMenuManager_instancesOf=Instances of
-MetaclassViewToolBar_displayInstancesOfSubclasses=Display Instances of Subclasses
-MetaclassViewToolBar_groupByPackage=Group by Package
-MetaclassViewToolBar_showDerivationTree=Show Derivation Tree
-MetaclassViewToolBar_showEmptyMetaclasses=Show Empty Metaclasses
-MetaclassViewToolBar_showFullQualifiedNames=Show Full Qualified Names
-MetaclassViewToolBar_sortByCount=Sort by Count
-MetaclassViewToolBar_sortByName=Sort by Name
-MetaclassViewToolBar_showViewMenu=View Menu
-ModelElementItem_nullQuerySelected=null query selected
-
-
-SelectQueryAction_addQueryOnElement=Display Queries on Selected Element
-SelectQueryAction_addQueryOnElements=Display Queries on Selected Elements
-ShowBothPanelsAction_title=Show Both Panels
-ShowOnlyInstancesPanelAction_title=Show Instances Panel Only
-ShowOnlyTypesPanelAction_title=Show Types Panel Only
-ExecuteQueryAction_executeSelectedQuery=Execute Selected Query
-ExecuteQueryAction_executeQueries=Execute Selected Queries
-RemoveQueryAction_removeQuery=Remove Selected Query
-RemoveQueryAction_removeQueries=Remove Selected Queries
-
-TableEditor_browse=Browse {0}
-TableEditor_columnName_Label=[Label]
-TableEditor_columnName_Metaclass=[Metaclass]
-TableEditor_ColumnName_queryContext=[Query Context]
-TableEditor_contentsDescription="{0}" \u2014> {1} contents
-TableEditor_Description_modelQueryResults=Model Query Results ({0} elements)
-TableEditor_tableViewer=Table Viewer
-TableEditorInput_editorName_TableViewer=Table Viewer
-TableEditorInput_tooltip_TableViewer=Table Viewer
-TableEditorLabelProvider_error=<ERROR>
-TableEditorLabelProvider_indexOutOfBounds=<index out of bounds>
-TableEditorLabelProvider_NA=N/A
-TableEditorLabelProvider_none=<none>
-TableEditorLabelProvider_nullContext=null
-TableEditorLabelProvider_unexpectedColumnType=<unexpected column type>
-TableEditorToolBar_tooltip_HideEmtpyColumns=Hide Empty Columns
-TableEditorToolBar_tooltip_OnlyShowCommonColumns=Only Show Common Columns
-TableEditorToolBar_tooltip_sortColumnsByType=Sort Columns By Type
-TreeToolBar_collapseAll=Collapse All
-TreeToolBar_showAttributes=Show Attributes
-TreeToolBar_showContainer=Show Container
-TreeToolBar_showDerivedLinks=Show Derived Links
-TreeToolBar_showEmptyAttributes=Show Empty Attributes
-TreeToolBar_showEmptyLinks=Show Empty Links
-TreeToolBar_showFullQualifiedNames=Show Full Qualified Names
-TreeToolBar_showMultiplicity=Show Multiplicity
-TreeToolBar_showOppositeLinks=Show Opposite Links
-TreeToolBar_showOrdering=Show Ordering
-TreeToolBar_showElementIDs=Show Element IDs
-TreeToolBar_showTypeOfLinks=Show Type of Links
-TreeToolBar_showURI=Show URI
-TreeToolBar_sortInstances=Sort Instances
-TreeToolBar_sortLinks=Sort Links
-TreeToolBar_sortLinksByType=Sort Links by Type
-TreeToolBar_synchronizeSourceCode=Synchronize with source code
-
-UI_FileConflict_label = File Conflict
-WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor. Do you wish to discard this editor's changes?
-UI_ErrorFile_message = Problems encountered in file "{0}"
-UI_modiscoEditor_menu = Modisco Editor
-UI_CreateChild_menu_item = &New Child
-
-ErrorsDialog_errors=Resource Diagnostics
-
-#UI_CreateSibling_menu_item = N&ew Sibling
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/opener/BrowserOpener.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/opener/BrowserOpener.java
deleted file mode 100644
index e0648feb9..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/opener/BrowserOpener.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.opener;
-
-import org.eclipse.emf.common.ui.URIEditorInput;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.browser.editors.BrowserUtils;
-import org.eclipse.gmt.modisco.infra.browser.editors.EcoreBrowser;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.common.ui.internal.editorInputs.ResourceEditorInput;
-import org.eclipse.modisco.facet.util.emf.core.IEObjectBrowserOpener;
-import org.eclipse.modisco.facet.util.emf.core.IEPackageBrowserOpener;
-import org.eclipse.modisco.facet.util.emf.core.IResourceBrowserOpener;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-
-public class BrowserOpener implements IResourceBrowserOpener, IEPackageBrowserOpener,
- IEObjectBrowserOpener {
-
- public BrowserOpener() {
- //
- }
-
- public void openResource(final Resource resource) {
- Display.getDefault().syncExec(new Runnable() {
- public void run() {
- try {
- IWorkbenchPage activePage = PlatformUI.getWorkbench()
- .getActiveWorkbenchWindow().getActivePage();
- IDE.openEditor(activePage, new ResourceEditorInput(resource),
- EcoreBrowser.EDITOR_ID, true);
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- }
- });
- }
-
- public void openEObject(final EObject eObject) {
- BrowserUtils.openEObjectInBrowser(eObject, true);
- }
-
- public void openEPackage(final EPackage ePackage) {
- try {
- final IEditorInput input = new URIEditorInput(URI.createURI(ePackage.getNsURI()));
- IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(),
- input, EcoreBrowser.EDITOR_ID, true);
- } catch (final Exception e) {
- MoDiscoBrowserPlugin.logException(e);
- }
- }
-
- public String getBrowserName() {
- return EcoreBrowser.HUMAN_READABLE_NAME;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/BrowserPreferencePage.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/BrowserPreferencePage.java
deleted file mode 100644
index eefc04d7d..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/BrowserPreferencePage.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.preferences;
-
-import org.eclipse.gmt.modisco.infra.browser.Messages;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-/**
- * This class is the MoDisco browser root preference page that is contributed to
- * the Preferences dialog. By sub-classing {@link FieldEditorPreferencePage}, we
- * can use the field support built into JFace that allows us to create a page
- * that is small and knows how to save, restore and apply itself.
- * <p>
- * This page is used to modify preferences, that are stored in the preference
- * store that belongs to the main plug-in class. That way, preferences can be
- * accessed directly via the preference store.
- */
-
-public class BrowserPreferencePage extends FieldEditorPreferencePage implements
- IWorkbenchPreferencePage {
-
- public BrowserPreferencePage() {
- super(FieldEditorPreferencePage.GRID);
- setPreferenceStore(MoDiscoBrowserPlugin.getPlugin().getPreferenceStore());
- // setDescription("MoDisco preferences");
- }
-
- /**
- * Creates the field editors. Field editors are abstractions of the common
- * GUI blocks needed to manipulate various types of preferences. Each field
- * editor knows how to save and restore itself.
- */
- @Override
- public void createFieldEditors() {
- IntegerFieldEditor loadingDepthField = new IntegerFieldEditor(
- PreferenceConstants.P_BROWSER_LOADING_DEPTH,
- Messages.BrowserPreferencePage_defaultLoadingDepth, getFieldEditorParent());
- final int maxValue = 99;
- loadingDepthField.setValidRange(-1, maxValue);
- addField(loadingDepthField);
-
- addField(new BooleanFieldEditor(PreferenceConstants.P_BROWSER_ASK_LOADING_DEPTH,
- Messages.BrowserPreferencePage_askLoadingDepthEachTime, getFieldEditorParent()));
- addField(new BooleanFieldEditor(
- PreferenceConstants.P_BROWSER_OVERRIDE_METAMODEL_SPECIFIC_SETTINGS,
- Messages.BrowserPreferencePage_overridesMetamodelSpecificSettings, getFieldEditorParent()));
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
- */
- public void init(final IWorkbench workbench) {
- // Nothing to do
- }
-
-} \ No newline at end of file
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceConstants.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceConstants.java
deleted file mode 100644
index 851b5285e..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceConstants.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.preferences;
-
-/**
- * Constant definitions for Browser plug-in preferences
- */
-public final class PreferenceConstants {
-
- private PreferenceConstants() {
- // constants class: no need to instantiate
- }
-
- /**
- * The depth to load resources in the MoDisco model browser (-1 for maximum
- * depth)
- */
- public static final String P_BROWSER_LOADING_DEPTH = "browser_loading_depth"; //$NON-NLS-1$
- /**
- * Whether to ask the depth to load resources in the MoDisco model browser
- * each time a model is opened
- */
- public static final String P_BROWSER_ASK_LOADING_DEPTH = "browser_ask_loading_depth"; //$NON-NLS-1$
-
- /**
- * Whether user settings override settings defined in the "loadingDepth"
- * extension point
- */
- public static final String P_BROWSER_OVERRIDE_METAMODEL_SPECIFIC_SETTINGS = "override_metamodel_specific_settings"; //$NON-NLS-1$
-
- /**
- * Whether to ask the user whether to enable the derived links when adding a
- * Facet
- */
- public static final String P_BROWSER_ENABLE_DERIVED_LINKS_SETTING = "enable_derived_links_prompt"; //$NON-NLS-1$
- public static final String P_BROWSER_ENABLE_DERIVED_LINKS_ASK = "enable_derived_links_ask"; //$NON-NLS-1$
- public static final String P_BROWSER_ENABLE_DERIVED_LINKS_ALWAYS = "enable_derived_links_always"; //$NON-NLS-1$
- public static final String P_BROWSER_ENABLE_DERIVED_LINKS_NEVER = "enable_derived_links_never"; //$NON-NLS-1$
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceInitializer.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceInitializer.java
deleted file mode 100644
index 8a2bd52dc..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/preferences/PreferenceInitializer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.preferences;
-
-import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.jface.preference.IPreferenceStore;
-
-/**
- * Class used to initialize default preference values for the Browser.
- */
-public class PreferenceInitializer extends AbstractPreferenceInitializer {
-
- @Override
- public void initializeDefaultPreferences() {
- IPreferenceStore store = MoDiscoBrowserPlugin.getPlugin().getPreferenceStore();
- // general rule is to keep the same behavior as EMF by default
- store.setDefault(PreferenceConstants.P_BROWSER_ASK_LOADING_DEPTH, false);
- store.setDefault(PreferenceConstants.P_BROWSER_LOADING_DEPTH, 0);
- store.setDefault(PreferenceConstants.P_BROWSER_OVERRIDE_METAMODEL_SPECIFIC_SETTINGS, false);
- store.setDefault(PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_SETTING,
- PreferenceConstants.P_BROWSER_ENABLE_DERIVED_LINKS_ASK);
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQueriesManager.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQueriesManager.java
deleted file mode 100644
index 65a6ef5de..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQueriesManager.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.queries;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.uicore.ChangeListener;
-import org.eclipse.gmt.modisco.infra.query.ModelQuery;
-
-/**
- * Contains the information about queries that have been added to model
- * elements. Supports adding and removing selected queries, with notifications
- * to listeners.
- */
-public class SelectedQueriesManager {
- /** Associations between model elements and queries */
- private final Map<EObject, List<SelectedQuery>> selectedQueries = new HashMap<EObject, List<SelectedQuery>>();
-
- public void add(final EObject eObject, final ModelQuery modelQuery) {
- if (modelQuery == null) {
- throw new IllegalArgumentException("modelQuery is null"); //$NON-NLS-1$
- }
-
- List<SelectedQuery> list = this.selectedQueries.get(eObject);
- if (list == null) {
- list = new ArrayList<SelectedQuery>();
- this.selectedQueries.put(eObject, list);
- }
- for (SelectedQuery selectedQuery : list) {
- if (selectedQuery.getModelQuery() == modelQuery) {
- // don't duplicate the query
- return;
- }
- }
- SelectedQuery selectedQuery = new SelectedQuery(modelQuery, eObject, this);
- list.add(selectedQuery);
- fireChangeNotification();
- }
-
- public void remove(final SelectedQuery selectedQuery) {
- boolean changed = false;
- Collection<List<SelectedQuery>> values = this.selectedQueries.values();
- for (List<SelectedQuery> list : values) {
- ListIterator<SelectedQuery> listIterator = list.listIterator();
- while (listIterator.hasNext()) {
- if (listIterator.next() == selectedQuery) {
- changed = true;
- listIterator.remove();
- }
- }
- }
- if (changed) {
- fireChangeNotification();
- }
- }
-
- public void clear() {
- this.selectedQueries.clear();
- fireChangeNotification();
- }
-
- /**
- * Returns the queries selected for the given model element.
- *
- * @return a list of selected queries (which can be empty) or
- * <code>null</code>
- */
- public List<SelectedQuery> getSelectedQueriesFor(final EObject eObject) {
- return this.selectedQueries.get(eObject);
- }
-
- private final List<ChangeListener> changeListeners = new ArrayList<ChangeListener>();
-
- public void addChangeListener(final ChangeListener listener) {
- if (!this.changeListeners.contains(listener)) {
- this.changeListeners.add(listener);
- }
- }
-
- public void removeChangeListener(final ChangeListener listener) {
- this.changeListeners.remove(listener);
- }
-
- public void fireChangeNotification() {
- for (final ChangeListener changeListener : this.changeListeners) {
- changeListener.changed();
- }
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQuery.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQuery.java
deleted file mode 100644
index 7e05bb885..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queries/SelectedQuery.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.queries;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.Activator;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.Messages;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.EMFUtil;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.QueryUtil;
-import org.eclipse.gmt.modisco.infra.browser.uicore.internal.util.Util;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-import org.eclipse.gmt.modisco.infra.query.ModelQuery;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * Represents a query that has been associated to a model element and can be
- * executed in the model browser
- */
-public class SelectedQuery {
-
- private final ModelQuery modelQuery;
- private final EObject context;
- private boolean executed = false;
- private Object result;
- private final SelectedQueriesManager selectedQueriesManager;
-
- public SelectedQuery(final ModelQuery modelQuery, final EObject context,
- final SelectedQueriesManager selectedQueriesManager) {
- this.modelQuery = modelQuery;
- this.context = context;
- this.selectedQueriesManager = selectedQueriesManager;
- }
-
- /** Execute the query */
- public void executeQuery() {
- if (EMFUtil.tryResolve(this.modelQuery)) {
- this.result = QueryUtil.basicEvaluate(this.modelQuery, this.context);
- this.executed = true;
- this.selectedQueriesManager.fireChangeNotification();
- } else {
- MoDiscoLogger.logError(NLS.bind(Messages.unresolvedQuery, EMFUtil
- .proxyURI(this.modelQuery)), Activator.getDefault());
- }
- }
-
- public boolean isExecuted() {
- return this.executed;
- }
-
- public Object getResult() {
- if (!isExecuted()) {
- executeQuery();
- }
- return this.result;
- }
-
- public ModelQuery getModelQuery() {
- return this.modelQuery;
- }
-
- public EObject getContext() {
- return this.context;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (obj instanceof SelectedQuery) {
- final SelectedQuery other = (SelectedQuery) obj;
- return Util.safeEquals(this.modelQuery, other.modelQuery)
- && Util.safeEquals(this.context, other.context);
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- final int hashPrime1 = 47;
- final int hashPrime2 = 13;
-
- final int queryHashCode = this.modelQuery.hashCode() + hashPrime2;
- if (this.context != null) {
- return this.context.hashCode() * hashPrime1 + queryHashCode;
- }
- return queryHashCode;
- }
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queryResultDisplayers/TableQueryResultDisplayer.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queryResultDisplayers/TableQueryResultDisplayer.java
deleted file mode 100644
index afb36e5dc..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/queryResultDisplayers/TableQueryResultDisplayer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software)
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.queryResultDisplayers;
-
-import java.util.List;
-
-import org.eclipse.gmt.modisco.infra.browser.editors.table.TableEditorFactory;
-import org.eclipse.gmt.modisco.infra.query.runtime.ModelQueryResult;
-import org.eclipse.gmt.modisco.infra.query.ui.views.queryExecution.QueryResultDisplayer;
-
-public class TableQueryResultDisplayer implements QueryResultDisplayer {
-
- public TableQueryResultDisplayer() {
- // nothing
- }
-
- public void displayQueryResult(final List<ModelQueryResult> result) {
- TableEditorFactory.getInstance().openOn(result);
- }
-
-}
diff --git a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/util/EditingSupportUtil.java b/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/util/EditingSupportUtil.java
deleted file mode 100644
index 774633580..000000000
--- a/org.eclipse.gmt.modisco.infra.browser/src/org/eclipse/gmt/modisco/infra/browser/util/EditingSupportUtil.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010, 2011 Mia-Software.
- * 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:
- * Nicolas Bros (Mia-Software) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.gmt.modisco.infra.browser.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.edit.command.CommandParameter;
-import org.eclipse.gmt.modisco.infra.browser.MoDiscoBrowserPlugin;
-import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
-
-public final class EditingSupportUtil {
-
- private EditingSupportUtil() {
- // not instantiable
- }
-
- public static Collection<?> getNewChildDescriptors(final List<EReference> eAllReferences,
- final ResourceSet resourceSet) {
- ArrayList<CommandParameter> parameters = new ArrayList<CommandParameter>();
- for (EReference reference : eAllReferences) {
- if (reference.isContainment()) {
- createCommandParameters(parameters, reference, resourceSet);
- }
- }
- return parameters;
- }
-
- public static void createCommandParameters(final List<CommandParameter> parameters,
- final EReference feature, final ResourceSet resourceSet) {
- EClass featureClass = feature.getEReferenceType();
- if (!featureClass.isInterface() && !featureClass.isAbstract()) {
- parameters.add(new CommandParameter(null, feature, featureClass.getEPackage()
- .getEFactoryInstance().create(featureClass)));
- }
- Collection<EClass> eclasses = allSubClasses(feature.getEReferenceType(), resourceSet);
- for (EClass eclass : eclasses) {
- if (!eclass.isAbstract()) {
- parameters.add(new CommandParameter(null, feature, eclass.getEPackage()
- .getEFactoryInstance().create(eclass)));
- }
- }
- }
-
- public static Collection<EClass> allSubClasses(final EClass context,
- final ResourceSet resourceSet) {
- List<EClass> result = new ArrayList<EClass>();
- // Set<Resource> resources = new HashSet<Resource>();
- Collection<String> uris = new ArrayList<String>(EPackage.Registry.INSTANCE.keySet());
- for (String ePackageURI : uris) {
- try {
- EPackage ePackage = EPackage.Registry.INSTANCE.getEPackage(ePackageURI);
- EList<EClassifier> eClassifiers = ePackage.getEClassifiers();
- for (EClassifier eClassifier : eClassifiers) {
- if (eClassifier instanceof EClass) {
- EClass eClass = (EClass) eClassifier;
- if (isSuperTypeOf(context, eClass)) {
- result.add(eClass);
- }
- }
- }
- } catch (Exception e) {
- MoDiscoLogger.logError(e, MoDiscoBrowserPlugin.getPlugin());
- }
- }
-
- // if (context.eResource().getResourceSet() != null) {
- // resources.addAll(context.eResource().getResourceSet().getResources());
- // } else {
- // resources.add(context.eResource());
- // }
- // if (resourceSet != null) {
- // resources.addAll(resourceSet.getResources());
- // }
- // for (Resource resource : resources) {
- // TreeIterator<EObject> content = resource.getAllContents();
- // while (content.hasNext()) {
- // EObject eObject = content.next();
- // if (eObject instanceof EClass) {
- // EClass currentClassDeclaration = (EClass) eObject;
- // if (isSuperTypeOf(context, currentClassDeclaration)) {
- // result.add(currentClassDeclaration);
- // }
- // }
- // }
- // }
- return result;
- }
-
- public static boolean isSuperTypeOf(final EClass self, final EClass typeDeclaration) {
- return typeDeclaration.getEAllSuperTypes().contains(self);
- }
-}

Back to the top