Skip to content

Package: FeaturePathDMRSubMappedEClassControlSWTRenderer

FeaturePathDMRSubMappedEClassControlSWTRenderer

nameinstructionbranchcomplexitylinemethod
FeaturePathDMRSubMappedEClassControlSWTRenderer(VControl, ViewModelContext, ReportService)
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
linkValue(Shell)
M: 92 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 30 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.HashSet;
18:
19: import org.eclipse.core.databinding.observable.IObserving;
20: import org.eclipse.core.databinding.observable.value.IObservableValue;
21: import org.eclipse.emf.ecore.EClass;
22: import org.eclipse.emf.ecore.EObject;
23: import org.eclipse.emf.ecore.EPackage;
24: import org.eclipse.emf.ecore.EStructuralFeature;
25: import org.eclipse.emf.ecp.common.spi.EMFUtils;
26: import org.eclipse.emf.ecp.spi.common.ui.CompositeFactory;
27: import org.eclipse.emf.ecp.spi.common.ui.composites.SelectionComposite;
28: import org.eclipse.emf.ecp.view.internal.editor.controls.EditableEReferenceLabelControlSWTRenderer;
29: import org.eclipse.emf.ecp.view.internal.editor.handler.CreateDomainModelReferenceWizard;
30: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
31: import org.eclipse.emf.ecp.view.spi.mappingdmr.model.VMappingDomainModelReference;
32: import org.eclipse.emf.ecp.view.spi.model.VControl;
33: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
34: import org.eclipse.emf.ecp.view.spi.model.VViewPackage;
35: import org.eclipse.emfforms.spi.common.report.ReportService;
36: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
37: import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
38: import org.eclipse.jface.viewers.TreeViewer;
39: import org.eclipse.jface.wizard.WizardDialog;
40: import org.eclipse.swt.widgets.Shell;
41:
42: /**
43: * Control for a {@link org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference
44: * VFeaturePathDomainModelReference} that is a child of a {@link VMappingDomainModelReference}.
45: *
46: * @author Eugen Neufeld
47: *
48: */
49: @SuppressWarnings("restriction")
50: public class FeaturePathDMRSubMappedEClassControlSWTRenderer extends
51:         EditableEReferenceLabelControlSWTRenderer {
52:
53:         // /**
54:         // * @author Eugen
55:         // *
56:         // */
57:         // private static final class EStructuralFeatureTreeContentProvider implements ITreeContentProvider {
58:         // @Override
59:         // public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
60:         // // TODO Auto-generated method stub
61:         //
62:         // }
63:         //
64:         // @Override
65:         // public void dispose() {
66:         // // TODO Auto-generated method stub
67:         //
68:         // }
69:         //
70:         // @Override
71:         // public boolean hasChildren(Object element) {
72:         //
73:         // if (EPackage.class.isInstance(element)) {
74:         // return true;
75:         // }
76:         // if (EClass.class.isInstance(element)) {
77:         // final EClass eClass = (EClass) element;
78:         // final boolean hasReferences = !eClass.getEAllReferences().isEmpty();
79:         // final boolean hasAttributes = !eClass.getEAllAttributes().isEmpty();
80:         // return hasReferences || hasAttributes;
81:         //
82:         // }
83:         // if (EReference.class.isInstance(element)) {
84:         // final EReference eReference = (EReference) element;
85:         //
86:         // return hasChildren(eReference
87:         // .getEReferenceType());
88:         // }
89:         // return false;
90:         // }
91:         //
92:         // @Override
93:         // public Object getParent(Object element) {
94:         // // TODO Auto-generated method stub
95:         // return null;
96:         // }
97:         //
98:         // @Override
99:         // public Object[] getElements(Object inputElement) {
100:         // return getChildren(inputElement);
101:         // }
102:         //
103:         // @Override
104:         // public Object[] getChildren(Object parentElement) {
105:         // if (EClass.class.isInstance(parentElement)) {
106:         // final EClass eClass = (EClass) parentElement;
107:         // final Set<Object> result = getElementsForEClass(eClass);
108:         // return result.toArray();
109:         // }
110:         // if (EReference.class.isInstance(parentElement)) {
111:         // final EReference eReference = (EReference) parentElement;
112:         // final Set<Object> result = getElementsForEClass(eReference.getEReferenceType());
113:         // return result.toArray();
114:         // }
115:         // if (EPackage.Registry.class.isInstance(parentElement)) {
116:         // return EPackage.Registry.class.cast(parentElement).values().toArray();
117:         // }
118:         // if (EPackage.class.isInstance(parentElement)) {
119:         // final Set<Object> children = new LinkedHashSet<Object>();
120:         // children.addAll(EPackage.class.cast(parentElement).getESubpackages());
121:         // children.addAll(EPackage.class.cast(parentElement).getEClassifiers());
122:         // return children.toArray();
123:         // }
124:         // return null;
125:         // }
126:         //
127:         // private Set<Object> getElementsForEClass(EClass eClass) {
128:         // final Set<Object> result = new LinkedHashSet<Object>();
129:         // if (eClass.isAbstract() || eClass.isInterface()) {
130:         // // find eClasses which are not abstract
131:         // for (final EClassifier eClassifier : eClass.getEPackage().getEClassifiers()) {
132:         // if (eClass != eClassifier && EClass.class.isInstance(eClassifier)
133:         // && eClass.isSuperTypeOf((EClass) eClassifier)) {
134:         // result.add(eClassifier);
135:         // }
136:         // }
137:         // }
138:         // else {
139:         // result.addAll(eClass.getEAllReferences());
140:         // result.addAll(eClass.getEAllAttributes());
141:         // }
142:         // return result;
143:         // }
144:         // }
145:
146:         /**
147:          * @param vElement the view model element to be rendered
148:          * @param viewContext the view context
149:          * @param reportService the {@link ReportService}
150:          */
151:         public FeaturePathDMRSubMappedEClassControlSWTRenderer(VControl vElement, ViewModelContext viewContext,
152:                 ReportService reportService) {
153:                 super(vElement, viewContext, reportService);
154:         }
155:
156:         @Override
157:         protected void linkValue(Shell shell) {
158:                 IObservableValue observableValue;
159:                 try {
160:                         observableValue = getEMFFormsDatabinding()
161:                                 .getObservableValue(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
162:                 } catch (final DatabindingFailedException ex) {
163:                         showLinkValueFailedMessageDialog(shell, ex);
164:                         return;
165:                 }
166:                 final EObject eObject = (EObject) ((IObserving) observableValue).getObserved();
167:                 final EStructuralFeature structuralFeature = (EStructuralFeature) observableValue.getValueType();
168:                 observableValue.dispose();
169:
170:                 final VMappingDomainModelReference mappingDomainModelReference = VMappingDomainModelReference.class
171:                         .cast(eObject);
172:
173:                 final EClass eclass = mappingDomainModelReference.getMappedClass();
174:
175:                 final Collection<EClass> classes = EMFUtils.getSubClasses(VViewPackage.eINSTANCE
176:                         .getDomainModelReference());
177:                 // Don't allow to create a plain DMR legacy mode
178:                 classes.remove(VViewPackage.Literals.DOMAIN_MODEL_REFERENCE);
179:
180:                 final CreateDomainModelReferenceWizard wizard = new CreateDomainModelReferenceWizard(
181:                         eObject, structuralFeature, getEditingDomain(eObject), eclass, "New Reference Element", //$NON-NLS-1$
182:                         LocalizationServiceHelper.getString(EditableEReferenceLabelControlSWTRenderer.class,
183:                                 "NewModelElementWizard_WizardTitle_AddModelElement"), //$NON-NLS-1$
184:                         LocalizationServiceHelper.getString(EditableEReferenceLabelControlSWTRenderer.class,
185:                                 "NewModelElementWizard_PageTitle_AddModelElement"), //$NON-NLS-1$
186:                         LocalizationServiceHelper.getString(EditableEReferenceLabelControlSWTRenderer.class,
187:                                 "NewModelElementWizard_PageDescription_AddModelElement"), //$NON-NLS-1$
188:                         (VDomainModelReference) eObject.eGet(structuralFeature, true));
189:
190:                 final SelectionComposite<TreeViewer> helper = CompositeFactory.getSelectModelClassComposite(
191:                         new HashSet<EPackage>(),
192:                         new HashSet<EPackage>(), classes);
193:                 wizard.setCompositeProvider(helper);
194:
195:                 final WizardDialog wd = new WizardDialog(shell, wizard);
196:                 wd.open();
197:
198:                 // final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
199:                 // new ReflectiveItemProviderAdapterFactory(),
200:                 // new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
201:                 // final AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(
202:                 // adapterFactory);
203:                 // final ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, labelProvider,
204:                 // getContentProvider());
205:                 // dialog.setAllowMultiple(false);
206:                 // dialog.setValidator(new ISelectionStatusValidator() {
207:                 //
208:                 // @Override
209:                 // public IStatus validate(Object[] selection) {
210:                 // if (selection.length != 0 && EStructuralFeature.class.isInstance(selection[0])) {
211:                 //
212:                 // return Status.OK_STATUS;
213:                 // }
214:                 // return new Status(IStatus.ERROR, "org.eclipse.emf.ecp.view.mappingdmr.tooling", //$NON-NLS-1$
215:                 // "This is not an EStructuralFeature."); //$NON-NLS-1$
216:                 // }
217:                 // });
218:                 // dialog.setInput(getInput());
219:                 // dialog.setMessage("Select an EClass."); //$NON-NLS-1$
220:                 // dialog.setTitle("Select an EClass."); //$NON-NLS-1$
221:                 // dialog.setComparator(new ViewerComparator());
222:                 // final int result = dialog.open();
223:                 // if (Window.OK == result) {
224:                 // final Object selection = dialog.getFirstResult();
225:                 // if (EStructuralFeature.class.isInstance(selection)) {
226:                 // final EStructuralFeature selectedFeature = (EStructuralFeature) selection;
227:                 // final VFeaturePathDomainModelReference view = (VFeaturePathDomainModelReference) getVElement()
228:                 // .getDomainModelReference().getIterator().next().getEObject();
229:                 //
230:                 // view.setDomainModelEFeature(selectedFeature);
231:                 //
232:                 // }
233:                 // }
234:                 // labelProvider.dispose();
235:                 // adapterFactory.dispose();
236:         }
237:
238:         // private ITreeContentProvider getContentProvider() {
239:         // return new EStructuralFeatureTreeContentProvider();
240:         // }
241:         //
242:         // /**
243:         // * @return an instance of the {@link org.eclipse.emf.ecore.EPackage.Registry}
244:         // */
245:         // private Object getInput() {
246:         // final Setting setting = getVElement().getDomainModelReference().getIterator().next();
247:         // return VMappingDomainModelReference.class.cast(setting
248:         // .getEObject()).getMappedClass();
249:         // }
250:
251: }