Skip to content

Package: MappedEClassControlSWTRenderer$EClassTreeContentProvider

MappedEClassControlSWTRenderer$EClassTreeContentProvider

nameinstructionbranchcomplexitylinemethod
dispose()
M: 1 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getChildren(Object)
M: 66 C: 0
0%
M: 12 C: 0
0%
M: 7 C: 0
0%
M: 14 C: 0
0%
M: 1 C: 0
0%
getElements(Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getParent(Object)
M: 10 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
hasChildren(Object)
M: 20 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 7 C: 0
0%
M: 1 C: 0
0%
inputChanged(Viewer, Object, Object)
M: 1 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 Neufeld - initial API and implementation
13: */
14: package org.eclipse.emf.ecp.view.mappingdmr.tooling;
15:
16: import java.util.Collection;
17: import java.util.LinkedHashSet;
18: import java.util.Set;
19:
20: import org.eclipse.core.databinding.observable.IObserving;
21: import org.eclipse.core.databinding.observable.value.IObservableValue;
22: import org.eclipse.core.runtime.IStatus;
23: import org.eclipse.core.runtime.Status;
24: import org.eclipse.emf.common.notify.AdapterFactory;
25: import org.eclipse.emf.ecore.EClass;
26: import org.eclipse.emf.ecore.EClassifier;
27: import org.eclipse.emf.ecore.EPackage;
28: import org.eclipse.emf.ecore.EPackage.Descriptor;
29: import org.eclipse.emf.ecore.EPackage.Registry;
30: import org.eclipse.emf.ecore.EReference;
31: import org.eclipse.emf.ecp.common.spi.EMFUtils;
32: import org.eclipse.emf.ecp.view.internal.editor.controls.EditableEReferenceLabelControlSWTRenderer;
33: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
34: import org.eclipse.emf.ecp.view.spi.mappingdmr.model.VMappingDomainModelReference;
35: import org.eclipse.emf.ecp.view.spi.model.VControl;
36: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
37: import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
38: import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
39: import org.eclipse.emfforms.spi.common.report.ReportService;
40: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
41: import org.eclipse.jface.viewers.ITreeContentProvider;
42: import org.eclipse.jface.viewers.Viewer;
43: import org.eclipse.jface.viewers.ViewerComparator;
44: import org.eclipse.jface.window.Window;
45: import org.eclipse.swt.widgets.Shell;
46: import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
47: import org.eclipse.ui.dialogs.ISelectionStatusValidator;
48:
49: /**
50: * Control for a {@link VMappingDomainModelReference}.
51: *
52: * @author Eugen Neufeld
53: *
54: */
55: @SuppressWarnings("restriction")
56: public class MappedEClassControlSWTRenderer extends
57:         EditableEReferenceLabelControlSWTRenderer {
58:
59:         /**
60:          * @param vElement the view model element to be rendered
61:          * @param viewContext the view context
62:          * @param reportService the {@link ReportService}
63:          */
64:         public MappedEClassControlSWTRenderer(VControl vElement, ViewModelContext viewContext,
65:                 ReportService reportService) {
66:                 super(vElement, viewContext, reportService);
67:         }
68:
69:         /**
70:          * @author Eugen
71:          *
72:          */
73:         private static final class EClassTreeContentProvider implements ITreeContentProvider {
74:                 @Override
75:                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
76:                         // TODO Auto-generated method stub
77:
78:                 }
79:
80:                 @Override
81:                 public void dispose() {
82:                         // TODO Auto-generated method stub
83:
84:                 }
85:
86:                 @Override
87:                 public boolean hasChildren(Object element) {
88:•                        if (EPackage.class.isInstance(element)) {
89:                                 return true;
90:                         }
91:•                        if (Descriptor.class.isInstance(element)) {
92:                                 final Descriptor descriptor = (Descriptor) element;
93:                                 descriptor.getEPackage();
94:                                 return true;
95:                         }
96:                         return false;
97:                 }
98:
99:                 @Override
100:                 public Object getParent(Object element) {
101:•                        if (EClass.class.isInstance(element)) {
102:                                 return ((EClass) element).eContainer();
103:                         }
104:                         return null;
105:                 }
106:
107:                 @Override
108:                 public Object[] getElements(Object inputElement) {
109:                         return getChildren(inputElement);
110:                 }
111:
112:                 @Override
113:                 public Object[] getChildren(Object parentElement) {
114:•                        if (EPackage.class.isInstance(parentElement)) {
115:                                 final EPackage ePackage = (EPackage) parentElement;
116:                                 final Set<EClass> result = new LinkedHashSet<EClass>();
117:•                                for (final EClassifier classifier : ePackage.getEClassifiers()) {
118:•                                        if (EClass.class.isInstance(classifier)) {
119:                                                 result.add((EClass) classifier);
120:                                         }
121:                                 }
122:                                 return result.toArray();
123:                         }
124:•                        if (Descriptor.class.isInstance(parentElement)) {
125:                                 return getChildren(((Descriptor) parentElement).getEPackage());
126:                         }
127:•                        if (Registry.class.isInstance(parentElement)) {
128:                                 return ((Registry) parentElement).values().toArray();
129:                         }
130:•                        if (Collection.class.isInstance(parentElement)) {
131:                                 return Collection.class.cast(parentElement).toArray();
132:                         }
133:                         return null;
134:                 }
135:         }
136:
137:         @Override
138:         protected void linkValue(Shell shell) {
139:                 IObservableValue observableValue;
140:                 try {
141:                         observableValue = getEMFFormsDatabinding()
142:                                 .getObservableValue(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
143:                 } catch (final DatabindingFailedException ex) {
144:                         showLinkValueFailedMessageDialog(shell, ex);
145:                         return;
146:                 }
147:                 final VMappingDomainModelReference dmr = (VMappingDomainModelReference) ((IObserving) observableValue)
148:                         .getObserved();
149:                 observableValue.dispose();
150:                 final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
151:                         new ReflectiveItemProviderAdapterFactory(),
152:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
153:                 final AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(
154:                         adapterFactory);
155:                 final ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, labelProvider,
156:                         getContentProvider());
157:                 dialog.setAllowMultiple(false);
158:                 dialog.setValidator(new ISelectionStatusValidator() {
159:
160:                         @Override
161:                         public IStatus validate(Object[] selection) {
162:                                 if (selection.length != 0 && EClass.class.isInstance(selection[0])) {
163:
164:                                         return Status.OK_STATUS;
165:                                 }
166:                                 return new Status(IStatus.ERROR, org.eclipse.emf.ecp.view.internal.editor.controls.Activator.PLUGIN_ID,
167:                                         "This is not an EClass."); //$NON-NLS-1$
168:                         }
169:                 });
170:                 dialog.setInput(getInput(dmr));
171:                 dialog.setMessage("Select an EClass."); //$NON-NLS-1$
172:                 dialog.setTitle("Select an EClass."); //$NON-NLS-1$
173:                 dialog.setComparator(new ViewerComparator());
174:                 final int result = dialog.open();
175:                 if (Window.OK == result) {
176:                         final Object selection = dialog.getFirstResult();
177:                         if (EClass.class.isInstance(selection)) {
178:                                 final EClass selectedFeature = (EClass) selection;
179:
180:                                 dmr.setMappedClass(selectedFeature);
181:
182:                         }
183:                 }
184:                 labelProvider.dispose();
185:         }
186:
187:         private ITreeContentProvider getContentProvider() {
188:                 return new EClassTreeContentProvider();
189:         }
190:
191:         /**
192:          * @return an instance of the {@link org.eclipse.emf.ecore.EPackage.Registry}
193:          */
194:         private Object getInput(VMappingDomainModelReference dmr) {
195:                 final EClass referenceMap = EReference.class.cast(dmr.getDomainModelEFeature()).getEReferenceType();
196:
197:                 final EReference valueReference = EReference.class.cast(referenceMap.getEStructuralFeature("value")); //$NON-NLS-1$
198:                 if (valueReference == null) {
199:                         return null;
200:                 }
201:                 return EMFUtils.getSubClasses(valueReference.getEReferenceType());
202:                 // return Registry.INSTANCE;
203:         }
204:
205: }