Skip to content

Package: CustomDMRMappingProvider

CustomDMRMappingProvider

nameinstructionbranchcomplexitylinemethod
CustomDMRMappingProvider()
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%
activate(BundleContext)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
deactivate(BundleContext)
M: 0 C: 12
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
getEMFFormsMappingProviderManager()
M: 5 C: 23
82%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 1 C: 6
86%
M: 0 C: 1
100%
getMappingFor(Collection, EObject)
M: 0 C: 29
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 7
100%
M: 0 C: 1
100%
getMappingFor(VDomainModelReference, EObject)
M: 40 C: 71
64%
M: 4 C: 6
60%
M: 4 C: 2
33%
M: 9 C: 20
69%
M: 0 C: 1
100%
isApplicable(VDomainModelReference, EObject)
M: 0 C: 8
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
loadObject(String, String)
M: 34 C: 26
43%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 8 C: 7
47%
M: 0 C: 1
100%
setEMFFormsMappingProviderManager(EMFFormsMappingProviderManager)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
setReportService(ReportService)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2016 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.emf.ecp.view.spi.custom.model.impl;
15:
16: import java.util.Collection;
17: import java.util.Collections;
18: import java.util.LinkedHashSet;
19: import java.util.Set;
20:
21: import org.eclipse.core.runtime.Platform;
22: import org.eclipse.emf.ecore.EObject;
23: import org.eclipse.emf.ecp.common.spi.UniqueSetting;
24: import org.eclipse.emf.ecp.view.spi.custom.model.ECPHardcodedReferences;
25: import org.eclipse.emf.ecp.view.spi.custom.model.VCustomDomainModelReference;
26: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
27: import org.eclipse.emfforms.spi.common.report.ReportService;
28: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
29: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
30: import org.eclipse.emfforms.spi.core.services.mappingprovider.EMFFormsMappingProvider;
31: import org.eclipse.emfforms.spi.core.services.mappingprovider.EMFFormsMappingProviderManager;
32: import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
33: import org.osgi.framework.Bundle;
34: import org.osgi.framework.BundleContext;
35: import org.osgi.framework.ServiceReference;
36: import org.osgi.service.component.annotations.Activate;
37: import org.osgi.service.component.annotations.Component;
38: import org.osgi.service.component.annotations.Deactivate;
39: import org.osgi.service.component.annotations.Reference;
40:
41: /**
42: * An EMFFormsMappingProvider for {@link VCustomDomainModelReference}.
43: *
44: * @author Eugen Neufeld
45: * @since 1.9
46: *
47: */
48: @Component
49: public class CustomDMRMappingProvider implements EMFFormsMappingProvider {
50:
51:         private BundleContext bundleContext;
52:         private ServiceReference<EMFFormsMappingProviderManager> eMFFormsMappingProviderManagerServiceReference;
53:         private EMFFormsMappingProviderManager mappingProviderManager;
54:         private ReportService reportService;
55:
56:         /**
57:          * {@inheritDoc}
58:          *
59:          * @see org.eclipse.emfforms.spi.core.services.mappingprovider.EMFFormsMappingProvider#getMappingFor(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference,
60:          * org.eclipse.emf.ecore.EObject)
61:          */
62:         @Override
63:         public Set<UniqueSetting> getMappingFor(VDomainModelReference domainModelReference, EObject domainObject) {
64:•                if (domainModelReference == null) {
65:                         throw new IllegalArgumentException("The given VDomainModelReference must not be null."); //$NON-NLS-1$
66:                 }
67:•                if (!VCustomDomainModelReference.class.isInstance(domainModelReference)) {
68:                         throw new IllegalArgumentException(
69:                                 "DomainModelReference must be an instance of VTableDomainModelReference."); //$NON-NLS-1$
70:                 }
71:
72:                 final VCustomDomainModelReference customDomainModelReference = VCustomDomainModelReference.class
73:                         .cast(domainModelReference);
74:•                if (!customDomainModelReference.getDomainModelReferences().isEmpty()) {
75:                         return getMappingFor(customDomainModelReference.getDomainModelReferences(), domainObject);
76:                 }
77:                 final ECPHardcodedReferences hardcodedReference;
78:                 try {
79:                         hardcodedReference = loadObject(customDomainModelReference.getBundleName(),
80:                                 customDomainModelReference.getClassName());
81:                 } catch (final DatabindingFailedException ex) {
82:                         reportService.report(new DatabindingFailedReport(ex));
83:                         return Collections.<UniqueSetting> emptySet();
84:                 }
85:•                if (hardcodedReference == null) {
86:                         reportService.report(new DatabindingFailedReport(new DatabindingFailedException(
87:                                 String
88:                                         .format(
89:                                                 "The provided ECPHardcodedReferences from Bundle %1$s Class %2$s cannot be resolved.", //$NON-NLS-1$
90:                                                 customDomainModelReference.getBundleName(), customDomainModelReference.getClassName()))));
91:                         return Collections.<UniqueSetting> emptySet();
92:                 }
93:                 final Set<VDomainModelReference> neededDomainModelReferences = hardcodedReference
94:                         .getNeededDomainModelReferences();
95:•                if (neededDomainModelReferences.isEmpty()) {
96:                         reportService.report(new DatabindingFailedReport(new DatabindingFailedException(
97:                                 String
98:                                         .format(
99:                                                 "The provided ECPHardcodedReferences from Bundle %1$s Class %2$s doesn't define any DomainModelReferences.", //$NON-NLS-1$
100:                                                 customDomainModelReference.getBundleName(), customDomainModelReference.getClassName()))));
101:                         return Collections.<UniqueSetting> emptySet();
102:                 }
103:                 return getMappingFor(neededDomainModelReferences, domainObject);
104:         }
105:
106:         private Set<UniqueSetting> getMappingFor(Collection<VDomainModelReference> domainModelReferences,
107:                 EObject domainObject) {
108:                 final Set<UniqueSetting> result = new LinkedHashSet<UniqueSetting>();
109:•                for (final VDomainModelReference domainModelReference : domainModelReferences) {
110:                         final Set<UniqueSetting> settingsFor = getEMFFormsMappingProviderManager()
111:                                 .getAllSettingsFor(domainModelReference, domainObject);
112:•                        if (settingsFor != null) {
113:                                 result.addAll(settingsFor);
114:                         }
115:                 }
116:                 return result;
117:         }
118:
119:         private static ECPHardcodedReferences loadObject(String bundleName, String clazz)
120:                 throws DatabindingFailedException {
121:                 final Bundle bundle = Platform.getBundle(bundleName);
122:•                if (bundle == null) {
123:                         new ClassNotFoundException(String.format(LocalizationServiceHelper.getString(
124:                                 VCustomDomainModelReferenceImpl.class, "BundleNotFound_ExceptionMessage"), clazz, bundleName)); //$NON-NLS-1$
125:                         return null;
126:                 }
127:                 try {
128:                         final Class<?> loadClass = bundle.loadClass(clazz);
129:•                        if (!ECPHardcodedReferences.class.isAssignableFrom(loadClass)) {
130:                                 return null;
131:                         }
132:                         return ECPHardcodedReferences.class.cast(loadClass.newInstance());
133:                 } catch (final ClassNotFoundException ex) {
134:                         throw new DatabindingFailedException(ex.getMessage());
135:                 } catch (final InstantiationException ex) {
136:                         throw new DatabindingFailedException(ex.getMessage());
137:                 } catch (final IllegalAccessException ex) {
138:                         throw new DatabindingFailedException(ex.getMessage());
139:                 }
140:
141:         }
142:
143:         /**
144:          * {@inheritDoc}
145:          *
146:          * @see org.eclipse.emfforms.spi.core.services.mappingprovider.EMFFormsMappingProvider#isApplicable(org.eclipse.emf.ecp.view.spi.model.VDomainModelReference,
147:          * org.eclipse.emf.ecore.EObject)
148:          */
149:         @Override
150:         public double isApplicable(VDomainModelReference domainModelReference, EObject domainObject) {
151:•                if (VCustomDomainModelReference.class.isInstance(domainModelReference)) {
152:                         return 10;
153:                 }
154:                 return NOT_APPLICABLE;
155:         }
156:
157:         /**
158:          * Called by the framework when the component gets activated.
159:          *
160:          * @param bundleContext The {@link BundleContext}
161:          */
162:         @Activate
163:         protected void activate(BundleContext bundleContext) {
164:                 this.bundleContext = bundleContext;
165:         }
166:
167:         /**
168:          * Called by the framework when the component gets deactivated.
169:          *
170:          * @param bundleContext The {@link BundleContext}
171:          */
172:         @Deactivate
173:         protected void deactivate(BundleContext bundleContext) {
174:•                if (eMFFormsMappingProviderManagerServiceReference != null) {
175:                         bundleContext.ungetService(eMFFormsMappingProviderManagerServiceReference);
176:                         mappingProviderManager = null;
177:                 }
178:         }
179:
180:         private EMFFormsMappingProviderManager getEMFFormsMappingProviderManager() {
181:•                if (mappingProviderManager == null) {
182:                         eMFFormsMappingProviderManagerServiceReference = bundleContext
183:                                 .getServiceReference(EMFFormsMappingProviderManager.class);
184:•                        if (eMFFormsMappingProviderManagerServiceReference == null) {
185:                                 throw new IllegalStateException("No EMFFormsDomainExpander available!"); //$NON-NLS-1$
186:                         }
187:                         setEMFFormsMappingProviderManager(bundleContext.getService(eMFFormsMappingProviderManagerServiceReference));
188:                 }
189:                 return mappingProviderManager;
190:         }
191:
192:         /**
193:          * Helper method for tests. This is quite ugly!
194:          *
195:          * @param mappingProviderManager The EMFFormsMappingProviderManager to use
196:          */
197:         void setEMFFormsMappingProviderManager(EMFFormsMappingProviderManager mappingProviderManager) {
198:                 this.mappingProviderManager = mappingProviderManager;
199:         }
200:
201:         /**
202:          * Sets the {@link ReportService}.
203:          *
204:          * @param reportService The {@link ReportService}
205:          */
206:         @Reference(unbind = "-")
207:         protected void setReportService(ReportService reportService) {
208:                 this.reportService = reportService;
209:         }
210: }