Skip to content

Package: ControlRootEClassControl2SWTRenderer$4

ControlRootEClassControl2SWTRenderer$4

nameinstructionbranchcomplexitylinemethod
convert(Object)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
{...}
M: 0 C: 6
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-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: * Alexandra Buzila - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.internal.editor.controls;
15:
16: import java.net.URL;
17:
18: import javax.inject.Inject;
19:
20: import org.eclipse.core.databinding.Binding;
21: import org.eclipse.core.databinding.UpdateValueStrategy;
22: import org.eclipse.core.databinding.observable.value.IObservableValue;
23: import org.eclipse.emf.common.notify.AdapterFactory;
24: import org.eclipse.emf.common.notify.Notification;
25: import org.eclipse.emf.ecore.EObject;
26: import org.eclipse.emf.ecp.edit.spi.util.ECPModelElementChangeListener;
27: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
28: import org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer;
29: import org.eclipse.emf.ecp.view.spi.model.VControl;
30: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
31: import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
32: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
33: import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
34: import org.eclipse.emfforms.spi.common.report.ReportService;
35: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
36: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
37: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
38: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
39: import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
40: import org.eclipse.jface.layout.GridDataFactory;
41: import org.eclipse.jface.layout.GridLayoutFactory;
42: import org.eclipse.swt.SWT;
43: import org.eclipse.swt.widgets.Composite;
44: import org.eclipse.swt.widgets.Control;
45: import org.eclipse.swt.widgets.Display;
46: import org.eclipse.swt.widgets.Label;
47:
48: /**
49: * @author Alexandra Buzila
50: *
51: */
52: public class ControlRootEClassControl2SWTRenderer extends SimpleControlSWTControlSWTRenderer {
53:
54:         /**
55:          * Default constructor.
56:          *
57:          * @param vElement the view model element to be rendered
58:          * @param viewContext the view context
59:          * @param reportService The {@link ReportService}
60:          * @param emfFormsDatabinding The {@link EMFFormsDatabinding}
61:          * @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
62:          * @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
63:          */
64:         @Inject
65:         public ControlRootEClassControl2SWTRenderer(VControl vElement, ViewModelContext viewContext,
66:                 ReportService reportService, EMFFormsDatabinding emfFormsDatabinding,
67:                 EMFFormsLabelProvider emfFormsLabelProvider, VTViewTemplateProvider vtViewTemplateProvider) {
68:                 super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider);
69:         }
70:
71:         private Composite labelComposite;
72:         private Label label;
73:         private ComposedAdapterFactory composedAdapterFactory;
74:         private AdapterFactoryItemDelegator adapterFactoryItemDelegator;
75:         private Label imageLabel;
76:         private ECPModelElementChangeListener modelElementChangeListener;
77:
78:         /**
79:          * {@inheritDoc}
80:          *
81:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
82:          * org.eclipse.emf.ecore.EStructuralFeature.Setting)
83:          */
84:         @Override
85:         protected Binding[] createBindings(Control control) throws DatabindingFailedException {
86:
87:                 final Binding[] bindings = new Binding[3];
88:                 final IObservableValue value = WidgetProperties.text().observe(label);
89:
90:                 bindings[0] = getDataBindingContext().bindValue(value, getModelValue(),
91:                         withPreSetValidation(new UpdateValueStrategy() {
92:
93:                                 @Override
94:                                 public Object convert(Object value) {
95:                                         try {
96:                                                 return getModelValue().getValue();
97:                                         } catch (final DatabindingFailedException ex) {
98:                                                 getReportService().report(new DatabindingFailedReport(ex));
99:                                                 return null;
100:                                         }
101:                                 }
102:                         }), new UpdateValueStrategy() {
103:                                 @Override
104:                                 public Object convert(Object value) {
105:                                         updateChangeListener((EObject) value);
106:                                         return getText(value);
107:                                 }
108:                         });
109:                 final IObservableValue tooltipValue = WidgetProperties.tooltipText().observe(label);
110:                 bindings[1] = getDataBindingContext().bindValue(tooltipValue, getModelValue(),
111:                         withPreSetValidation(new UpdateValueStrategy() {
112:
113:                                 @Override
114:                                 public Object convert(Object value) {
115:                                         try {
116:                                                 return getModelValue().getValue();
117:                                         } catch (final DatabindingFailedException ex) {
118:                                                 getReportService().report(new DatabindingFailedReport(ex));
119:                                                 return null;
120:                                         }
121:                                 }
122:                         }), new UpdateValueStrategy() {
123:                                 @Override
124:                                 public Object convert(Object value) {
125:                                         return getText(value);
126:                                 }
127:                         });
128:
129:                 final IObservableValue imageValue = WidgetProperties.image().observe(imageLabel);
130:                 bindings[2] = getDataBindingContext().bindValue(imageValue, getModelValue(),
131:                         withPreSetValidation(new UpdateValueStrategy() {
132:
133:                                 @Override
134:                                 public Object convert(Object value) {
135:                                         try {
136:                                                 return getModelValue().getValue();
137:                                         } catch (final DatabindingFailedException ex) {
138:                                                 getReportService().report(new DatabindingFailedReport(ex));
139:                                                 return null;
140:                                         }
141:                                 }
142:                         }), new UpdateValueStrategy() {
143:                                 @Override
144:                                 public Object convert(Object value) {
145:                                         return getImage(value);
146:                                 }
147:                         });
148:
149:                 return bindings;
150:         }
151:
152:         private Object getImage(Object value) {
153:                 return Activator.getImage((URL) adapterFactoryItemDelegator.getImage(value));
154:         }
155:
156:         private Object getText(Object value) {
157:                 final String textName = adapterFactoryItemDelegator.getText(value);
158:                 return textName == null ? "" : textName; //$NON-NLS-1$
159:         }
160:
161:         private void updateChangeListener(final EObject value) {
162:                 if (modelElementChangeListener != null) {
163:                         if (modelElementChangeListener.getTarget().equals(value)) {
164:                                 return;
165:                         }
166:                         modelElementChangeListener.remove();
167:                         modelElementChangeListener = null;
168:                 }
169:
170:                 modelElementChangeListener = new ECPModelElementChangeListener(value) {
171:
172:                         @Override
173:                         public void onChange(Notification notification) {
174:                                 Display.getDefault().syncExec(new Runnable() {
175:
176:                                         @Override
177:                                         public void run() {
178:                                                 getDataBindingContext().updateTargets();
179:                                                 labelComposite.layout();
180:
181:                                         }
182:
183:                                 });
184:
185:                         }
186:                 };
187:
188:         }
189:
190:         /**
191:          * {@inheritDoc}
192:          *
193:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
194:          */
195:         @Override
196:         protected Control createSWTControl(Composite parent2) {
197:                 final Composite composite2 = new Composite(parent2, SWT.NONE);
198:                 composite2.setBackground(parent2.getBackground());
199:                 GridLayoutFactory.fillDefaults().numColumns(1).spacing(0, 0).equalWidth(false).applyTo(composite2);
200:
201:                 labelComposite = new Composite(composite2, SWT.NONE);
202:                 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(labelComposite);
203:                 GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(false).applyTo(labelComposite);
204:                 labelComposite.setBackground(composite2.getBackground());
205:
206:                 // create labels
207:                 imageLabel = new Label(labelComposite, SWT.NONE);
208:                 imageLabel.setBackground(labelComposite.getBackground());
209:                 label = new Label(labelComposite, SWT.NONE);
210:                 label.setBackground(labelComposite.getBackground());
211:                 GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.BEGINNING).applyTo(label);
212:                 GridDataFactory.fillDefaults().grab(false, false).align(SWT.FILL, SWT.BEGINNING).hint(20, 20)
213:                         .applyTo(imageLabel);
214:
215:                 composedAdapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
216:                         new ReflectiveItemProviderAdapterFactory(),
217:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
218:                 adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(composedAdapterFactory);
219:
220:                 return composite2;
221:         }
222:
223:         /**
224:          * {@inheritDoc}
225:          *
226:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
227:          */
228:         @Override
229:         protected String getUnsetText() {
230:                 return "Not set"; //$NON-NLS-1$
231:         }
232:
233:         @Override
234:         public void dispose() {
235:                 composedAdapterFactory.dispose();
236:                 if (modelElementChangeListener != null) {
237:                         modelElementChangeListener.remove();
238:                 }
239:                 label.dispose();
240:                 super.dispose();
241:         }
242:
243: }