Skip to content

Package: DataTemplateCreateNewModelElementStrategyProvider

DataTemplateCreateNewModelElementStrategyProvider

nameinstructionbranchcomplexitylinemethod
DataTemplateCreateNewModelElementStrategyProvider()
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%
createCreateNewModelElementStrategy()
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%
handles(EObject, EReference)
M: 6 C: 8
57%
M: 4 C: 2
33%
M: 3 C: 1
25%
M: 1 C: 1
50%
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: * Eugen Neufeld - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.datatemplate.tooling.editor;
15:
16: import org.eclipse.emf.ecore.EObject;
17: import org.eclipse.emf.ecore.EReference;
18: import org.eclipse.emf.ecore.util.EcoreUtil;
19: import org.eclipse.emf.ecp.ui.view.swt.reference.CreateNewModelElementStrategy;
20: import org.eclipse.emf.ecp.ui.view.swt.reference.CreateNewModelElementStrategy.Provider;
21: import org.eclipse.emf.ecp.ui.view.swt.reference.ReferenceServiceCustomizationVendor;
22: import org.eclipse.emfforms.bazaar.Create;
23: import org.eclipse.emfforms.common.Optional;
24: import org.eclipse.emfforms.datatemplate.Template;
25: import org.eclipse.emfforms.datatemplate.TemplateCollection;
26: import org.eclipse.jface.dialogs.MessageDialog;
27: import org.eclipse.swt.widgets.Display;
28: import org.osgi.service.component.annotations.Component;
29:
30: /**
31: * Provides a strategy to the DefaultReferenceService
32: * that does not allow to create objects in non containment references inside data templates.
33: *
34: * @author Eugen Neufeld
35: * @since 1.23
36: */
37: @Component(property = "service.ranking:Integer=20")
38: public class DataTemplateCreateNewModelElementStrategyProvider
39:         extends ReferenceServiceCustomizationVendor<CreateNewModelElementStrategy> implements Provider {
40:
41:         @Override
42:         protected boolean handles(EObject owner, EReference reference) {
43:•                return !(owner instanceof Template) && !reference.isContainment()
44:•                        && EcoreUtil.getRootContainer(owner) instanceof TemplateCollection;
45:         }
46:
47:         /**
48:          * Creates the {@link CreateNewModelElementStrategy}.
49:          *
50:          * @return The created {@link CreateNewModelElementStrategy}
51:          */
52:         @Create
53:         public CreateNewModelElementStrategy createCreateNewModelElementStrategy() {
54:                 return new Strategy();
55:         }
56:
57:         /**
58:          * The actual {@link CreateNewModelElementStrategy strategy} that informes the user, that a new object cannot be
59:          * created in a non containment references in a data template.
60:          *
61:          * @author Eugen Neufeld
62:          */
63:         class Strategy implements CreateNewModelElementStrategy {
64:
65:                 @Override
66:                 public Optional<EObject> createNewModelElement(EObject owner, EReference reference) {
67:                         MessageDialog.openInformation(Display.getDefault().getActiveShell(),
68:                                 Messages.DataTemplateCreateNewModelElement_0,
69:                                 Messages.DataTemplateCreateNewModelElement_1);
70:                         return Optional.empty();
71:                 }
72:
73:         }
74: }