Skip to content

Package: MultiReferenceCellEditor$1

MultiReferenceCellEditor$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, 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%
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: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
{...}
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-2018 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.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.IValueProperty;
22: import org.eclipse.core.databinding.property.value.SimpleValueProperty;
23: import org.eclipse.emf.common.notify.AdapterFactory;
24: import org.eclipse.emf.ecore.EObject;
25: import org.eclipse.emf.ecore.EReference;
26: import org.eclipse.emf.ecore.EStructuralFeature;
27: import org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor;
28: import org.eclipse.emf.ecp.edit.spi.swt.table.ECPViewerAwareCellEditor;
29: import org.eclipse.emf.ecp.view.model.common.edit.provider.CustomReflectiveItemProviderAdapterFactory;
30: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
31: import org.eclipse.emf.ecp.view.spi.model.ModelChangeListener;
32: import org.eclipse.emf.ecp.view.spi.model.ModelChangeNotification;
33: import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
34: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
35: import org.eclipse.jface.viewers.AbstractTableViewer;
36: import org.eclipse.jface.viewers.CellEditor;
37: import org.eclipse.swt.graphics.Image;
38: import org.eclipse.swt.widgets.Composite;
39: import org.eclipse.swt.widgets.Control;
40:
41: /**
42: * A cell editor, which displays the multi references feature as a readonly text.
43: *
44: * @since 1.18
45: *
46: */
47: public class MultiReferenceCellEditor extends CellEditor implements ECPCellEditor, ECPViewerAwareCellEditor {
48:
49:         private ComposedAdapterFactory caf;
50:         private AdapterFactoryItemDelegator adapterFactoryItemDelegator;
51:         private Composite parent;
52:         private AbstractTableViewer tableViewer;
53:         private EReference tableRefrence;
54:         private ModelChangeListener modelChangeListener;
55:         private ViewModelContext viewModelContext;
56:
57:         /**
58:          * Default constructor.
59:          *
60:          * @param parent the parent
61:          */
62:         public MultiReferenceCellEditor(Composite parent) {
63:                 super(parent);
64:                 this.parent = parent;
65:         }
66:
67:         /**
68:          * Constructor allowing to specify a SWT style.
69:          *
70:          * @param parent the parent
71:          * @param style the SWT style
72:          */
73:         public MultiReferenceCellEditor(Composite parent, int style) {
74:                 super(parent, style);
75:         }
76:
77:         @Override
78:         public IValueProperty getValueProperty() {
79:                 return new SimpleValueProperty() {
80:
81:                         @Override
82:                         public Object getValueType() {
83:                                 return String.class;
84:                         }
85:
86:                         @Override
87:                         protected Object doGetValue(Object source) {
88:                                 return getFormatedString(source);
89:                         }
90:
91:                         @Override
92:                         protected void doSetValue(Object source, Object value) {
93:                         }
94:
95:                         @Override
96:                         public IObservableValue observe(Object source) {
97:                                 return super.observe(parent);
98:                         }
99:
100:                         @Override
101:                         public INativePropertyListener adaptListener(ISimplePropertyListener listener) {
102:                                 return null;
103:                         }
104:                 };
105:         }
106:
107:         @Override
108:         public void instantiate(EStructuralFeature feature, ViewModelContext viewModelContext) {
109:                 caf = new ComposedAdapterFactory(new AdapterFactory[] {
110:                         new CustomReflectiveItemProviderAdapterFactory(),
111:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
112:                 adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(caf);
113:                 this.viewModelContext = viewModelContext;
114:                 modelChangeListener = new ModelChangeListener() {
115:
116:                         @Override
117:                         public void notifyChange(ModelChangeNotification notification) {
118:                                 if (tableViewer == null || tableRefrence == null) {
119:                                         return;
120:                                 }
121:                                 if (notification.getNotifier().eContainingFeature() == feature) {
122:                                         EObject tableRow = notification.getNotifier();
123:                                         while (tableRow != null && tableRow.eContainingFeature() != tableRefrence) {
124:                                                 tableRow = tableRow.eContainer();
125:                                         }
126:                                         if (tableRow != null) {
127:                                                 tableViewer.update(tableRow, null);
128:                                         }
129:                                 }
130:                         }
131:                 };
132:                 viewModelContext.registerDomainChangeListener(modelChangeListener);
133:         }
134:
135:         @Override
136:         public String getFormatedString(Object value) {
137:                 // no need to handle null and not lists as this editor is only used for multi references
138:                 return adapterFactoryItemDelegator.getText(value);
139:         }
140:
141:         @Override
142:         public Image getImage(Object value) {
143:                 return null;
144:         }
145:
146:         @Override
147:         public int getColumnWidthWeight() {
148:                 return 100;
149:         }
150:
151:         @Override
152:         public UpdateValueStrategy getTargetToModelStrategy(DataBindingContext databindingContext) {
153:                 return null;
154:         }
155:
156:         @Override
157:         public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
158:                 return null;
159:         }
160:
161:         @Override
162:         public void setEditable(boolean editable) {
163:                 // intentionally left empty
164:         }
165:
166:         @Override
167:         public int getMinWidth() {
168:                 return 50;
169:         }
170:
171:         @Override
172:         protected Control createControl(Composite parent) {
173:                 return null;
174:         }
175:
176:         @Override
177:         protected Object doGetValue() {
178:                 return null;
179:         }
180:
181:         @Override
182:         protected void doSetFocus() {
183:                 // intentionally left empty
184:         }
185:
186:         @Override
187:         protected void doSetValue(Object value) {
188:                 // intentionally left empty
189:         }
190:
191:         @Override
192:         public void dispose() {
193:                 if (caf != null) {
194:                         caf.dispose();
195:                 }
196:                 if (viewModelContext != null) {
197:                         viewModelContext.unregisterDomainChangeListener(modelChangeListener);
198:                 }
199:                 super.dispose();
200:         }
201:
202:         @Override
203:         public void setTableViewer(AbstractTableViewer tableViewer) {
204:                 this.tableViewer = tableViewer;
205:         }
206:
207:         @Override
208:         public void setTableFeature(EReference tableRefrence) {
209:                 this.tableRefrence = tableRefrence;
210:         }
211:
212: }