Skip to content

Package: DateCellEditor$1

DateCellEditor$1

nameinstructionbranchcomplexitylinemethod
adaptListener(ISimplePropertyListener)
M: 0 C: 2
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
doGetValue(Object)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
doSetValue(Object, Object)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
getValueType()
M: 0 C: 2
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
observe(Object)
M: 0 C: 13
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
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-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.table;
15:
16: import java.text.DateFormat;
17: import java.text.MessageFormat;
18: import java.text.SimpleDateFormat;
19: import java.util.Calendar;
20: import java.util.Date;
21:
22: import org.eclipse.core.databinding.DataBindingContext;
23: import org.eclipse.core.databinding.UpdateValueStrategy;
24: import org.eclipse.core.databinding.observable.value.IObservableValue;
25: import org.eclipse.core.databinding.property.INativePropertyListener;
26: import org.eclipse.core.databinding.property.ISimplePropertyListener;
27: import org.eclipse.core.databinding.property.value.IValueProperty;
28: import org.eclipse.core.databinding.property.value.SimpleValueProperty;
29: import org.eclipse.emf.ecore.EStructuralFeature;
30: import org.eclipse.emf.ecp.edit.spi.swt.table.ECPCellEditor;
31: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
32: import org.eclipse.jface.viewers.CellEditor;
33: import org.eclipse.swt.SWT;
34: import org.eclipse.swt.events.FocusAdapter;
35: import org.eclipse.swt.events.FocusEvent;
36: import org.eclipse.swt.events.KeyAdapter;
37: import org.eclipse.swt.events.KeyEvent;
38: import org.eclipse.swt.events.SelectionAdapter;
39: import org.eclipse.swt.events.SelectionEvent;
40: import org.eclipse.swt.events.TraverseEvent;
41: import org.eclipse.swt.events.TraverseListener;
42: import org.eclipse.swt.graphics.Image;
43: import org.eclipse.swt.widgets.Composite;
44: import org.eclipse.swt.widgets.Control;
45: import org.eclipse.swt.widgets.DateTime;
46:
47: /**
48: * A cell editor for editing a date time value.
49: *
50: * @author Eugen Neufeld
51: *
52: */
53: public class DateCellEditor extends CellEditor implements ECPCellEditor {
54:
55:         private DateTime dateWidget;
56:         private final DateFormat dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
57:
58:         /**
59:          * Default constructor.
60:          */
61:         public DateCellEditor() {
62:         }
63:
64:         /**
65:          * A constructor which takes only a parent.
66:          *
67:          * @param parent the {@link Composite} to use as a parent.
68:          */
69:         public DateCellEditor(Composite parent) {
70:                 super(parent);
71:         }
72:
73:         /**
74:          * A constructor which takes the parent and the style.
75:          *
76:          * @param parent the {@link Composite} to use as a parent
77:          * @param style the Style to set
78:          */
79:         public DateCellEditor(Composite parent, int style) {
80:                 super(parent, style);
81:         }
82:
83:         @Override
84:         public IValueProperty getValueProperty() {
85:                 return new SimpleValueProperty() {
86:
87:                         @Override
88:                         public Object getValueType() {
89:                                 return Date.class;
90:                         }
91:
92:                         @Override
93:                         protected Object doGetValue(Object source) {
94:                                 return DateCellEditor.this.doGetValue();
95:                         }
96:
97:                         @Override
98:                         protected void doSetValue(Object source, Object value) {
99:                                 DateCellEditor.this.doSetValue(value);
100:                         }
101:
102:                         @Override
103:                         public IObservableValue observe(Object source) {
104:•                                if (source instanceof DateCellEditor) {
105:                                         return observe(dateWidget);
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 eStructuralFeature, ViewModelContext viewModelContext) {
119:
120:         }
121:
122:         @Override
123:         protected Control createControl(Composite parent) {
124:                 // Composite composite = new Composite(parent, SWT.NONE);
125:                 dateWidget = new DateTime(parent, SWT.DATE);
126:                 dateWidget.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_edit_cellEditor_date"); //$NON-NLS-1$
127:                 // timeWidget = new DateTime(composite, SWT.TIME);
128:                 // timeWidget.setData(CUSTOM_VARIANT, "org_eclipse_emf_ecp_edit_swt_cellEditor_time"); //$NON-NLS-1$
129:
130:                 dateWidget.addKeyListener(new KeyAdapter() {
131:                         private static final long serialVersionUID = 1L;
132:
133:                         // hook key pressed - see PR 14201
134:                         @Override
135:                         public void keyPressed(KeyEvent e) {
136:                                 keyReleaseOccured(e);
137:                         }
138:                 });
139:                 dateWidget.addSelectionListener(new SelectionAdapter() {
140:                         private static final long serialVersionUID = 1L;
141:
142:                         @Override
143:                         public void widgetDefaultSelected(SelectionEvent event) {
144:                                 applyEditorValueAndDeactivate();
145:                         }
146:
147:                 });
148:
149:                 dateWidget.addTraverseListener(new TraverseListener() {
150:                         private static final long serialVersionUID = 1L;
151:
152:                         @Override
153:                         public void keyTraversed(TraverseEvent e) {
154:                                 if (e.detail == SWT.TRAVERSE_ESCAPE || e.detail == SWT.TRAVERSE_RETURN) {
155:                                         e.doit = false;
156:                                 }
157:                         }
158:                 });
159:
160:                 dateWidget.addFocusListener(new FocusAdapter() {
161:                         private static final long serialVersionUID = 1L;
162:
163:                         @Override
164:                         public void focusLost(FocusEvent e) {
165:                                 DateCellEditor.this.focusLost();
166:                         }
167:                 });
168:                 return dateWidget;
169:         }
170:
171:         @Override
172:         protected Object doGetValue() {
173:                 final Calendar selectedCalendarDate = Calendar.getInstance();
174:                 selectedCalendarDate.set(Calendar.YEAR, dateWidget.getYear());
175:                 selectedCalendarDate.set(Calendar.MONTH, dateWidget.getMonth());
176:                 selectedCalendarDate.set(Calendar.DAY_OF_MONTH, dateWidget.getDay());
177:                 selectedCalendarDate.set(Calendar.HOUR_OF_DAY, dateWidget.getHours());
178:                 selectedCalendarDate.set(Calendar.MINUTE, dateWidget.getMinutes());
179:                 selectedCalendarDate.set(Calendar.SECOND, dateWidget.getSeconds());
180:                 return selectedCalendarDate.getTime();
181:         }
182:
183:         @Override
184:         protected void doSetFocus() {
185:                 dateWidget.setFocus();
186:         }
187:
188:         @Override
189:         protected void doSetValue(Object value) {
190:                 if (value == null) {
191:                         return;
192:                 }
193:                 final Calendar cal = Calendar.getInstance();
194:                 cal.setTime((Date) value);
195:                 dateWidget.setDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
196:                 dateWidget.setTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
197:         }
198:
199:         @Override
200:         protected void focusLost() {
201:                 if (isActivated()) {
202:                         applyEditorValueAndDeactivate();
203:                 }
204:         }
205:
206:         @Override
207:         protected void keyReleaseOccured(KeyEvent keyEvent) {
208:                 super.keyReleaseOccured(keyEvent);
209:                 if (keyEvent.character == '\u001b') { // Escape character
210:                         fireCancelEditor();
211:                 } else if (keyEvent.character == '\t') { // tab key
212:                         applyEditorValueAndDeactivate();
213:                 }
214:         }
215:
216:         /**
217:          * Applies the currently selected value and deactiavates the cell editor.
218:          */
219:         void applyEditorValueAndDeactivate() {
220:                 // must set the selection before getting value
221:
222:                 final Object newValue = doGetValue();
223:                 markDirty();
224:                 final boolean isValid = isCorrect(newValue);
225:                 setValueValid(isValid);
226:
227:                 if (!isValid) {
228:                         MessageFormat.format(getErrorMessage(), new Object[] { newValue });
229:                 }
230:
231:                 fireApplyEditorValue();
232:                 deactivate();
233:         }
234:
235:         @Override
236:         public String getFormatedString(Object value) {
237:                 final Date cal = (Date) value;
238:                 if (value == null) {
239:                         return ""; //$NON-NLS-1$
240:                 }
241:                 return dateFormat.format(cal);
242:         }
243:
244:         @Override
245:         public int getColumnWidthWeight() {
246:                 return 75;
247:         }
248:
249:         @Override
250:         public UpdateValueStrategy getTargetToModelStrategy(DataBindingContext databindingContext) {
251:                 // TODO Auto-generated method stub
252:                 return null;
253:         }
254:
255:         @Override
256:         public UpdateValueStrategy getModelToTargetStrategy(DataBindingContext databindingContext) {
257:                 // TODO Auto-generated method stub
258:                 return null;
259:         }
260:
261:         @Override
262:         public void setEditable(boolean editable) {
263:                 if (dateWidget != null) {
264:                         dateWidget.setEnabled(editable);
265:                 }
266:         }
267:
268:         @Override
269:         public Image getImage(Object value) {
270:                 return null;
271:         }
272:
273:         @Override
274:         public int getMinWidth() {
275:                 return 0;
276:         }
277: }