Skip to content

Package: TableControlDetailDialogSWTRenderer$DetailEditButtonSelectionAdapter$1

TableControlDetailDialogSWTRenderer$DetailEditButtonSelectionAdapter$1

nameinstructionbranchcomplexitylinemethod
handleResult(int)
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%
{...}
M: 7 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-2020 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, Bug 566073
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.spi.table.swt;
15:
16: import javax.inject.Inject;
17:
18: import org.eclipse.core.databinding.property.value.IValueProperty;
19: import org.eclipse.emf.ecore.EClass;
20: import org.eclipse.emf.ecore.EObject;
21: import org.eclipse.emf.ecore.EReference;
22: import org.eclipse.emf.ecore.EStructuralFeature.Setting;
23: import org.eclipse.emf.ecore.util.EcoreUtil;
24: import org.eclipse.emf.ecp.edit.spi.swt.util.ECPDialogExecutor;
25: import org.eclipse.emf.ecp.view.internal.table.swt.MessageKeys;
26: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
27: import org.eclipse.emf.ecp.view.spi.model.VElement;
28: import org.eclipse.emf.ecp.view.spi.model.VView;
29: import org.eclipse.emf.ecp.view.spi.model.VViewModelProperties;
30: import org.eclipse.emf.ecp.view.spi.model.util.ViewModelPropertiesHelper;
31: import org.eclipse.emf.ecp.view.spi.provider.ViewProviderHelper;
32: import org.eclipse.emf.ecp.view.spi.table.model.VTableControl;
33: import org.eclipse.emf.ecp.view.spi.table.swt.action.TableActionIconButton;
34: import org.eclipse.emf.ecp.view.spi.table.swt.action.TableRendererAction;
35: import org.eclipse.emf.ecp.view.spi.table.swt.action.TableRendererViewerActionContext;
36: import org.eclipse.emf.ecp.view.spi.util.swt.ImageRegistryService;
37: import org.eclipse.emf.ecp.view.template.model.VTViewTemplateProvider;
38: import org.eclipse.emfforms.spi.common.report.ReportService;
39: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
40: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
41: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
42: import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
43: import org.eclipse.emfforms.spi.core.services.editsupport.EMFFormsEditSupport;
44: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
45: import org.eclipse.emfforms.spi.localization.EMFFormsLocalizationService;
46: import org.eclipse.emfforms.spi.swt.table.action.ActionConfiguration;
47: import org.eclipse.emfforms.spi.swt.table.action.ActionConfigurationBuilder;
48: import org.eclipse.jface.dialogs.Dialog;
49: import org.eclipse.jface.dialogs.IDialogLabelKeys;
50: import org.eclipse.jface.dialogs.MessageDialog;
51: import org.eclipse.jface.resource.JFaceResources;
52: import org.eclipse.jface.viewers.IStructuredSelection;
53: import org.eclipse.jface.viewers.SelectionChangedEvent;
54: import org.eclipse.swt.SWT;
55: import org.eclipse.swt.events.SelectionAdapter;
56: import org.eclipse.swt.events.SelectionEvent;
57: import org.eclipse.swt.widgets.Button;
58: import org.eclipse.swt.widgets.Composite;
59: import org.eclipse.swt.widgets.Shell;
60:
61: /**
62: * Render for a {@link org.eclipse.emf.ecp.view.spi.table.model.VTableControl VTableControl} with a detail editing
63: * dialog.
64: *
65: * @author jfaltermeier
66: *
67: */
68: public class TableControlDetailDialogSWTRenderer extends TableControlSWTRenderer {
69:
70:         /**
71:          * Default constructor.
72:          *
73:          * @param vElement the view model element to be rendered
74:          * @param viewContext the view context
75:          * @param emfFormsDatabinding The {@link EMFFormsDatabindingEMF}
76:          * @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
77:          * @param reportService The {@link ReportService}
78:          * @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
79:          * @param imageRegistryService The {@link ImageRegistryService}
80:          * @param emfFormsEditSupport The {@link EMFFormsEditSupport}
81:          * @since 1.8
82:          */
83:         @Deprecated
84:         // BEGIN COMPLEX CODE
85:         public TableControlDetailDialogSWTRenderer(
86:                 VTableControl vElement,
87:                 ViewModelContext viewContext,
88:                 ReportService reportService,
89:                 EMFFormsDatabindingEMF emfFormsDatabinding,
90:                 EMFFormsLabelProvider emfFormsLabelProvider,
91:                 VTViewTemplateProvider vtViewTemplateProvider,
92:                 ImageRegistryService imageRegistryService,
93:                 EMFFormsEditSupport emfFormsEditSupport) {
94:                 // END COMPLEX CODE
95:                 super(
96:                         vElement,
97:                         viewContext,
98:                         reportService,
99:                         emfFormsDatabinding,
100:                         emfFormsLabelProvider,
101:                         vtViewTemplateProvider,
102:                         imageRegistryService,
103:                         emfFormsEditSupport);
104:         }
105:
106:         /**
107:          * Default constructor.
108:          *
109:          * @param vElement the view model element to be rendered
110:          * @param viewContext the view context
111:          * @param emfFormsDatabinding The {@link EMFFormsDatabinding}
112:          * @param emfFormsLabelProvider The {@link EMFFormsLabelProvider}
113:          * @param reportService The {@link ReportService}
114:          * @param vtViewTemplateProvider The {@link VTViewTemplateProvider}
115:          * @param imageRegistryService The {@link ImageRegistryService}
116:          * @param emfFormsEditSupport The {@link EMFFormsEditSupport}
117:          * @param localizationService The {@link EMFFormsLocalizationService}
118:          * @since 1.26
119:          */
120:         @Inject
121:         // BEGIN COMPLEX CODE
122:         public TableControlDetailDialogSWTRenderer(
123:                 VTableControl vElement,
124:                 ViewModelContext viewContext,
125:                 ReportService reportService,
126:                 EMFFormsDatabindingEMF emfFormsDatabinding,
127:                 EMFFormsLabelProvider emfFormsLabelProvider,
128:                 VTViewTemplateProvider vtViewTemplateProvider,
129:                 ImageRegistryService imageRegistryService,
130:                 EMFFormsEditSupport emfFormsEditSupport,
131:                 EMFFormsLocalizationService localizationService) {
132:                 // END COMPLEX CODE
133:                 super(vElement,
134:                         viewContext,
135:                         reportService,
136:                         emfFormsDatabinding,
137:                         emfFormsLabelProvider,
138:                         vtViewTemplateProvider,
139:                         imageRegistryService,
140:                         emfFormsEditSupport,
141:                         localizationService);
142:         }
143:
144:         private Button detailEditButton;
145:         private VView view;
146:
147:         @Override
148:         protected int addButtonsToButtonBar(Composite buttonComposite) {
149:                 createDetailEditButton(buttonComposite);
150:                 return 1;
151:         }
152:
153:         private void createDetailEditButton(final Composite buttonComposite) {
154:                 detailEditButton = new Button(buttonComposite, SWT.PUSH);
155:                 // detailEditButton.setText("Edit in Detail");
156:                 detailEditButton.setImage(getImage("icons/detailEdit.png")); //$NON-NLS-1$
157:                 detailEditButton.setEnabled(false);
158:                 detailEditButton.addSelectionListener(new DetailEditButtonSelectionAdapter(buttonComposite.getShell()));
159:         }
160:
161:         private VView getView() {
162:                 if (view == null) {
163:                         VView detailView = getVElement().getDetailView();
164:                         if (detailView == null) {
165:                                 IValueProperty<?, ?> valueProperty;
166:                                 try {
167:                                         valueProperty = getEMFFormsDatabinding()
168:                                                 .getValueProperty(getVElement().getDomainModelReference(),
169:                                                         getViewModelContext().getDomainModel());
170:                                 } catch (final DatabindingFailedException ex) {
171:                                         getReportService().report(new DatabindingFailedReport(ex));
172:                                         return null; // possible because the only caller is null safe.
173:                                 }
174:                                 final EReference reference = (EReference) valueProperty.getValueType();
175:                                 final VElement viewModel = getViewModelContext().getViewModel();
176:                                 final VViewModelProperties properties = ViewModelPropertiesHelper
177:                                         .getInhertitedPropertiesOrEmpty(viewModel);
178:                                 detailView = ViewProviderHelper.getView(EcoreUtil.create(reference.getEReferenceType()),
179:                                         properties);
180:                         }
181:                         view = detailView;
182:                 }
183:                 final VView copy = EcoreUtil.copy(view);
184:                 copy.setReadonly(
185:                         !getVElement().isEffectivelyEnabled() || getVElement().isEffectivelyReadonly() || copy.isReadonly());
186:                 return copy;
187:         }
188:
189:         @Override
190:         protected void viewerSelectionChanged(SelectionChangedEvent event) {
191:                 if (event.getSelection().isEmpty()) {
192:                         if (detailEditButton != null) {
193:                                 detailEditButton.setEnabled(false);
194:                         }
195:                 } else {
196:                         if (detailEditButton != null && IStructuredSelection.class.cast(event.getSelection()).size() == 1) {
197:                                 detailEditButton.setEnabled(true);
198:                         }
199:                 }
200:                 super.viewerSelectionChanged(event);
201:         }
202:
203:         @Override
204:         protected ActionConfiguration configureActions(TableRendererViewerActionContext actionContext) {
205:                 final ActionConfigurationBuilder actionConfigBuilder = ActionConfigurationBuilder
206:                         .usingConfiguration(super.configureActions(actionContext));
207:
208:                 final DetailEditAction detailEditAction = new DetailEditAction(actionContext);
209:                 final Setting setting = actionContext.getSetting();
210:                 final EClass eClass = ((EReference) setting.getEStructuralFeature()).getEReferenceType();
211:
212:                 actionConfigBuilder
213:                         .addAction(detailEditAction)
214:                         .addControlFor(detailEditAction, new TableActionIconButton(
215:                                 formatTooltipText(eClass, MessageKeys.TableControl_DetailEdit), getImage("icons/detailEdit.png"))); //$NON-NLS-1$
216:
217:                 return actionConfigBuilder.build();
218:         }
219:
220:         @Override
221:         protected void dispose() {
222:                 detailEditButton = null;
223:                 super.dispose();
224:         }
225:
226:         private Dialog createDialog(Shell shell) {
227:                 Dialog dialog;
228:                 if (getTableViewer().getSelection().isEmpty()) {
229:                         dialog = new MessageDialog(shell, "No Table Selection", null, //$NON-NLS-1$
230:                                 "You must select one element in order to edit it.", MessageDialog.WARNING, new String[] { //$NON-NLS-1$
231:                                         JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY) },
232:                                 0);
233:
234:                 } else if (getView() == null) {
235:                         dialog = new MessageDialog(
236:                                 shell,
237:                                 "No View Model", null, //$NON-NLS-1$
238:                                 "Detail editing is not possible since there is no UI description for the selection.", //$NON-NLS-1$
239:                                 MessageDialog.ERROR, new String[] { JFaceResources.getString(IDialogLabelKeys.OK_LABEL_KEY) },
240:                                 0);
241:                 } else {
242:                         dialog = new DetailDialog(shell, (EObject) IStructuredSelection.class.cast(
243:                                 getTableViewer().getSelection()).getFirstElement(), getVElement(), getView());
244:                 }
245:                 return dialog;
246:         }
247:
248:         private class DetailEditAction extends TableRendererAction {
249:
250:                 /**
251:                  * Default constructor.
252:                  *
253:                  * @param actionContext the {@link TableRendererViewerActionContext}.
254:                  */
255:                 DetailEditAction(TableRendererViewerActionContext actionContext) {
256:                         super(actionContext);
257:                 }
258:
259:                 /**
260:                  * The ID of this action.
261:                  */
262:                 public static final String ACTION_ID = PREFIX + "tablecontrol.dialog_edit"; //$NON-NLS-1$
263:
264:                 @Override
265:                 public String getId() {
266:                         return ACTION_ID;
267:                 }
268:
269:                 @Override
270:                 public void execute() {
271:                         final Dialog dialog = createDialog(getTableViewer().getControl().getShell());
272:
273:                         new ECPDialogExecutor(dialog) {
274:                                 @Override
275:                                 public void handleResult(int codeResult) {
276:                                         // no op
277:                                 }
278:                         }.execute();
279:                 }
280:
281:                 @Override
282:                 public boolean canExecute() {
283:                         return !getTableViewer().getSelection().isEmpty();
284:                 }
285:
286:         }
287:
288:         /**
289:          * {@link SelectionAdapter} used for the detail edit button.
290:          *
291:          * @author jfaltermeier
292:          *
293:          */
294:         @Deprecated
295:         private class DetailEditButtonSelectionAdapter extends SelectionAdapter {
296:
297:                 private final Shell shell;
298:
299:                 DetailEditButtonSelectionAdapter(Shell shell) {
300:                         this.shell = shell;
301:                 }
302:
303:                 @Override
304:                 public void widgetSelected(SelectionEvent e) {
305:                         super.widgetSelected(e);
306:
307:                         final Dialog dialog = createDialog(shell);
308:
309:                         new ECPDialogExecutor(dialog) {
310:                                 @Override
311:                                 public void handleResult(int codeResult) {
312:                                         // no op
313:                                 }
314:                         }.execute();
315:                 }
316:
317:         }
318:
319: }