Skip to content

Package: EMFFormsSpreadsheetImportImpl_ITest$1

EMFFormsSpreadsheetImportImpl_ITest$1

nameinstructionbranchcomplexitylinemethod
getViewModel(EObject, VViewModelProperties)
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%
{...}
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
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: * Eugen Neufeld - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emfforms.internal.spreadsheet.core;
15:
16: import static org.junit.Assert.assertEquals;
17: import static org.junit.Assert.assertFalse;
18: import static org.junit.Assert.assertTrue;
19:
20: import java.io.IOException;
21: import java.util.Arrays;
22: import java.util.Collection;
23: import java.util.Collections;
24: import java.util.Date;
25: import java.util.Iterator;
26:
27: import javax.xml.datatype.DatatypeConfigurationException;
28: import javax.xml.datatype.DatatypeConstants;
29:
30: import org.apache.poi.ss.usermodel.Workbook;
31: import org.eclipse.emf.common.util.EList;
32: import org.eclipse.emf.ecore.EClass;
33: import org.eclipse.emf.ecore.EObject;
34: import org.eclipse.emf.ecore.EReference;
35: import org.eclipse.emf.ecore.EStructuralFeature;
36: import org.eclipse.emf.ecore.util.EcoreUtil;
37: import org.eclipse.emf.ecore.xml.type.internal.XMLCalendar;
38: import org.eclipse.emf.ecp.makeithappen.model.task.Nationality;
39: import org.eclipse.emf.ecp.makeithappen.model.task.TaskFactory;
40: import org.eclipse.emf.ecp.makeithappen.model.task.TaskPackage;
41: import org.eclipse.emf.ecp.makeithappen.model.task.User;
42: import org.eclipse.emf.ecp.test.common.DefaultRealm;
43: import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
44: import org.eclipse.emf.ecp.view.spi.model.VControl;
45: import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
46: import org.eclipse.emf.ecp.view.spi.model.VView;
47: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
48: import org.eclipse.emf.ecp.view.spi.model.VViewModelProperties;
49: import org.eclipse.emf.emfstore.bowling.BowlingFactory;
50: import org.eclipse.emf.emfstore.bowling.BowlingPackage;
51: import org.eclipse.emf.emfstore.bowling.Fan;
52: import org.eclipse.emf.emfstore.bowling.Merchandise;
53: import org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl;
54: import org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl.ViewProvider;
55: import org.eclipse.emfforms.spi.spreadsheet.core.error.model.SpreadsheetImportResult;
56: import org.eclipse.emfforms.spi.spreadsheet.core.transfer.EMFFormsSpreadsheetExporter;
57: import org.eclipse.emfforms.spi.spreadsheet.core.transfer.EMFFormsSpreadsheetImporter;
58: import org.junit.After;
59: import org.junit.Before;
60: import org.junit.Test;
61:
62: public class EMFFormsSpreadsheetImportImpl_ITest {
63:
64:         private DefaultRealm realm;
65:
66:         @Before
67:         public void setup() {
68:                 realm = new DefaultRealm();
69:         }
70:
71:         @After
72:         public void tearDown() {
73:                 realm.dispose();
74:         }
75:
76:         @Test
77:         public void testImportSpreadsheet() throws IOException, DatatypeConfigurationException {
78:                 final EMFFormsSpreadsheetExporter viewRenderer = new EMFFormsSpreadsheetExporterImpl(new ViewProvider() {
79:                         @Override
80:                         public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
81:                                 return getView();
82:                         }
83:                 });
84:                 final User user = getDomainModel();
85:                 final User user2 = getDomainModel();
86:
87:                 final Workbook workbook = viewRenderer.render(Arrays.asList(user, user2), null, null);
88:
89:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
90:                 final SpreadsheetImportResult importResult = spreadsheetImport.importSpreadsheet(workbook,
91:                         TaskPackage.eINSTANCE.getUser());
92:                 final Collection<EObject> users = importResult.getImportedEObjects();
93:                 final Iterator<EObject> iterator = users.iterator();
94:                 assertTrue(EcoreUtil.equals(user, iterator.next()));
95:                 assertTrue(EcoreUtil.equals(user2, iterator.next()));
96:         }
97:
98:         private User getDomainModel() throws DatatypeConfigurationException {
99:                 final User user = TaskFactory.eINSTANCE.createUser();
100:                 user.setEmail("myEMail@test.de"); //$NON-NLS-1$
101:                 user.setFirstName("Bob"); //$NON-NLS-1$
102:                 user.setHeigth(2);
103:                 user.setLastName("Smith"); //$NON-NLS-1$
104:                 user.setNationality(Nationality.US);
105:                 user.setTimeOfRegistration(new Date());
106:                 user.setWeight(1.45);
107:                 final XMLCalendar cal = new XMLCalendar(new Date(), XMLCalendar.DATE);
108:                 cal.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
109:                 cal.setHour(DatatypeConstants.FIELD_UNDEFINED);
110:                 cal.setMinute(DatatypeConstants.FIELD_UNDEFINED);
111:                 cal.setSecond(DatatypeConstants.FIELD_UNDEFINED);
112:                 cal.setMillisecond(DatatypeConstants.FIELD_UNDEFINED);
113:                 user.setDateOfBirth(cal);
114:                 return user;
115:         }
116:
117:         private VView getView() {
118:                 final VView view = VViewFactory.eINSTANCE.createView();
119:                 view.setRootEClass(TaskPackage.eINSTANCE.getUser());
120:                 final EList<EStructuralFeature> structuralFeatures = TaskPackage.eINSTANCE.getUser()
121:                         .getEAllStructuralFeatures();
122:                 for (final EStructuralFeature feature : structuralFeatures) {
123:                         if (EReference.class.isInstance(feature)) {
124:                                 continue;
125:                         }
126:                         final VControl control = VViewFactory.eINSTANCE.createControl();
127:                         final VFeaturePathDomainModelReference modelReference = VViewFactory.eINSTANCE
128:                                 .createFeaturePathDomainModelReference();
129:                         modelReference.setDomainModelEFeature(feature);
130:                         control.setDomainModelReference(modelReference);
131:                         view.getChildren().add(control);
132:                 }
133:                 return view;
134:         }
135:
136:         @Test
137:         public void testImportSpreadsheetUnsetFeatures() throws IOException, DatatypeConfigurationException {
138:                 final Fan domainModel = BowlingFactory.eINSTANCE.createFan();
139:                 domainModel.setNumberOfTournamentsVisited(1);
140:                 assertFalse(domainModel.isSetName());
141:                 assertFalse(domainModel.isSetEMails());
142:                 assertTrue(domainModel.isSetNumberOfTournamentsVisited());
143:                 assertFalse(domainModel.isSetFavouriteMerchandise());
144:                 assertFalse(domainModel.isSetFanMerchandise());
145:
146:                 final VView view = view(BowlingPackage.eINSTANCE.getFan(),
147:                         control(BowlingPackage.eINSTANCE.getFan_Name()),
148:                         control(BowlingPackage.eINSTANCE.getFan_EMails()),
149:                         control(BowlingPackage.eINSTANCE.getFan_NumberOfTournamentsVisited()),
150:                         control(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise()),
151:                         control(BowlingPackage.eINSTANCE.getFan_FanMerchandise()));
152:
153:                 final EMFFormsSpreadsheetExporter viewRenderer = new EMFFormsSpreadsheetExporterImpl(new ViewProvider() {
154:                         @Override
155:                         public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
156:                                 return view;
157:                         }
158:                 });
159:
160:                 final Workbook workbook = viewRenderer.render(Collections.singleton(domainModel), null, null);
161:
162:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
163:                 final Collection<EObject> fans = spreadsheetImport.importSpreadsheet(workbook,
164:                         BowlingPackage.eINSTANCE.getFan()).getImportedEObjects();
165:
166:                 assertEquals(1, fans.size());
167:                 final Fan importedFan = (Fan) fans.iterator().next();
168:                 assertFalse(importedFan.isSetName());
169:                 assertFalse(importedFan.isSetEMails());
170:                 assertTrue(importedFan.isSetNumberOfTournamentsVisited());
171:                 assertFalse(importedFan.isSetFavouriteMerchandise());
172:                 assertFalse(importedFan.isSetFanMerchandise());
173:                 assertTrue(EcoreUtil.equals(domainModel, importedFan));
174:         }
175:
176:         @Test
177:         public void testImportSpreadsheetUnsettableFeaturesWithDefaultValue()
178:                 throws IOException, DatatypeConfigurationException {
179:
180:                 final Fan domainModel = BowlingFactory.eINSTANCE.createFan();
181:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_Name(), null);
182:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_EMails(), Collections.emptyList());
183:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise(), null);
184:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_FanMerchandise(), Collections.emptyList());
185:                 assertTrue(domainModel.isSetName());
186:                 assertTrue(domainModel.isSetEMails());
187:                 assertTrue(domainModel.isSetFavouriteMerchandise());
188:                 assertTrue(domainModel.isSetFanMerchandise());
189:
190:                 final VView view = view(BowlingPackage.eINSTANCE.getFan(),
191:                         control(BowlingPackage.eINSTANCE.getFan_Name()),
192:                         control(BowlingPackage.eINSTANCE.getFan_EMails()),
193:                         control(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise()),
194:                         control(BowlingPackage.eINSTANCE.getFan_FanMerchandise()));
195:
196:                 final EMFFormsSpreadsheetExporter viewRenderer = new EMFFormsSpreadsheetExporterImpl(new ViewProvider() {
197:                         @Override
198:                         public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
199:                                 return view;
200:                         }
201:                 });
202:
203:                 final Workbook workbook = viewRenderer.render(Collections.singleton(domainModel), null, null);
204:
205:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
206:                 final Collection<EObject> fans = spreadsheetImport.importSpreadsheet(workbook,
207:                         BowlingPackage.eINSTANCE.getFan()).getImportedEObjects();
208:
209:                 assertEquals(1, fans.size());
210:                 final Fan importedFan = (Fan) fans.iterator().next();
211:                 assertFalse(importedFan.isSetName());
212:                 assertTrue(importedFan.isSetEMails());
213:                 assertFalse(importedFan.isSetFavouriteMerchandise());
214:                 // TODO the following assertions are failing because of a bug in EMF
215:                 // EMF is using an identity command instead of an empty set command, which would make the feature set
216:                 // assertTrue(importedFan.isSetFanMerchandise());
217:                 // assertTrue(EcoreUtil.equals(domainModel, importedFan));
218:         }
219:
220:         @Test
221:         public void testImportSpreadsheetUnsettableFeaturesWithNonDefaultValue()
222:                 throws IOException, DatatypeConfigurationException {
223:
224:                 final Fan domainModel = BowlingFactory.eINSTANCE.createFan();
225:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_Name(), "Hans"); //$NON-NLS-1$
226:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_EMails(), Arrays.asList("hans@eclipse.org", "hans@hans.com")); //$NON-NLS-1$ //$NON-NLS-2$
227:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise(), merchandise("Favourite")); //$NON-NLS-1$
228:                 domainModel.eSet(BowlingPackage.eINSTANCE.getFan_FanMerchandise(),
229:                         Arrays.asList(merchandise("merc1"), merchandise("merc2"))); //$NON-NLS-1$ //$NON-NLS-2$
230:                 assertTrue(domainModel.isSetName());
231:                 assertTrue(domainModel.isSetEMails());
232:                 assertTrue(domainModel.isSetFavouriteMerchandise());
233:                 assertTrue(domainModel.isSetFanMerchandise());
234:
235:                 final VView view = view(BowlingPackage.eINSTANCE.getFan(),
236:                         control(BowlingPackage.eINSTANCE.getFan_Name()),
237:                         control(BowlingPackage.eINSTANCE.getFan_EMails()),
238:                         control(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise()),
239:                         control(BowlingPackage.eINSTANCE.getFan_FanMerchandise()));
240:
241:                 final EMFFormsSpreadsheetExporter viewRenderer = new EMFFormsSpreadsheetExporterImpl(new ViewProvider() {
242:                         @Override
243:                         public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
244:                                 return view;
245:                         }
246:                 });
247:
248:                 final Workbook workbook = viewRenderer.render(Collections.singleton(domainModel), null, null);
249:
250:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
251:                 final Collection<EObject> fans = spreadsheetImport.importSpreadsheet(workbook,
252:                         BowlingPackage.eINSTANCE.getFan()).getImportedEObjects();
253:
254:                 assertEquals(1, fans.size());
255:                 final Fan importedFan = (Fan) fans.iterator().next();
256:                 assertTrue(importedFan.isSetName());
257:                 assertTrue(importedFan.isSetEMails());
258:                 assertTrue(importedFan.isSetFavouriteMerchandise());
259:                 assertTrue(importedFan.isSetFanMerchandise());
260:                 assertTrue(EcoreUtil.equals(domainModel, importedFan));
261:         }
262:
263:         private static VView view(EClass rootEClass, VContainedElement... elements) {
264:                 final VView view = VViewFactory.eINSTANCE.createView();
265:                 view.setRootEClass(rootEClass);
266:                 view.getChildren().addAll(Arrays.asList(elements));
267:                 return view;
268:         }
269:
270:         private static VControl control(EStructuralFeature feature) {
271:                 final VControl control = VViewFactory.eINSTANCE.createControl();
272:                 control.setDomainModelReference(feature);
273:                 return control;
274:         }
275:
276:         private static Merchandise merchandise(String name) {
277:                 final Merchandise merchandise = BowlingFactory.eINSTANCE.createMerchandise();
278:                 merchandise.setName(name);
279:                 return merchandise;
280:         }
281:
282: }