Skip to content

Package: AutocompleteTextControlSWTRenderer

AutocompleteTextControlSWTRenderer

nameinstructionbranchcomplexitylinemethod
AutocompleteTextControlSWTRenderer(VControl, ViewModelContext, ReportService, EMFFormsDatabinding, EMFFormsLabelProvider, VTViewTemplateProvider)
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
createBindings(Viewer)
M: 0 C: 24
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
createJFaceViewer(Composite)
M: 0 C: 25
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
getProposals()
M: 0 C: 33
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
getUnsetText()
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%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2015 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: * Johannes Faltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.swt.control.text.autocomplete.renderer;
15:
16: import java.util.Collections;
17: import java.util.List;
18:
19: import javax.inject.Inject;
20:
21: import org.eclipse.core.databinding.Binding;
22: import org.eclipse.core.databinding.observable.IObserving;
23: import org.eclipse.core.databinding.observable.value.IObservableValue;
24: import org.eclipse.emf.ecore.EAttribute;
25: import org.eclipse.emf.ecore.EObject;
26: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
27: import org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlJFaceViewerSWTRenderer;
28: import org.eclipse.emf.ecp.view.spi.model.VControl;
29: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
30: import org.eclipse.emfforms.internal.swt.control.text.autocomplete.MessageKeys;
31: import org.eclipse.emfforms.spi.common.report.ReportService;
32: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
33: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
34: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
35: import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
36: import org.eclipse.emfforms.spi.swt.control.text.autocomplete.viewservice.AutocompleteViewModelService;
37: import org.eclipse.jface.databinding.swt.ISWTObservableValue;
38: import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
39: import org.eclipse.jface.fieldassist.AutoCompleteField;
40: import org.eclipse.jface.fieldassist.ComboContentAdapter;
41: import org.eclipse.jface.viewers.ArrayContentProvider;
42: import org.eclipse.jface.viewers.ComboViewer;
43: import org.eclipse.jface.viewers.Viewer;
44: import org.eclipse.swt.SWT;
45: import org.eclipse.swt.widgets.Composite;
46:
47: /**
48: * The text control renderer allows to enter text while given autocompletion proposals. Moreover it is possible to
49: * select a proposed value from a combo box.
50: *
51: * @author jfaltermeier
52: *
53: */
54: public class AutocompleteTextControlSWTRenderer extends SimpleControlJFaceViewerSWTRenderer {
55:
56:         /**
57:          * Constructs a new {@link AutocompleteViewModelService}.
58:          *
59:          * @param vElement the view model element to be rendered
60:          * @param viewContext the view context
61:          * @param reportService The {@link ReportService}
62:          * @param emfFormsDatabinding The {@link EMFFormsDatabinding}
63:          * @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
64:          * @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
65:          */
66:         @Inject
67:         public AutocompleteTextControlSWTRenderer(
68:                 VControl vElement,
69:                 ViewModelContext viewContext,
70:                 ReportService reportService,
71:                 EMFFormsDatabinding emfFormsDatabinding,
72:                 EMFFormsLabelProvider emfFormsLabelProvider,
73:                 VTViewTemplateProvider vtViewTemplateProvider) {
74:                 super(vElement, viewContext, reportService, emfFormsDatabinding, emfFormsLabelProvider, vtViewTemplateProvider);
75:         }
76:
77:         /**
78:          * {@inheritDoc}
79:          *
80:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlJFaceViewerSWTRenderer#createBindings(org.eclipse.jface.viewers.Viewer)
81:          */
82:         @Override
83:         protected Binding[] createBindings(Viewer viewer) throws DatabindingFailedException {
84:                 final ISWTObservableValue targetObservable = WidgetProperties.text()
85:                         .observe(ComboViewer.class.cast(viewer).getCombo());
86:                 final IObservableValue modelObservable = getModelValue();
87:                 final Binding binding = getDataBindingContext().bindValue(targetObservable, modelObservable);
88:                 return new Binding[] { binding };
89:         }
90:
91:         /**
92:          * {@inheritDoc}
93:          *
94:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlJFaceViewerSWTRenderer#createJFaceViewer(org.eclipse.swt.widgets.Composite)
95:          */
96:         @Override
97:         protected Viewer createJFaceViewer(Composite parent) throws DatabindingFailedException {
98:                 final ComboViewer combo = new ComboViewer(parent, SWT.DROP_DOWN);
99:                 combo.setContentProvider(ArrayContentProvider.getInstance());
100:                 combo.setInput(getProposals());
101:                 new AutoCompleteField(
102:                         combo.getCombo(),
103:                         new ComboContentAdapter(),
104:                         combo.getCombo().getItems());
105:                 return combo;
106:         }
107:
108:         /**
109:          * Returns the list of proposals.
110:          *
111:          * @return the list
112:          * @throws DatabindingFailedException in case the model value could not be created
113:          */
114:         List<String> getProposals() throws DatabindingFailedException {
115:                 final AutocompleteViewModelService service = getViewModelContext()
116:                         .getService(AutocompleteViewModelService.class);
117:•                if (service == null) {
118:                         /* reported by #getService(Class) */
119:                         return Collections.emptyList();
120:                 }
121:                 final IObservableValue modelValue = getModelValue();
122:                 final EObject object = EObject.class.cast(IObserving.class.cast(modelValue).getObserved());
123:                 final EAttribute attribute = EAttribute.class.cast(modelValue.getValueType());
124:                 /* do not dispose the model value here, since future calls to #getModelValue will return a disposed observale */
125:                 return service.getProposals(object, attribute);
126:         }
127:
128:         /**
129:          * {@inheritDoc}
130:          *
131:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
132:          */
133:         @Override
134:         protected String getUnsetText() {
135:                 return LocalizationServiceHelper.getString(getClass(), MessageKeys.AutocompleteTextControlSWTRenderer_Set);
136:         }
137:
138: }