Skip to content

Package: EMFFormsSpreadsheetValueConverterRegistryImpl

EMFFormsSpreadsheetValueConverterRegistryImpl

nameinstructionbranchcomplexitylinemethod
EMFFormsSpreadsheetValueConverterRegistryImpl()
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
addConverter(EMFFormsSpreadsheetValueConverter)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
getConverter(EObject, VDomainModelReference)
M: 0 C: 80
100%
M: 0 C: 12
100%
M: 0 C: 7
100%
M: 0 C: 19
100%
M: 0 C: 1
100%
removeConverter(EMFFormsSpreadsheetValueConverter)
M: 0 C: 6
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-2015 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
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.spreadsheet.core.converter;
15:
16: import java.text.MessageFormat;
17: import java.util.LinkedHashSet;
18: import java.util.Set;
19: import java.util.concurrent.CopyOnWriteArraySet;
20:
21: import org.eclipse.emf.ecore.EObject;
22: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
23: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsConverterException;
24: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter;
25: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverterRegistry;
26: import org.osgi.service.component.annotations.Component;
27: import org.osgi.service.component.annotations.Reference;
28: import org.osgi.service.component.annotations.ReferenceCardinality;
29: import org.osgi.service.component.annotations.ReferencePolicy;
30:
31: /**
32: * Implementation of the {@link EMFFormsSpreadsheetValueConverterRegistry}.
33: *
34: * @author Johannes Faltermeier
35: *
36: */
37: @Component(name = "EMFFormsSpreadsheetValueConverterRegistryImpl")
38: public class EMFFormsSpreadsheetValueConverterRegistryImpl implements EMFFormsSpreadsheetValueConverterRegistry {
39:
40:         private final Set<EMFFormsSpreadsheetValueConverter> allConverter = new CopyOnWriteArraySet<EMFFormsSpreadsheetValueConverter>();
41:
42:         /**
43:          * Adds a {@link EMFFormsSpreadsheetValueConverter converter} to the registry.
44:          *
45:          * @param converter the converter
46:          */
47:         @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
48:         public void addConverter(EMFFormsSpreadsheetValueConverter converter) {
49:                 allConverter.add(converter);
50:         }
51:
52:         /**
53:          * Removes a {@link EMFFormsSpreadsheetValueConverter converter} from the registry.
54:          *
55:          * @param converter the converter
56:          */
57:         public void removeConverter(EMFFormsSpreadsheetValueConverter converter) {
58:                 allConverter.remove(converter);
59:         }
60:
61:         /**
62:          * {@inheritDoc}
63:          *
64:          * @see org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverterRegistry#getConverter(org.eclipse.emf.ecore.EObject,
65:          * org.eclipse.emf.ecp.view.spi.model.VDomainModelReference)
66:          */
67:         @Override
68:         public EMFFormsSpreadsheetValueConverter getConverter(EObject domainObject, VDomainModelReference dmr)
69:                 throws EMFFormsConverterException {
70:                 double highestPrio = -Double.MIN_VALUE;
71:
72:                 final Set<EMFFormsSpreadsheetValueConverter> applicableConverters = new LinkedHashSet<EMFFormsSpreadsheetValueConverter>();
73:•                for (final EMFFormsSpreadsheetValueConverter current : allConverter) {
74:                         final double currentPrio = current.isApplicable(domainObject, dmr);
75:•                        if (Double.isNaN(currentPrio)) {
76:                                 continue;
77:                         }
78:•                        if (highestPrio > currentPrio) {
79:                                 continue;
80:                         }
81:•                        if (highestPrio < currentPrio) {
82:                                 applicableConverters.clear();
83:                         }
84:                         highestPrio = currentPrio;
85:                         applicableConverters.add(current);
86:                 }
87:•                if (applicableConverters.isEmpty()) {
88:                         throw new EMFFormsConverterException(
89:                                 MessageFormat.format("No converter found for domain model reference: {0}.", dmr)); //$NON-NLS-1$
90:                 }
91:•                if (applicableConverters.size() > 1) {
92:                         throw new EMFFormsConverterException(
93:                                 MessageFormat
94:                                         .format("Multiple converters with same priority registered for domain model reference: {0}.", dmr)); //$NON-NLS-1$
95:                 }
96:                 return applicableConverters.iterator().next();
97:         }
98:
99: }