Skip to content

Package: MultiDmrOpenInNewContextStrategyProvider

MultiDmrOpenInNewContextStrategyProvider

nameinstructionbranchcomplexitylinemethod
MultiDmrOpenInNewContextStrategyProvider()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
createOpenInNewContextStrategy()
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%
handles(EObject, EReference)
M: 0 C: 16
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
isSegmentToolingEnabled()
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%
lambda$0(EObject, EReference, EObject)
M: 0 C: 53
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 14
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2019 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: * lucas - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.view.multisegment.tooling;
15:
16: import java.util.Optional;
17:
18: import org.eclipse.emf.common.command.Command;
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.ecp.ui.view.swt.reference.CreateNewModelElementStrategy;
23: import org.eclipse.emf.ecp.ui.view.swt.reference.OpenInNewContextStrategy;
24: import org.eclipse.emf.ecp.ui.view.swt.reference.OpenInNewContextStrategy.Provider;
25: import org.eclipse.emf.ecp.ui.view.swt.reference.ReferenceServiceCustomizationVendor;
26: import org.eclipse.emf.ecp.view.internal.editor.handler.CreateSegmentDmrWizard;
27: import org.eclipse.emf.ecp.view.spi.editor.controls.Helper;
28: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
29: import org.eclipse.emf.ecp.view.spi.model.VViewPackage;
30: import org.eclipse.emf.ecp.view.spi.table.model.VTablePackage;
31: import org.eclipse.emf.edit.command.SetCommand;
32: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
33: import org.eclipse.emf.edit.domain.EditingDomain;
34: import org.eclipse.emfforms.bazaar.Create;
35: import org.eclipse.emfforms.spi.ide.view.segments.ToolingModeUtil;
36: import org.eclipse.emfforms.view.spi.multisegment.model.VMultisegmentPackage;
37: import org.eclipse.jface.wizard.WizardDialog;
38: import org.eclipse.swt.widgets.Display;
39: import org.osgi.service.component.annotations.Component;
40:
41: /**
42: * Provides a strategy to create and configure a segment-based {@link VDomainModelReference} which has multi segment as
43: * its last segment. This provider is only active if the IDE tooling runs in segment mode.
44: *
45: * @author Lucas Koehler
46: *
47: */
48: @Component(name = "MultiDmrOpenInNewContextStrategyProvider", property = "service.ranking:Integer=30")
49: public class MultiDmrOpenInNewContextStrategyProvider
50:         extends ReferenceServiceCustomizationVendor<OpenInNewContextStrategy> implements Provider {
51:
52:         @Override
53:         protected boolean handles(EObject owner, EReference reference) {
54:•                if (!isSegmentToolingEnabled()) {
55:                         return false;
56:                 }
57:•                return reference == VViewPackage.Literals.CONTROL__DOMAIN_MODEL_REFERENCE
58:•                        && owner.eClass() == VTablePackage.Literals.TABLE_CONTROL;
59:
60:         }
61:
62:         /**
63:          * @return true if segment based tooling is enabled
64:          */
65:         boolean isSegmentToolingEnabled() {
66:                 return ToolingModeUtil.isSegmentToolingEnabled();
67:         }
68:
69:         /**
70:          * Creates the {@link CreateNewModelElementStrategy}.
71:          *
72:          * @return The created {@link CreateNewModelElementStrategy}
73:          */
74:         @Create
75:         public OpenInNewContextStrategy createOpenInNewContextStrategy() {
76:                 return (owner, reference, object) -> {
77:                         final EClass viewRoot = Helper.getRootEClass(owner);
78:                         final CreateSegmentDmrWizard dmrWizard = new CreateSegmentDmrWizard(
79:                                 viewRoot, "Edit Multi Domain Model Reference", null, //$NON-NLS-1$
80:                                 new MultiSelectionValidator(), new MultiSegmentGenerator(),
81:                                 VMultisegmentPackage.Literals.MULTI_DOMAIN_MODEL_REFERENCE_SEGMENT, true);
82:                         final WizardDialog wizardDialog = new WizardDialog(Display.getDefault().getActiveShell(), dmrWizard);
83:                         wizardDialog.setBlockOnOpen(true);
84:                         wizardDialog.open();
85:
86:                         // Replace the old dmr with the new one
87:                         final Optional<VDomainModelReference> newDmr = dmrWizard.getDomainModelReference();
88:•                        if (newDmr.isPresent()) {
89:                                 final EditingDomain domain = AdapterFactoryEditingDomain.getEditingDomainFor(owner);
90:                                 // The DMR is always set in a single reference
91:                                 final Command command = SetCommand.create(domain, owner, reference, newDmr.get());
92:                                 domain.getCommandStack().execute(command);
93:                         }
94:
95:                         return true;
96:                 };
97:         }
98: }