Skip to content

Package: EMFFormsSpreadsheetMultiReferenceConverter

EMFFormsSpreadsheetMultiReferenceConverter

nameinstructionbranchcomplexitylinemethod
EMFFormsSpreadsheetMultiReferenceConverter()
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%
getCellValue(Cell, EStructuralFeature)
M: 13 C: 43
77%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 2 C: 9
82%
M: 0 C: 1
100%
isApplicable(EObject, VDomainModelReference)
M: 0 C: 25
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
setCellValue(Cell, Object, EStructuralFeature, ViewModelContext)
M: 10 C: 42
81%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 2 C: 10
83%
M: 0 C: 1
100%
setDatabinding(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%
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: * Johannes Faltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.spreadsheet.core.converter;
15:
16: import java.io.IOException;
17: import java.text.MessageFormat;
18: import java.util.ArrayList;
19: import java.util.Collections;
20: import java.util.List;
21:
22: import org.apache.poi.ss.usermodel.Cell;
23: import org.apache.poi.ss.usermodel.CellStyle;
24: import org.eclipse.emf.ecore.EObject;
25: import org.eclipse.emf.ecore.EReference;
26: import org.eclipse.emf.ecore.EStructuralFeature;
27: import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
28: import org.eclipse.emf.ecp.view.spi.model.VDomainModelReference;
29: import org.eclipse.emfforms.spi.common.report.ReportService;
30: import org.eclipse.emfforms.spi.core.services.databinding.emf.EMFFormsDatabindingEMF;
31: import org.eclipse.emfforms.spi.spreadsheet.core.EMFFormsSpreadsheetReport;
32: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsCellStyleConstants;
33: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsConverterException;
34: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter;
35: import org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverterHelper;
36: import org.osgi.service.component.annotations.Component;
37: import org.osgi.service.component.annotations.Reference;
38: import org.osgi.service.component.annotations.ReferenceCardinality;
39:
40: /**
41: * {@link EMFFormsSpreadsheetValueConverter Converter} for multi {@link EReference references}.
42: *
43: * @author Johannes Faltermeier
44: *
45: */
46: @Component(name = "EMFFormsSpreadsheetMultiReferenceConverter")
47: public class EMFFormsSpreadsheetMultiReferenceConverter implements EMFFormsSpreadsheetValueConverter {
48:
49:         private static final String SEPARATOR = "\n\n\n"; //$NON-NLS-1$
50:
51:         private EMFFormsDatabindingEMF databinding;
52:         private ReportService reportService;
53:
54:         /**
55:          * Sets the databinding service.
56:          *
57:          * @param databinding the service
58:          */
59:         @Reference(cardinality = ReferenceCardinality.MANDATORY, unbind = "-")
60:         public void setDatabinding(EMFFormsDatabindingEMF databinding) {
61:                 this.databinding = databinding;
62:         }
63:
64:         /**
65:          * Sets the report service.
66:          *
67:          * @param reportService the service
68:          */
69:         @Reference(cardinality = ReferenceCardinality.MANDATORY, unbind = "-")
70:         public void setReportService(ReportService reportService) {
71:                 this.reportService = reportService;
72:         }
73:
74:         @Override
75:         public double isApplicable(EObject domainObject, VDomainModelReference dmr) {
76:                 final EStructuralFeature feature = EMFFormsSpreadsheetValueConverterHelper.getFeature(domainObject, dmr,
77:                         databinding,
78:                         reportService);
79:•                if (feature == null) {
80:                         return NOT_APPLICABLE;
81:                 }
82:•                if (!EReference.class.isInstance(feature)) {
83:                         return NOT_APPLICABLE;
84:                 }
85:•                if (!feature.isMany()) {
86:                         return NOT_APPLICABLE;
87:                 }
88:                 return 0d;
89:         }
90:
91:         @SuppressWarnings("unchecked")
92:         /**
93:          * {@inheritDoc}
94:          *
95:          * @see org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter#setCellValue(org.apache.poi.ss.usermodel.Cell,
96:          * java.lang.Object, org.eclipse.emf.ecore.EStructuralFeature,
97:          * org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
98:          */
99:         @Override
100:         public void setCellValue(Cell cell, Object values, EStructuralFeature eStructuralFeature,
101:                 ViewModelContext viewModelContext)
102:                 throws EMFFormsConverterException {
103:•                if (values == null) {
104:                         return;
105:                 }
106:                 try {
107:                         final StringBuilder result = new StringBuilder();
108:•                        for (final EObject value : (List<EObject>) values) {
109:•                                if (result.length() != 0) {
110:                                         result.append(SEPARATOR);
111:                                 }
112:                                 result.append(XMIStringConverterHelper.getSerializedEObject(value));
113:                         }
114:                         cell.setCellValue(result.toString());
115:                         cell.setCellStyle((CellStyle) viewModelContext.getContextValue(EMFFormsCellStyleConstants.TEXT));
116:                 } catch (final IOException ex) {
117:                         reportService.report(new EMFFormsSpreadsheetReport(ex, EMFFormsSpreadsheetReport.ERROR));
118:                 }
119:                 return;
120:         }
121:
122:         /**
123:          * {@inheritDoc}
124:          *
125:          * @see org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter#getCellValue(org.apache.poi.ss.usermodel.Cell,
126:          * org.eclipse.emf.ecore.EStructuralFeature)
127:          */
128:         @Override
129:         public Object getCellValue(Cell cell, EStructuralFeature eStructuralFeature) throws EMFFormsConverterException {
130:                 final String string = cell.getStringCellValue();
131:•                if (string == null || string.length() == 0) {
132:                         return Collections.emptyList();
133:                 }
134:                 final List<EObject> result = new ArrayList<EObject>();
135:                 final String[] split = string.split(SEPARATOR);
136:•                for (final String element : split) {
137:                         try {
138:                                 result.add(XMIStringConverterHelper.deserializeObject(element.trim()));
139:                         } catch (final IOException ex) {
140:                                 throw new EMFFormsConverterException(
141:                                         MessageFormat.format("The cell value {0} could not be deserialized to a model value.", string)); //$NON-NLS-1$
142:                         }
143:                 }
144:
145:                 return result;
146:         }
147:
148: }