Skip to content

Package: URLSelectionControlSWTRenderer$1

URLSelectionControlSWTRenderer$1

nameinstructionbranchcomplexitylinemethod
widgetSelected(SelectionEvent)
M: 36 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
{...}
M: 9 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-2014 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 - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.template.internal.tooling.controls;
15:
16: import java.io.File;
17: import java.net.MalformedURLException;
18:
19: import org.eclipse.core.databinding.Binding;
20: import org.eclipse.core.databinding.UpdateValueStrategy;
21: import org.eclipse.core.databinding.observable.IObserving;
22: import org.eclipse.core.databinding.observable.value.IObservableValue;
23: import org.eclipse.core.resources.IResource;
24: import org.eclipse.core.resources.ResourcesPlugin;
25: import org.eclipse.emf.common.command.Command;
26: import org.eclipse.emf.ecore.EObject;
27: import org.eclipse.emf.ecore.EStructuralFeature;
28: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
29: import org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer;
30: import org.eclipse.emf.ecp.view.spi.model.VControl;
31: import org.eclipse.emf.ecp.view.template.internal.tooling.Activator;
32: import org.eclipse.emf.ecp.view.template.internal.tooling.Messages;
33: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
34: import org.eclipse.emf.edit.command.SetCommand;
35: import org.eclipse.emf.edit.domain.EditingDomain;
36: import org.eclipse.emfforms.spi.common.report.ReportService;
37: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
38: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
39: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
40: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
41: import org.eclipse.jface.databinding.swt.typed.WidgetProperties;
42: import org.eclipse.jface.layout.GridDataFactory;
43: import org.eclipse.jface.layout.GridLayoutFactory;
44: import org.eclipse.jface.viewers.ILabelProvider;
45: import org.eclipse.jface.viewers.ITreeContentProvider;
46: import org.eclipse.jface.window.Window;
47: import org.eclipse.swt.SWT;
48: import org.eclipse.swt.events.SelectionAdapter;
49: import org.eclipse.swt.events.SelectionEvent;
50: import org.eclipse.swt.widgets.Button;
51: import org.eclipse.swt.widgets.Composite;
52: import org.eclipse.swt.widgets.Control;
53: import org.eclipse.swt.widgets.FileDialog;
54: import org.eclipse.swt.widgets.Label;
55: import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
56: import org.eclipse.ui.model.WorkbenchContentProvider;
57: import org.eclipse.ui.model.WorkbenchLabelProvider;
58: import org.osgi.framework.BundleContext;
59: import org.osgi.framework.FrameworkUtil;
60: import org.osgi.framework.ServiceReference;
61:
62: /**
63: * Control for selecting a file and saving the path as url.
64: *
65: * @author Eugen Neufeld
66: *
67: */
68: public class URLSelectionControlSWTRenderer extends SimpleControlSWTControlSWTRenderer {
69:
70:         private static final EMFFormsDatabinding EMFFORMS_DATABINDING;
71:         private static final EMFFormsLabelProvider EMFFORMS_LABELPROVIDER;
72:         private static final VTViewTemplateProvider VT_VIEW_TEMPLATEPROVIDER;
73:
74:         static {
75:                 final BundleContext bundleContext = FrameworkUtil.getBundle(URLSelectionControlSWTRenderer.class)
76:                         .getBundleContext();
77:                 final ServiceReference<EMFFormsDatabinding> emfFormsDatabindingServiceReference = bundleContext
78:                         .getServiceReference(EMFFormsDatabinding.class);
79:                 EMFFORMS_DATABINDING = bundleContext.getService(emfFormsDatabindingServiceReference);
80:                 final ServiceReference<EMFFormsLabelProvider> emfFormsLabelProviderServiceReference = bundleContext
81:                         .getServiceReference(EMFFormsLabelProvider.class);
82:                 EMFFORMS_LABELPROVIDER = bundleContext.getService(emfFormsLabelProviderServiceReference);
83:                 final ServiceReference<VTViewTemplateProvider> vtViewTemplateProviderServiceReference = bundleContext
84:                         .getServiceReference(VTViewTemplateProvider.class);
85:                 VT_VIEW_TEMPLATEPROVIDER = bundleContext.getService(vtViewTemplateProviderServiceReference);
86:         }
87:
88:         /**
89:          * Default constructor.
90:          *
91:          * @param vElement the view model element to be rendered
92:          * @param viewContext the view context
93:          * @param reportService The {@link ReportService}
94:          */
95:         public URLSelectionControlSWTRenderer(VControl vElement, ViewModelContext viewContext,
96:                 ReportService reportService) {
97:                 super(vElement, viewContext, reportService, EMFFORMS_DATABINDING, EMFFORMS_LABELPROVIDER,
98:                         VT_VIEW_TEMPLATEPROVIDER);
99:         }
100:
101:         /**
102:          * {@inheritDoc}
103:          *
104:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createBindings(org.eclipse.swt.widgets.Control,
105:          * org.eclipse.emf.ecore.EStructuralFeature.Setting)
106:          */
107:         @Override
108:         protected Binding[] createBindings(Control control) throws DatabindingFailedException {
109:                 final Composite composite = Composite.class.cast(control);
110:                 final Control childControl = composite.getChildren()[0];
111:                 final IObservableValue value = WidgetProperties.text().observe(childControl);
112:                 final Binding binding = getDataBindingContext().bindValue(value, getModelValue(),
113:                         withPreSetValidation(new UpdateValueStrategy()), null);
114:
115:                 final IObservableValue toolTip = WidgetProperties.tooltipText().observe(childControl);
116:                 final Binding tooltipBinding = getDataBindingContext().bindValue(toolTip, getModelValue(),
117:                         withPreSetValidation(new UpdateValueStrategy()), null);
118:                 return new Binding[] { binding, tooltipBinding };
119:         }
120:
121:         /**
122:          * {@inheritDoc}
123:          *
124:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTControlSWTRenderer#createSWTControl(org.eclipse.swt.widgets.Composite)
125:          */
126:         @Override
127:         protected Control createSWTControl(Composite parent) {
128:                 final Composite composite = new Composite(parent, SWT.NONE);
129:                 composite.setBackgroundMode(SWT.INHERIT_FORCE);
130:                 GridLayoutFactory.fillDefaults().numColumns(3).equalWidth(false).applyTo(composite);
131:                 final Label label = new Label(composite, SWT.NONE);
132:                 GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BEGINNING).grab(true, false).applyTo(label);
133:                 final Button selectExternFileButton = new Button(composite, SWT.PUSH);
134:                 GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(false, false)
135:                         .applyTo(selectExternFileButton);
136:                 selectExternFileButton.setText(Messages.URLSelectionControlSWTRenderer_SelectExternalFileBtn);
137:                 selectExternFileButton.addSelectionListener(new SelectionAdapter() {
138:
139:                         /**
140:                          * {@inheritDoc}
141:                          *
142:                          * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
143:                          */
144:                         @Override
145:                         public void widgetSelected(SelectionEvent e) {
146:                                 super.widgetSelected(e);
147:                                 // show dialog
148:                                 final FileDialog fd = new FileDialog(composite.getShell(), SWT.OPEN);
149:                                 final String open = fd.open();
150:•                                if (open == null) {
151:                                         return;
152:                                 }
153:                                 String selectedURL = null;
154:                                 try {
155:                                         selectedURL = new File(open).toURI().toURL().toExternalForm();
156:                                 } catch (final MalformedURLException ex) {
157:                                         Activator.log(ex);
158:                                 }
159:                                 setValue(selectedURL);
160:                         }
161:
162:                 });
163:
164:                 final Button selectWorkspaceFileButton = new Button(composite, SWT.PUSH);
165:                 GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(false, false)
166:                         .applyTo(selectWorkspaceFileButton);
167:                 selectWorkspaceFileButton.setText(Messages.URLSelectionControlSWTRenderer_SelectWorkspaceFileBtn);
168:                 selectWorkspaceFileButton.addSelectionListener(new SelectionAdapter() {
169:
170:                         /**
171:                          * {@inheritDoc}
172:                          *
173:                          * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
174:                          */
175:                         @Override
176:                         public void widgetSelected(SelectionEvent e) {
177:                                 super.widgetSelected(e);
178:                                 final ITreeContentProvider contentProvider = new WorkbenchContentProvider();
179:                                 final ILabelProvider labelProvider = new WorkbenchLabelProvider();
180:                                 final ElementTreeSelectionDialog etsd = new ElementTreeSelectionDialog(composite.getShell(),
181:                                         labelProvider, contentProvider);
182:                                 etsd.setInput(ResourcesPlugin.getWorkspace().getRoot());
183:                                 final int open = etsd.open();
184:                                 if (Window.CANCEL == open) {
185:                                         return;
186:                                 }
187:                                 final IResource resource = (IResource) etsd.getResult()[0];
188:
189:                                 final String selectedURL = "platform:/plugin" + resource.getFullPath().toString(); //$NON-NLS-1$
190:
191:                                 setValue(selectedURL);
192:                         }
193:
194:                 });
195:                 return composite;
196:         }
197:
198:         private void setValue(String selectedURL) {
199:                 IObservableValue observableValue;
200:                 try {
201:                         observableValue = getEMFFormsDatabinding()
202:                                 .getObservableValue(getVElement().getDomainModelReference(), getViewModelContext().getDomainModel());
203:                 } catch (final DatabindingFailedException ex) {
204:                         getReportService().report(new DatabindingFailedReport(ex));
205:                         return;
206:                 }
207:                 final EStructuralFeature structuralFeature = (EStructuralFeature) observableValue.getValueType();
208:                 final EObject eObject = (EObject) ((IObserving) observableValue).getObserved();
209:                 observableValue.dispose();
210:
211:                 final EditingDomain editingDomain = getEditingDomain(eObject);
212:                 final Command command = SetCommand.create(editingDomain, eObject, structuralFeature, selectedURL);
213:                 editingDomain.getCommandStack().execute(command);
214:         }
215:
216:         /**
217:          * {@inheritDoc}
218:          *
219:          * @see org.eclipse.emf.ecp.view.spi.core.swt.SimpleControlSWTRenderer#getUnsetText()
220:          */
221:         @Override
222:         protected String getUnsetText() {
223:                 return Messages.URLSelectionControlSWTRenderer_UnsetText;
224:         }
225:
226: }