Skip to content

Package: EMFEditNewChildFactoryBuilder$NewChildFactory

EMFEditNewChildFactoryBuilder$NewChildFactory

nameinstructionbranchcomplexitylinemethod
EMFEditNewChildFactoryBuilder.NewChildFactory(AdapterFactory, Map)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
collectNewChildDescriptors(Collection, Object)
M: 0 C: 25
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
isAdapterForType(Object)
M: 10 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2018 Christian W. Damus 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: * Christian W. Damus - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.core.services.datatemplate;
15:
16: import static org.mockito.Matchers.any;
17: import static org.mockito.Matchers.same;
18: import static org.mockito.Mockito.mock;
19: import static org.mockito.Mockito.when;
20: import static org.mockito.Mockito.withSettings;
21:
22: import java.util.Collection;
23: import java.util.Collections;
24: import java.util.HashMap;
25: import java.util.Map;
26:
27: import org.eclipse.emf.common.command.BasicCommandStack;
28: import org.eclipse.emf.common.notify.AdapterFactory;
29: import org.eclipse.emf.common.util.URI;
30: import org.eclipse.emf.ecore.EObject;
31: import org.eclipse.emf.ecore.EReference;
32: import org.eclipse.emf.ecore.resource.Resource;
33: import org.eclipse.emf.ecore.util.EcoreUtil;
34: import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
35: import org.eclipse.emf.edit.domain.EditingDomain;
36: import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
37: import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
38: import org.eclipse.emf.edit.provider.ItemProviderAdapter;
39:
40: /**
41: * Utility for tests to create EMF.Edit-based factories of new children.
42: *
43: * @author Christian W. Damus
44: */
45: public final class EMFEditNewChildFactoryBuilder {
46:         private final Map<Class<? extends EObject>, Map<EReference, EObject>> templates = new HashMap<Class<? extends EObject>, Map<EReference, EObject>>();
47:
48:         /**
49:          * Initializes me.
50:          */
51:         public EMFEditNewChildFactoryBuilder() {
52:                 super();
53:         }
54:
55:         public AdapterFactory buildFactory() {
56:                 final AdapterFactory result = mock(AdapterFactory.class,
57:                         withSettings().extraInterfaces(ComposeableAdapterFactory.class));
58:
59:                 for (final Map.Entry<Class<? extends EObject>, Map<EReference, EObject>> next : templates.entrySet()) {
60:                         final NewChildFactory itemProvider = new NewChildFactory(result, next.getValue());
61:
62:                         when(result.adapt(any(next.getKey()), same(IEditingDomainItemProvider.class)))
63:                                 .thenReturn(itemProvider);
64:                         when(result.adapt((Object) any(next.getKey()), same(IEditingDomainItemProvider.class)))
65:                                 .thenReturn(itemProvider);
66:                         when(result.adaptNew(any(next.getKey()), same(IEditingDomainItemProvider.class)))
67:                                 .thenReturn(itemProvider);
68:                 }
69:
70:                 return result;
71:         }
72:
73:         public EditingDomain buildEditingDomain() {
74:                 return new AdapterFactoryEditingDomain(buildFactory(), new BasicCommandStack());
75:         }
76:
77:         public Resource buildResource() {
78:                 return buildEditingDomain().getResourceSet().createResource(URI.createURI("bogus://test/foo.xmi")); //$NON-NLS-1$
79:         }
80:
81:         public EMFEditNewChildFactoryBuilder addTemplate(Class<? extends EObject> owner, EReference reference,
82:                 EObject template) {
83:                 return addTemplates(owner, Collections.singletonMap(reference, template));
84:         }
85:
86:         public EMFEditNewChildFactoryBuilder addTemplates(Class<? extends EObject> owner,
87:                 Map<EReference, EObject> templates) {
88:                 Map<EReference, EObject> merge = this.templates.get(owner);
89:                 if (merge == null) {
90:                         merge = new HashMap<EReference, EObject>();
91:                         this.templates.put(owner, merge);
92:                 }
93:
94:                 merge.putAll(templates);
95:                 return this;
96:         }
97:
98:         //
99:         // Nested types
100:         //
101:
102:         private static class NewChildFactory extends ItemProviderAdapter implements IEditingDomainItemProvider {
103:                 private final Map<EReference, EObject> templates;
104:
105:                 NewChildFactory(AdapterFactory adapterFactory, Map<EReference, EObject> templates) {
106:                         super(adapterFactory);
107:
108:                         this.templates = templates;
109:                 }
110:
111:                 @Override
112:                 public boolean isAdapterForType(Object type) {
113:                         // I am a fake EMF.Edit item provider adapter, so I should respond like one
114:•                        return type instanceof AdapterFactory || type == IEditingDomainItemProvider.class;
115:                 }
116:
117:                 @Override
118:                 protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
119:•                        for (final Map.Entry<EReference, EObject> next : templates.entrySet()) {
120:                                 newChildDescriptors.add(createChildParameter(next.getKey(), EcoreUtil.copy(next.getValue())));
121:                         }
122:                 }
123:         }
124:
125: }