Skip to content

Package: LinkCellEditor$2

LinkCellEditor$2

nameinstructionbranchcomplexitylinemethod
widgetDefaultSelected(SelectionEvent)
M: 7 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
widgetSelected(SelectionEvent)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 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-2013 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.edit.internal.swt.reference;
15:
16: import java.text.MessageFormat;
17:
18: import org.eclipse.core.databinding.DataBindingContext;
19: import org.eclipse.core.databinding.UpdateValueStrategy;
20: import org.eclipse.core.databinding.observable.value.IObservableValue;
21: import org.eclipse.core.databinding.property.INativePropertyListener;
22: import org.eclipse.core.databinding.property.ISimplePropertyListener;
23: import org.eclipse.core.databinding.property.value.IValueProperty;
24: import org.eclipse.core.databinding.property.value.SimpleValueProperty;
25: import org.eclipse.emf.common.notify.AdapterFactory;
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.util.ECPModelElementChangeListener;
29: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
30: import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
31: import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
32: import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
33: import org.eclipse.jface.viewers.CellEditor;
34: import org.eclipse.swt.SWT;
35: import org.eclipse.swt.events.KeyEvent;
36: import org.eclipse.swt.events.SelectionAdapter;
37: import org.eclipse.swt.events.SelectionEvent;
38: import org.eclipse.swt.graphics.Image;
39: import org.eclipse.swt.widgets.Composite;
40: import org.eclipse.swt.widgets.Control;
41: import org.eclipse.swt.widgets.Link;
42:
43: /**
44: * A cell editor displaying a link.
45: *
46: * @author Eugen Neufeld
47: *
48: */
49: public class LinkCellEditor extends CellEditor implements ECPCellEditor {
50:
51:         private Link link;
52:         private AdapterFactoryItemDelegator adapterFactoryItemDelegator;
53:         private ComposedAdapterFactory composedAdapterFactory;
54:         private ECPModelElementChangeListener modelElementChangeListener;
55:
56:         /**
57:          * Default constructor.
58:          *
59:          * @param parent the parent
60:          */
61:         public LinkCellEditor(Composite parent) {
62:                 super(parent);
63:         }
64:
65:         /**
66:          * Constructor allowing to specify a SWT style.
67:          *
68:          * @param parent the parent
69:          * @param style the SWT style
70:          */
71:         public LinkCellEditor(Composite parent, int style) {
72:                 super(parent, style);
73:         }
74:
75:         /**
76:          *
77:          * {@inheritDoc}
78:          *
79:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getValueProperty()
80:          */
81:         @Override
82:         public IValueProperty getValueProperty() {
83:                 return new SimpleValueProperty() {
84:
85:                         @Override
86:                         public Object getValueType() {
87:                                 return String.class;
88:                         }
89:
90:                         @Override
91:                         protected Object doGetValue(Object source) {
92:                                 return LinkCellEditor.this.doGetValue();
93:                         }
94:
95:                         @Override
96:                         protected void doSetValue(Object source, Object value) {
97:                                 LinkCellEditor.this.doSetValue(value);
98:                         }
99:
100:                         @Override
101:                         public IObservableValue observe(Object source) {
102:                                 if (source instanceof LinkCellEditor) {
103:                                         return observe(link);
104:                                 }
105:                                 return super.observe(source);
106:                         }
107:
108:                         @Override
109:                         public INativePropertyListener adaptListener(ISimplePropertyListener listener) {
110:                                 return null;
111:                         }
112:                 };
113:         }
114:
115:         /**
116:          * {@inheritDoc}
117:          *
118:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#instantiate(org.eclipse.emf.ecore.EStructuralFeature,
119:          * org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
120:          */
121:         @Override
122:         public void instantiate(EStructuralFeature eStructuralFeature, ViewModelContext viewModelContext) {
123:
124:         }
125:
126:         @Override
127:         protected Control createControl(Composite parent) {
128:                 composedAdapterFactory = new ComposedAdapterFactory(new AdapterFactory[] {
129:                         new ReflectiveItemProviderAdapterFactory(),
130:                         new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE) });
131:
132:                 adapterFactoryItemDelegator = new AdapterFactoryItemDelegator(composedAdapterFactory);
133:                 link = new Link(parent, SWT.NONE);
134:                 link.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_edit_cellEditor_reference"); //$NON-NLS-1$
135:                 link.addSelectionListener(new SelectionAdapter() {
136:
137:                         private static final long serialVersionUID = 1L;
138:
139:                         @Override
140:                         public void widgetDefaultSelected(SelectionEvent e) {
141:                                 super.widgetDefaultSelected(e);
142:                                 widgetSelected(e);
143:                         }
144:
145:                         @Override
146:                         public void widgetSelected(SelectionEvent e) {
147:                                 super.widgetSelected(e);
148:                         }
149:
150:                 });
151:                 return link;
152:         }
153:
154:         @Override
155:         protected Object doGetValue() {
156:                 return link.getText();
157:         }
158:
159:         @Override
160:         public void dispose() {
161:                 composedAdapterFactory.dispose();
162:                 if (modelElementChangeListener != null) {
163:                         modelElementChangeListener.remove();
164:                 }
165:                 super.dispose();
166:         }
167:
168:         @Override
169:         protected void doSetFocus() {
170:                 link.setFocus();
171:         }
172:
173:         @Override
174:         protected void doSetValue(Object value) {
175:                 final String linkName = adapterFactoryItemDelegator.getText(value);
176:                 link.setText("<a>" + linkName + "</a>"); //$NON-NLS-1$ //$NON-NLS-2$
177:         }
178:
179:         /*
180:          * (non-Javadoc)
181:          * @see org.eclipse.jface.viewers.CellEditor#focusLost()
182:          */
183:         @Override
184:         protected void focusLost() {
185:                 if (isActivated()) {
186:                         applyEditorValueAndDeactivate();
187:                 }
188:         }
189:
190:         /*
191:          * (non-Javadoc)
192:          * @see org.eclipse.jface.viewers.CellEditor#keyReleaseOccured(org.eclipse.swt.events.KeyEvent)
193:          */
194:         @Override
195:         protected void keyReleaseOccured(KeyEvent keyEvent) {
196:                 super.keyReleaseOccured(keyEvent);
197:                 if (keyEvent.character == '\u001b') { // Escape character
198:                         fireCancelEditor();
199:                 } else if (keyEvent.character == '\t') { // tab key
200:                         applyEditorValueAndDeactivate();
201:                 }
202:         }
203:
204:         /**
205:          * Applies the currently selected value and deactiavates the cell editor.
206:          */
207:         void applyEditorValueAndDeactivate() {
208:                 // must set the selection before getting value
209:
210:                 final Object newValue = doGetValue();
211:                 markDirty();
212:                 final boolean isValid = isCorrect(newValue);
213:                 setValueValid(isValid);
214:
215:                 if (!isValid) {
216:                         MessageFormat.format(getErrorMessage(), new Object[] { newValue });
217:                 }
218:
219:                 fireApplyEditorValue();
220:                 deactivate();
221:         }
222:
223:         /**
224:          *
225:          * {@inheritDoc}
226:          *
227:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getFormatedString(java.lang.Object)
228:          */
229:         @Override
230:         public String getFormatedString(Object value) {
231:                 return adapterFactoryItemDelegator.getText(value);
232:         }
233:
234:         /**
235:          *
236:          * {@inheritDoc}
237:          *
238:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getColumnWidthWeight()
239:          */
240:         @Override
241:         public int getColumnWidthWeight() {
242:                 return 100;
243:         }
244:
245:         /**
246:          *
247:          * {@inheritDoc}
248:          *
249:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getTargetToModelStrategy(org.eclipse.core.databinding.DataBindingContext)
250:          */
251:         @Override
252:         public UpdateValueStrategy getTargetToModelStrategy(DataBindingContext databindingContext) {
253:                 // TODO Auto-generated method stub
254:                 return null;
255:         }
256:
257:         /**
258:          *
259:          * {@inheritDoc}
260:          *
261:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getModelToTargetStrategy(org.eclipse.core.databinding.DataBindingContext)
262:          */
263:         @Override
264:         public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
265:                 // TODO Auto-generated method stub
266:                 return null;
267:         }
268:
269:         /**
270:          * {@inheritDoc}
271:          *
272:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#setEditable(boolean)
273:          */
274:         @Override
275:         public void setEditable(boolean editable) {
276:                 if (link != null) {
277:                         link.setEnabled(editable);
278:                 }
279:         }
280:
281:         /**
282:          * {@inheritDoc}
283:          *
284:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getImage(java.lang.Object)
285:          */
286:         @Override
287:         public Image getImage(Object value) {
288:                 return null;
289:         }
290:
291:         /**
292:          * {@inheritDoc}
293:          *
294:          * @see org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor#getMinWidth()
295:          */
296:         @Override
297:         public int getMinWidth() {
298:                 return 0;
299:         }
300: }