Skip to content

Package: EMFFormsLabelProviderDefaultImpl

EMFFormsLabelProviderDefaultImpl

nameinstructionbranchcomplexitylinemethod
EMFFormsLabelProviderDefaultImpl()
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%
getConstantObservableValue(String)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getDescription(VDomainModelReference)
M: 13 C: 41
76%
M: 2 C: 4
67%
M: 2 C: 2
50%
M: 2 C: 10
83%
M: 0 C: 1
100%
getDescription(VDomainModelReference, EClass)
M: 13 C: 45
78%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 2 C: 11
85%
M: 0 C: 1
100%
getDescription(VDomainModelReference, EObject)
M: 13 C: 33
72%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 10
83%
M: 0 C: 1
100%
getDescriptionObservable(EObject, EStructuralFeature)
M: 0 C: 24
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
getDisplayName(EStructuralFeature)
M: 0 C: 26
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 6
100%
M: 0 C: 1
100%
getDisplayName(VDomainModelReference)
M: 13 C: 19
59%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 5
71%
M: 0 C: 1
100%
getDisplayName(VDomainModelReference, EClass)
M: 13 C: 23
64%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 6
75%
M: 0 C: 1
100%
getDisplayName(VDomainModelReference, EObject)
M: 13 C: 33
72%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 10
83%
M: 0 C: 1
100%
getDisplayNameObservableValue(EObject, EStructuralFeature)
M: 10 C: 14
58%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 2 C: 4
67%
M: 0 C: 1
100%
getFallbackLabel(EStructuralFeature)
M: 0 C: 56
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
reportMissingPropertyDescriptor(EObject, EStructuralFeature)
M: 0 C: 22
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
setEMFFormsDatabinding(EMFFormsDatabindingEMF)
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%
setEMFSpecificService(EMFSpecificService)
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-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: * Lucas Koehler - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.core.services.label;
15:
16: import org.eclipse.core.databinding.observable.IObserving;
17: import org.eclipse.core.databinding.observable.Observables;
18: import org.eclipse.core.databinding.observable.value.IObservableValue;
19: import org.eclipse.core.databinding.property.value.IValueProperty;
20: import org.eclipse.emf.ecore.EClass;
21: import org.eclipse.emf.ecore.EObject;
22: import org.eclipse.emf.ecore.EStructuralFeature;
23: import org.eclipse.emf.ecore.util.EcoreUtil;
24: import org.eclipse.emf.ecp.common.spi.asserts.Assert;
25: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
26: import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
27: import org.eclipse.emfforms.spi.common.report.AbstractReport;
28: import org.eclipse.emfforms.spi.common.report.ReportService;
29: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedException;
30: import org.eclipse.emfforms.spi.core.services.databinding.DatabindingFailedReport;
31: import org.eclipse.emfforms.spi.core.services.databinding.EMFFormsDatabinding;
32: import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
33: import org.eclipse.emfforms.spi.core.services.emfspecificservice.EMFSpecificService;
34: import org.eclipse.emfforms.spi.core.services.label.EMFFormsLabelProvider;
35:
36: /**
37: * Implementation of {@link EMFFormsLabelProvider}. It provides a label service that delivers the display name and
38: * description for a domain model reference and optionally an EObject.
39: *
40: * @author Lucas Koehler
41: *
42: */
43: public class EMFFormsLabelProviderDefaultImpl implements EMFFormsLabelProvider {
44:         private EMFFormsDatabindingEMF emfFormsDatabinding;
45:         private EMFSpecificService emfSpecificService;
46:         private ReportService reportService;
47:
48:         /**
49:          * Sets the {@link EMFFormsDatabinding} service.
50:          *
51:          * @param emfFormsDatabinding The databinding service.
52:          */
53:         protected void setEMFFormsDatabinding(EMFFormsDatabindingEMF emfFormsDatabinding) {
54:                 this.emfFormsDatabinding = emfFormsDatabinding;
55:         }
56:
57:         /**
58:          * Sets the {@link EMFSpecificService}.
59:          *
60:          * @param emfSpecificService The {@link EMFSpecificService}
61:          */
62:         protected void setEMFSpecificService(EMFSpecificService emfSpecificService) {
63:                 this.emfSpecificService = emfSpecificService;
64:         }
65:
66:         /**
67:          * Sets the {@link ReportService}.
68:          *
69:          * @param reportService The {@link ReportService}
70:          */
71:         protected void setReportService(ReportService reportService) {
72:                 this.reportService = reportService;
73:         }
74:
75:         /**
76:          * Returns the display name of the {@link EStructuralFeature}.
77:          *
78:          * @param structuralFeature The {@link EStructuralFeature}
79:          * @return The localized feature name
80:          */
81:         public IObservableValue getDisplayName(EStructuralFeature structuralFeature) {
82:                 final EClass eContainingClass = structuralFeature.getEContainingClass();
83:•                if (eContainingClass.isAbstract() || eContainingClass.isInterface()
84:•                        || eContainingClass.getInstanceClass() == null) {
85:                         return getConstantObservableValue(getFallbackLabel(structuralFeature));
86:                 }
87:                 final EObject tempInstance = EcoreUtil.create(eContainingClass);
88:                 return getDisplayNameObservableValue(tempInstance, structuralFeature);
89:         }
90:
91:         @Deprecated
92:         @Override
93:         public IObservableValue getDisplayName(VDomainModelReference domainModelReference) {
94:                 Assert.create(domainModelReference).notNull();
95:
96:                 IValueProperty valueProperty;
97:                 try {
98:                         valueProperty = emfFormsDatabinding.getValueProperty(domainModelReference, (EObject) null);
99:                 } catch (final DatabindingFailedException ex) {
100:                         reportService.report(new DatabindingFailedReport(ex));
101:                         return getConstantObservableValue(ex.getMessage());
102:                 }
103:                 final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();
104:
105:                 return getDisplayName(structuralFeature);
106:         }
107:
108:         /**
109:          * Creates a fall back label from a {@link EStructuralFeature}.
110:          *
111:          * @param structuralFeature The {@link EStructuralFeature}
112:          * @return The fall back label
113:          */
114:         private String getFallbackLabel(final EStructuralFeature structuralFeature) {
115:                 final String[] split = structuralFeature.getName().split("(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])"); //$NON-NLS-1$
116:                 final char[] charArray = split[0].toCharArray();
117:                 charArray[0] = Character.toUpperCase(charArray[0]);
118:                 split[0] = new String(charArray);
119:                 final StringBuilder sb = new StringBuilder();
120:•                for (final String str : split) {
121:                         sb.append(str);
122:                         sb.append(" "); //$NON-NLS-1$
123:                 }
124:                 return sb.toString().trim();
125:         }
126:
127:         @Override
128:         public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EClass rootEClass) {
129:                 Assert.create(domainModelReference).notNull();
130:                 Assert.create(rootEClass).notNull();
131:
132:                 IValueProperty valueProperty;
133:                 try {
134:                         valueProperty = emfFormsDatabinding.getValueProperty(domainModelReference, rootEClass);
135:                 } catch (final DatabindingFailedException ex) {
136:                         reportService.report(new DatabindingFailedReport(ex));
137:                         return getConstantObservableValue(ex.getMessage());
138:                 }
139:                 final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();
140:
141:                 return getDisplayName(structuralFeature);
142:         }
143:
144:         @Override
145:         public IObservableValue getDisplayName(VDomainModelReference domainModelReference, EObject rootObject) {
146:                 Assert.create(domainModelReference).notNull();
147:                 Assert.create(rootObject).notNull();
148:
149:                 IObservableValue observableValue;
150:                 try {
151:                         observableValue = emfFormsDatabinding.getObservableValue(domainModelReference,
152:                                 rootObject);
153:                 } catch (final DatabindingFailedException ex) {
154:                         reportService.report(new DatabindingFailedReport(ex));
155:                         return getConstantObservableValue(ex.getMessage());
156:                 }
157:                 final IObserving observing = (IObserving) observableValue;
158:                 final EStructuralFeature structuralFeature = (EStructuralFeature) observableValue.getValueType();
159:                 final EObject value = (EObject) observing.getObserved();
160:                 observableValue.dispose();
161:                 return getDisplayNameObservableValue(value, structuralFeature);
162:         }
163:
164:         private IObservableValue getDisplayNameObservableValue(EObject containingEObject,
165:                 EStructuralFeature structuralFeature) {
166:                 final IItemPropertyDescriptor itemPropertyDescriptor = emfSpecificService.getIItemPropertyDescriptor(
167:                         containingEObject, structuralFeature);
168:•                if (itemPropertyDescriptor == null) {
169:                         reportMissingPropertyDescriptor(containingEObject, structuralFeature);
170:                         return getConstantObservableValue(getFallbackLabel(structuralFeature));
171:                 }
172:
173:                 return getConstantObservableValue(itemPropertyDescriptor.getDisplayName(containingEObject));
174:         }
175:
176:         @Deprecated
177:         @Override
178:         public IObservableValue getDescription(VDomainModelReference domainModelReference) {
179:                 Assert.create(domainModelReference).notNull();
180:
181:                 IValueProperty valueProperty;
182:                 try {
183:                         valueProperty = emfFormsDatabinding.getValueProperty(domainModelReference, (EObject) null);
184:                 } catch (final DatabindingFailedException ex) {
185:                         reportService.report(new DatabindingFailedReport(ex));
186:                         return getConstantObservableValue(ex.getMessage());
187:                 }
188:                 final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();
189:                 final EClass eContainingClass = structuralFeature.getEContainingClass();
190:•                if (eContainingClass.isAbstract() || eContainingClass.isInterface()
191:•                        || eContainingClass.getInstanceClass() == null) {
192:                         return getConstantObservableValue(getFallbackLabel(structuralFeature));
193:                 }
194:                 final EObject tempInstance = EcoreUtil.create(eContainingClass);
195:                 return getDescriptionObservable(tempInstance, structuralFeature);
196:         }
197:
198:         @Override
199:         public IObservableValue getDescription(VDomainModelReference domainModelReference, EClass rootEClass) {
200:                 Assert.create(domainModelReference).notNull();
201:                 Assert.create(rootEClass).notNull();
202:
203:                 IValueProperty valueProperty;
204:                 try {
205:                         valueProperty = emfFormsDatabinding.getValueProperty(domainModelReference, rootEClass);
206:                 } catch (final DatabindingFailedException ex) {
207:                         reportService.report(new DatabindingFailedReport(ex));
208:                         return getConstantObservableValue(ex.getMessage());
209:                 }
210:                 final EStructuralFeature structuralFeature = (EStructuralFeature) valueProperty.getValueType();
211:                 final EClass eContainingClass = structuralFeature.getEContainingClass();
212:•                if (eContainingClass.isAbstract() || eContainingClass.isInterface()
213:•                        || eContainingClass.getInstanceClass() == null) {
214:                         return getConstantObservableValue(getFallbackLabel(structuralFeature));
215:                 }
216:                 final EObject tempInstance = EcoreUtil.create(eContainingClass);
217:                 return getDescriptionObservable(tempInstance, structuralFeature);
218:         }
219:
220:         @Override
221:         public IObservableValue getDescription(VDomainModelReference domainModelReference, EObject rootObject) {
222:                 Assert.create(domainModelReference).notNull();
223:                 Assert.create(rootObject).notNull();
224:
225:                 IObservableValue observableValue;
226:                 try {
227:                         observableValue = emfFormsDatabinding.getObservableValue(domainModelReference,
228:                                 rootObject);
229:                 } catch (final DatabindingFailedException ex) {
230:                         reportService.report(new DatabindingFailedReport(ex));
231:                         return getConstantObservableValue(ex.getMessage());
232:                 }
233:                 final IObserving observing = (IObserving) observableValue;
234:                 final EStructuralFeature structuralFeature = (EStructuralFeature) observableValue.getValueType();
235:                 final EObject value = (EObject) observing.getObserved();
236:                 observableValue.dispose();
237:                 return getDescriptionObservable(value, structuralFeature);
238:         }
239:
240:         private IObservableValue getDescriptionObservable(EObject containingEObject, EStructuralFeature structuralFeature) {
241:                 final IItemPropertyDescriptor itemPropertyDescriptor = emfSpecificService.getIItemPropertyDescriptor(
242:                         containingEObject, structuralFeature);
243:•                if (itemPropertyDescriptor == null) {
244:                         reportMissingPropertyDescriptor(containingEObject, structuralFeature);
245:                         return getConstantObservableValue(getFallbackLabel(structuralFeature));
246:                 }
247:
248:                 return getConstantObservableValue(itemPropertyDescriptor.getDescription(containingEObject));
249:         }
250:
251:         private IObservableValue getConstantObservableValue(String value) {
252:                 return Observables.constantObservableValue(value, String.class);
253:         }
254:
255:         private void reportMissingPropertyDescriptor(final EObject value, final EStructuralFeature structuralFeature) {
256:                 reportService.report(
257:                         new AbstractReport(String.format("No IItemPropertyDescriptor for feature %2$s in EClass %1$s found.", //$NON-NLS-1$
258:                                 value.eClass().getName(), structuralFeature.getName())));
259:         }
260:
261: }