Skip to content

Package: ECPViewerFactory$1

ECPViewerFactory$1

nameinstructionbranchcomplexitylinemethod
selectionChanged(SelectionChangedEvent)
M: 57 C: 0
0%
M: 12 C: 0
0%
M: 7 C: 0
0%
M: 15 C: 0
0%
M: 1 C: 0
0%
{...}
M: 12 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2014 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: * Eugen - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.ui.common;
15:
16: import org.eclipse.core.runtime.CoreException;
17: import org.eclipse.core.runtime.IConfigurationElement;
18: import org.eclipse.core.runtime.IExtension;
19: import org.eclipse.core.runtime.IExtensionPoint;
20: import org.eclipse.core.runtime.Platform;
21: import org.eclipse.emf.ecp.core.ECPProject;
22: import org.eclipse.emf.ecp.core.util.ECPContainer;
23: import org.eclipse.emf.ecp.core.util.ECPModelContextProvider;
24: import org.eclipse.emf.ecp.core.util.ECPUtil;
25: import org.eclipse.emf.ecp.internal.core.Activator;
26: import org.eclipse.emf.ecp.internal.ui.model.IECPLabelProvider;
27: import org.eclipse.emf.ecp.internal.ui.model.ModelContentProvider;
28: import org.eclipse.emf.ecp.internal.ui.model.ModelLabelProvider;
29: import org.eclipse.emf.ecp.internal.ui.model.RepositoriesContentProvider;
30: import org.eclipse.emf.ecp.internal.ui.model.RepositoriesLabelProvider;
31: import org.eclipse.emf.ecp.spi.common.ui.TreeViewerFactory;
32: import org.eclipse.emf.ecp.ui.common.dnd.ECPDropAdapter;
33: import org.eclipse.emf.ecp.ui.common.dnd.ModelExplorerDropAdapter;
34: import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
35: import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
36: import org.eclipse.jface.viewers.ILabelDecorator;
37: import org.eclipse.jface.viewers.ILabelProvider;
38: import org.eclipse.jface.viewers.ISelectionChangedListener;
39: import org.eclipse.jface.viewers.IStructuredSelection;
40: import org.eclipse.jface.viewers.SelectionChangedEvent;
41: import org.eclipse.jface.viewers.TreeViewer;
42: import org.eclipse.swt.dnd.DND;
43: import org.eclipse.swt.dnd.Transfer;
44: import org.eclipse.swt.widgets.Composite;
45:
46: /**
47: * Utility class to create components for ECP.
48: *
49: * @author Eugen Neufeld
50: *
51: */
52: public final class ECPViewerFactory {
53:
54:         private ECPViewerFactory() {
55:         }
56:
57:         /**
58:          * Create the ECP ModelExplorer View which is based on the {@link TreeViewer}.
59:          *
60:          * @param parent The {@link Composite} to create onto
61:          * @param hasDnD Whether dnd should be enabled
62:          * @param labelDecorator The {@link ILabelDecorator} to use on labels.
63:          * @return The created {@link TreeViewer}
64:          */
65:         public static TreeViewer createModelExplorerViewer(Composite parent, boolean hasDnD,
66:                 ILabelDecorator labelDecorator) {
67:                 final ModelContentProvider contentProvider = new ModelContentProvider();
68:                 final TreeViewer viewer = TreeViewerFactory.createTreeViewer(parent, getLabelProvider(contentProvider),
69:                         contentProvider,
70:                         ECPUtil.getECPProjectManager(), labelDecorator, false);
71:                 if (hasDnD) {
72:                         final ECPDropAdapter dropAdapter = getDropAdapter(contentProvider, viewer);
73:
74:                         final int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
75:                         final Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
76:                         viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));// new ECPDragAdapter(viewer)
77:                         viewer.addDropSupport(dndOperations, transfers, dropAdapter);// ComposedDropAdapter
78:                         viewer.addSelectionChangedListener(new ISelectionChangedListener() {
79:
80:                                 @Override
81:                                 public void selectionChanged(SelectionChangedEvent event) {
82:                                         final Object[] elements = ((IStructuredSelection) event.getSelection()).toArray();
83:•                                        if (elements == null || elements.length == 0) {
84:                                                 return;
85:                                         }
86:                                         ECPProject project = null;
87:•                                        if (elements[0] instanceof ECPProject) {
88:                                                 final ECPContainer context = ECPUtil.getModelContext(contentProvider, elements);
89:•                                                if (context != null && context instanceof ECPProject) {
90:                                                         project = (ECPProject) context;
91:                                                 }
92:                                         } else {
93:                                                 final ECPModelContextProvider contextProvider = (ECPModelContextProvider) viewer
94:                                                         .getContentProvider();
95:                                                 project = (ECPProject) ECPUtil.getModelContext(contextProvider, elements[0]);
96:                                         }
97:•                                        if (project != null) {
98:                                                 dropAdapter.setEditingDomain(project.getEditingDomain());
99:                                         }
100:                                 }
101:                         });
102:                 }
103:                 return viewer;
104:         }
105:
106:         private static ECPDropAdapter getDropAdapter(ModelContentProvider contentProvider, TreeViewer viewer) {
107:                 ECPDropAdapter dropAdapter = null;
108:                 // read extensionpoint, if no defined take default
109:                 final IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(
110:                         "org.eclipse.emf.ecp.ui.dropAdapter"); //$NON-NLS-1$
111:                 for (final IExtension extension : extensionPoint.getExtensions()) {
112:                         final IConfigurationElement configurationElement = extension.getConfigurationElements()[0];
113:                         try {
114:                                 dropAdapter = (ECPDropAdapter) configurationElement.createExecutableExtension("class"); //$NON-NLS-1$
115:                                 dropAdapter.setViewer(viewer);
116:                                 break;
117:                         } catch (final CoreException ex) {
118:                                 Activator.log(ex);
119:                         }
120:                 }
121:                 if (dropAdapter == null) {
122:                         dropAdapter = new ModelExplorerDropAdapter(viewer);
123:                 }
124:                 return dropAdapter;
125:         }
126:
127:         private static ILabelProvider getLabelProvider(ModelContentProvider contentProvider) {
128:                 IECPLabelProvider labelProvider = null;
129:                 // read extensionpoint, if no defined take default
130:                 final IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(
131:                         "org.eclipse.emf.ecp.ui.labelProvider"); //$NON-NLS-1$
132:                 for (final IExtension extension : extensionPoint.getExtensions()) {
133:                         final IConfigurationElement configurationElement = extension.getConfigurationElements()[0];
134:                         try {
135:                                 labelProvider = (IECPLabelProvider) configurationElement.createExecutableExtension("class"); //$NON-NLS-1$
136:                                 labelProvider.setModelContextProvider(contentProvider);
137:                                 return labelProvider;
138:                         } catch (final CoreException ex) {
139:                                 Activator.log(ex);
140:                         }
141:                 }
142:
143:                 labelProvider = new ModelLabelProvider(contentProvider);
144:                 return labelProvider;
145:         }
146:
147:         /**
148:          * Create the ECP RepositoryExplorer View which is based on the {@link TreeViewer}.
149:          *
150:          * @param parent The {@link Composite} to create onto
151:          * @param labelDecorator The {@link ILabelDecorator} to use on labels
152:          * @return The create {@link TreeViewer}
153:          */
154:         public static TreeViewer createRepositoryExplorerViewer(Composite parent, ILabelDecorator labelDecorator) {
155:                 final RepositoriesContentProvider contentProvider = new RepositoriesContentProvider();
156:                 final TreeViewer viewer = TreeViewerFactory.createTreeViewer(parent, new RepositoriesLabelProvider(
157:                         contentProvider),
158:                         contentProvider,
159:                         ECPUtil.getECPRepositoryManager(), labelDecorator, true);
160:                 return viewer;
161:         }
162: }