Skip to content

Package: SingleReferenceCellEditor$1

SingleReferenceCellEditor$1

nameinstructionbranchcomplexitylinemethod
adaptListener(ISimplePropertyListener)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
doGetValue(Object)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
doSetValue(Object, String)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
getValueType()
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
observe(Object)
M: 13 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
{...}
M: 6 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-2019 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: * EclipseSource Munich - initial API and implementation
13: */
14: package org.eclipse.emf.ecp.view.internal.table.swt.cell;
15:
16: import org.eclipse.core.databinding.DataBindingContext;
17: import org.eclipse.core.databinding.UpdateValueStrategy;
18: import org.eclipse.core.databinding.observable.value.IObservableValue;
19: import org.eclipse.core.databinding.property.INativePropertyListener;
20: import org.eclipse.core.databinding.property.ISimplePropertyListener;
21: import org.eclipse.core.databinding.property.value.SimpleValueProperty;
22: import org.eclipse.emf.common.notify.AdapterFactory;
23: import org.eclipse.emf.ecore.EObject;
24: import org.eclipse.emf.ecore.EReference;
25: import org.eclipse.emf.ecore.EStructuralFeature;
26: import org.eclipse.emf.ecp.edit.internal.swt.SWTImageHelper;
27: import org.eclipse.emf.ecp.edit.spi.ReferenceService;
28: import org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor;
29: import org.eclipse.emf.ecp.edit.spi.swt.table.ECPElementAwareCellEditor;
30: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
31: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
32: import org.eclipse.emf.edit.domain.EditingDomain;
33: import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
34: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
35: import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
36: import org.eclipse.jface.viewers.CellEditor;
37: import org.eclipse.swt.SWT;
38: import org.eclipse.swt.events.FocusEvent;
39: import org.eclipse.swt.events.FocusListener;
40: import org.eclipse.swt.graphics.Image;
41: import org.eclipse.swt.widgets.Composite;
42: import org.eclipse.swt.widgets.Control;
43:
44: /**
45: * Single reference cell editor implementation.
46: *
47: * @author Mat Hansen <mhansen@eclipsesource.com>
48: * @author Eugen Neufeld <eneufeld@eclipsesource.com>
49: * @since 1.22
50: *
51: */
52: @SuppressWarnings("restriction")
53: public class SingleReferenceCellEditor extends CellEditor implements ECPCellEditor, ECPElementAwareCellEditor {
54:
55:         private EObject rowElement;
56:         private ReferenceService referenceService;
57:         private EReference eReference;
58:
59:         private Composite composite;
60:
61:         private ComposedAdapterFactory composedAdapterFactory;
62:         private AdapterFactoryItemDelegator adapterFactoryItemDelegator;
63:
64:         /**
65:          * The constructor.
66:          *
67:          * @param parent the parent composite
68:          */
69:         public SingleReferenceCellEditor(Composite parent) {
70:                 super(parent);
71:         }
72:
73:         /**
74:          * Alternate constructor with SWT style bits.
75:          *
76:          * @param parent the parent composite
77:          * @param style SWT style bits
78:          */
79:         public SingleReferenceCellEditor(Composite parent, int style) {
80:                 super(parent, style);
81:         }
82:
83:         @Override
84:         public SimpleValueProperty getValueProperty() {
85:                 return new SimpleValueProperty<Object, String>() {
86:
87:                         @Override
88:                         public Object getValueType() {
89:                                 return String.class;
90:                         }
91:
92:                         @Override
93:                         protected String doGetValue(Object source) {
94:                                 return (String) SingleReferenceCellEditor.this.doGetValue();
95:                         }
96:
97:                         @Override
98:                         protected void doSetValue(Object source, String value) {
99:                                 SingleReferenceCellEditor.this.doSetValue(value);
100:                         }
101:
102:                         @Override
103:                         public IObservableValue<String> observe(Object source) {
104:•                                if (source instanceof SingleReferenceCellEditor) {
105:                                         return observe(composite);
106:                                 }
107:                                 return super.observe(source);
108:                         }
109:
110:                         @Override
111:                         public INativePropertyListener adaptListener(ISimplePropertyListener listener) {
112:                                 return null;
113:                         }
114:                 };
115:         }
116:
117:         @Override
118:         public void instantiate(EStructuralFeature feature, ViewModelContext viewModelContext) {
119:                 referenceService = viewModelContext.getService(ReferenceService.class);
120:                 eReference = (EReference) feature;
121:         }
122:
123:         @Override
124:         public int getStyle() {
125:                 return 0;
126:         }
127:
128:         @Override
129:         public String getFormatedString(Object value) {
130:                 if (value == null) {
131:                         return ""; //$NON-NLS-1$
132:                 }
133:                 return adapterFactoryItemDelegator.getText(value);
134:         }
135:
136:         @Override
137:         public Image getImage(Object value) {
138:                 final Object image = adapterFactoryItemDelegator.getImage(value);
139:                 return SWTImageHelper.getImage(image);
140:         }
141:
142:         @Override
143:         public int getColumnWidthWeight() {
144:                 return 0;
145:         }
146:
147:         @Override
148:         public UpdateValueStrategy getTargetToModelStrategy(DataBindingContext databindingContext) {
149:                 return null;
150:         }
151:
152:         @Override
153:         public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
154:                 return null;
155:         }
156:
157:         @Override
158:         public void setEditable(boolean editable) {
159:         }
160:
161:         @Override
162:         public int getMinWidth() {
163:                 return 100;
164:         }
165:
166:         @Override
167:         protected Control createControl(Composite parent) {
168:
169:                 composite = new Composite(parent, SWT.NONE);
170:
171:                 composite.addFocusListener(new FocusListener() {
172:
173:                         private boolean focused;
174:
175:                         @Override
176:                         public void focusLost(FocusEvent e) {
177:                         }
178:
179:                         @Override
180:                         public void focusGained(FocusEvent e) {
181:                                 if (focused) {
182:                                         return;
183:                                 }
184:                                 focused = true;
185:                                 try {
186:                                         referenceService.addExistingModelElements(rowElement, eReference);
187:                                 } finally {
188:                                         deactivate();
189:                                         focused = false;
190:                                 }
191:                         }
192:                 });
193:
194:                 composedAdapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
195:                         new ReflectiveItemProviderAdapterFactory(),
196:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
197:                 adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(composedAdapterFactory);
198:
199:                 return composite;
200:         }
201:
202:         @Override
203:         public void dispose() {
204:                 super.dispose();
205:                 composedAdapterFactory.dispose();
206:         }
207:
208:         /**
209:          * Get the {@link EditingDomain} for the given {@link EObject}.
210:          *
211:          * @param domainModel the eObject
212:          * @return the {@link EditingDomain}
213:          */
214:         protected final EditingDomain getEditingDomain(EObject domainModel) {
215:                 return AdapterFactoryEditingDomain.getEditingDomainFor(domainModel);
216:         }
217:
218:         @Override
219:         protected Object doGetValue() {
220:                 return null;
221:         }
222:
223:         @Override
224:         protected void doSetFocus() {
225:                 composite.setFocus();
226:         }
227:
228:         @Override
229:         protected void doSetValue(Object value) {
230:         }
231:
232:         @Override
233:         public void updateRowElement(Object element) {
234:                 rowElement = (EObject) element;
235:         }
236:
237: }