Skip to content

Package: EcoreEditorTMDCustomization$1

EcoreEditorTMDCustomization$1

nameinstructionbranchcomplexitylinemethod
getMenu(TreeViewer, EditingDomain)
M: 0 C: 41
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
{...}
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2016 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Johannes Faltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.editor.ecore;
15:
16: import java.util.List;
17:
18: import org.eclipse.emf.common.notify.Notifier;
19: import org.eclipse.emf.ecore.EObject;
20: import org.eclipse.emf.ecp.common.spi.ChildrenDescriptorCollector;
21: import org.eclipse.emf.ecp.view.spi.context.ViewModelService;
22: import org.eclipse.emf.ecp.view.spi.model.VView;
23: import org.eclipse.emf.edit.domain.EditingDomain;
24: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
25: import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
26: import org.eclipse.emfforms.internal.editor.ecore.actions.CreateNewInstanceAction;
27: import org.eclipse.emfforms.internal.editor.ecore.helpers.EcoreHelpers;
28: import org.eclipse.emfforms.internal.swt.treemasterdetail.DefaultTreeMasterDetailCustomization;
29: import org.eclipse.emfforms.spi.swt.treemasterdetail.MenuProvider;
30: import org.eclipse.emfforms.spi.swt.treemasterdetail.ViewModelServiceProvider;
31: import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.ActionCollector;
32: import org.eclipse.emfforms.spi.swt.treemasterdetail.actions.MasterDetailAction;
33: import org.eclipse.emfforms.spi.swt.treemasterdetail.decorator.validation.ecp.ECPValidationLabelDecoratorProvider;
34: import org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback;
35: import org.eclipse.emfforms.spi.swt.treemasterdetail.util.RootObject;
36: import org.eclipse.jface.action.MenuManager;
37: import org.eclipse.jface.viewers.TreeViewer;
38: import org.eclipse.swt.widgets.Menu;
39:
40: /**
41: * Ecore Editor specific behaviour for the TMD.
42: *
43: * @author Johannes Faltermeier
44: *
45: */
46: public class EcoreEditorTMDCustomization extends DefaultTreeMasterDetailCustomization {
47:
48:         private AdapterFactoryContentProvider adapterFactoryContentProvider;
49:
50:         /**
51:          * Constructs a new {@link EcoreEditorTMDCustomization}.
52:          *
53:          * @param createElementCallback the {@link CreateElementCallback}
54:          * @param notifier The Notifier to create the customization for
55:          * @param diagnosticCache the {@link org.eclipse.emfforms.spi.swt.treemasterdetail.diagnostic.DiagnosticCache
56:          * DiagnosticCache}
57:          */
58:         public EcoreEditorTMDCustomization(final CreateElementCallback createElementCallback, Notifier notifier,
59:                 EcoreDiagnosticCache diagnosticCache) {
60:                 setMenu(new MenuProvider() {
61:                         @Override
62:                         public Menu getMenu(TreeViewer treeViewer, EditingDomain editingDomain) {
63:                                 final MenuManager menuMgr = new MenuManager();
64:                                 final List<MasterDetailAction> masterDetailActions = ActionCollector.newList()
65:                                         .addCutAction(editingDomain).addCopyAction(editingDomain).addPasteAction(editingDomain)
66:                                         .add(new CreateNewInstanceAction()).getList();
67:
68:                                 menuMgr.setRemoveAllWhenShown(true);
69:                                 menuMgr.addMenuListener(new EcoreEditorMenuListener(new ChildrenDescriptorCollector(), menuMgr,
70:                                         treeViewer, editingDomain, masterDetailActions, createElementCallback));
71:                                 final Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
72:                                 return menu;
73:                         }
74:                 });
75:
76:                 setViewModelServices(new ViewModelServiceProvider() {
77:
78:                         @Override
79:                         public ViewModelService[] getViewModelServices(VView view, EObject eObject) {
80:                                 return new ViewModelService[] { new GroupExpansionViewModelService() };
81:                         }
82:                 });
83:
84:                 setLabelDecorator(new ECPValidationLabelDecoratorProvider(notifier, diagnosticCache));
85:         }
86:
87:         @Override
88:         protected AdapterFactoryContentProvider getAdapterFactoryContentProvider() {
89:                 if (adapterFactoryContentProvider == null) {
90:                         final ComposedAdapterFactory adapterFactory = getComposedAdapterFactory();
91:                         adapterFactoryContentProvider = new AdapterFactoryContentProvider(
92:                                 adapterFactory) {
93:
94:                                 @Override
95:                                 public Object[] getElements(Object object) {
96:                                         if (RootObject.class.isInstance(object)) {
97:                                                 return new Object[] { RootObject.class.cast(object).getRoot() };
98:                                         }
99:                                         return super.getElements(object);
100:                                 }
101:
102:                                 @Override
103:                                 public boolean hasChildren(Object object) {
104:                                         return getChildren(object).length > 0;
105:                                 }
106:
107:                                 @Override
108:                                 public Object[] getChildren(Object object) {
109:                                         return EcoreHelpers.filterGenericElements(super.getChildren(object));
110:                                 }
111:                         };
112:                 }
113:                 return adapterFactoryContentProvider;
114:         }
115:
116:         @Override
117:         public void dispose() {
118:                 if (adapterFactoryContentProvider != null) {
119:                         adapterFactoryContentProvider.dispose();
120:                 }
121:                 super.dispose();
122:         }
123:
124: }