Skip to content

Package: EStructuralFeatureValueConverterServiceImpl$1

EStructuralFeatureValueConverterServiceImpl$1

nameinstructionbranchcomplexitylinemethod
getRank(EStructuralFeatureValueConverter)
M: 11 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
{...}
M: 18 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

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: * mathias - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.common.converter;
15:
16: import java.util.LinkedHashSet;
17: import java.util.Set;
18:
19: import org.eclipse.emf.ecore.EObject;
20: import org.eclipse.emf.ecore.EStructuralFeature;
21: import org.eclipse.emfforms.common.RankingHelper;
22: import org.eclipse.emfforms.spi.common.converter.EStructuralFeatureValueConverter;
23: import org.eclipse.emfforms.spi.common.converter.EStructuralFeatureValueConverter.Direction;
24: import org.eclipse.emfforms.spi.common.converter.EStructuralFeatureValueConverterService;
25: import org.osgi.service.component.annotations.Component;
26: import org.osgi.service.component.annotations.Reference;
27: import org.osgi.service.component.annotations.ReferenceCardinality;
28:
29: /**
30: * @author Mathias Schaefer <mschaefer@eclipsesource.com>
31: *
32: */
33: @Component(service = EStructuralFeatureValueConverterService.class)
34: public class EStructuralFeatureValueConverterServiceImpl implements EStructuralFeatureValueConverterService {
35:
36:         private final Set<EStructuralFeatureValueConverter> converters = //
37:                 new LinkedHashSet<EStructuralFeatureValueConverter>();
38:
39:         private static final RankingHelper<EStructuralFeatureValueConverter> RANKING_HELPER = //
40:                 new RankingHelper<EStructuralFeatureValueConverter>(
41:                         EStructuralFeatureValueConverter.class,
42:                         EStructuralFeatureValueConverter.NOT_APPLICABLE,
43:                         EStructuralFeatureValueConverter.NOT_APPLICABLE);
44:
45:         @Override
46:         @Reference(cardinality = ReferenceCardinality.MULTIPLE)
47:         public void addValueConverter(EStructuralFeatureValueConverter converter) {
48:                 converters.add(converter);
49:         }
50:
51:         @Override
52:         public void removeValueConverter(EStructuralFeatureValueConverter converter) {
53:                 converters.remove(converter);
54:         }
55:
56:         private EStructuralFeatureValueConverter getHighestRankingConverter(
57:                 final EObject eObject, final EStructuralFeature feature, final Object value, final Direction direction) {
58:
59:                 return RANKING_HELPER.getHighestRankingElement(converters,
60:                         new RankingHelper.RankTester<EStructuralFeatureValueConverter>() {
61:
62:                                 @Override
63:                                 public double getRank(final EStructuralFeatureValueConverter converter) {
64:                                         return converter.isApplicable(eObject, feature, value, direction);
65:                                 }
66:
67:                         });
68:
69:         }
70:
71:         @Override
72:         public Object convertToModelValue(EObject eObject, EStructuralFeature feature, String literal) {
73:                 final EStructuralFeatureValueConverter converter = getHighestRankingConverter(eObject, feature, literal,
74:                         Direction.LITERAL_TO_MODEL);
75:                 if (converter == null) {
76:                         return null;
77:                 }
78:                 return converter.convertToModelValue(eObject, feature, literal);
79:         }
80:
81:         @Override
82:         public Object convertToLiteral(EObject eObject, EStructuralFeature feature, Object instance) {
83:                 final EStructuralFeatureValueConverter converter = getHighestRankingConverter(eObject, feature, instance,
84:                         Direction.MODEL_TO_LITERAL);
85:                 if (converter == null) {
86:                         return null;
87:                 }
88:                 return converter.convertToLiteral(eObject, feature, instance);
89:         }
90:
91: }