Skip to content

Package: Roundtrip_ITest$1

Roundtrip_ITest$1

nameinstructionbranchcomplexitylinemethod
getViewModel(EObject, VViewModelProperties)
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%
{...}
M: 0 C: 9
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.spreadsheet.integrationtest;
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.File;
21: import java.io.FileInputStream;
22: import java.io.FileNotFoundException;
23: import java.io.FileOutputStream;
24: import java.io.IOException;
25: import java.util.Arrays;
26: import java.util.Calendar;
27: import java.util.Collection;
28: import java.util.Collections;
29: import java.util.Iterator;
30: import java.util.LinkedHashMap;
31: import java.util.Map;
32:
33: import javax.xml.datatype.DatatypeConfigurationException;
34:
35: import org.apache.poi.hssf.usermodel.HSSFWorkbook;
36: import org.apache.poi.ss.usermodel.Workbook;
37: import org.eclipse.emf.ecore.EClass;
38: import org.eclipse.emf.ecore.EObject;
39: import org.eclipse.emf.ecore.EStructuralFeature;
40: import org.eclipse.emf.ecore.util.EcoreUtil;
41: import org.eclipse.emf.ecore.xml.type.internal.XMLCalendar;
42: import org.eclipse.emf.ecp.makeithappen.model.task.Nationality;
43: import org.eclipse.emf.ecp.makeithappen.model.task.TaskFactory;
44: import org.eclipse.emf.ecp.makeithappen.model.task.TaskPackage;
45: import org.eclipse.emf.ecp.makeithappen.model.task.User;
46: import org.eclipse.emf.ecp.test.common.DefaultRealm;
47: import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
48: import org.eclipse.emf.ecp.view.spi.model.VControl;
49: import org.eclipse.emf.ecp.view.spi.model.VView;
50: import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
51: import org.eclipse.emf.ecp.view.spi.model.VViewModelProperties;
52: import org.eclipse.emf.emfstore.bowling.BowlingFactory;
53: import org.eclipse.emf.emfstore.bowling.BowlingPackage;
54: import org.eclipse.emf.emfstore.bowling.Fan;
55: import org.eclipse.emf.emfstore.bowling.Merchandise;
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 Roundtrip_ITest {
63:         private DefaultRealm realm;
64:
65:         @Before
66:         public void setup() {
67:                 realm = new DefaultRealm();
68:         }
69:
70:         @After
71:         public void tearDown() {
72:                 realm.dispose();
73:         }
74:
75:         @Test
76:         public void test() throws DatatypeConfigurationException, IOException {
77:                 // write data
78:                 final EMFFormsSpreadsheetExporter viewRenderer = EMFFormsSpreadsheetExporter.INSTANCE;
79:                 final EObject user = getDomainModel();
80:                 final EObject user2 = getDomainModel();
81:                 final VViewModelProperties properties = VViewFactory.eINSTANCE.createViewModelLoadingProperties();
82:                 properties.addNonInheritableProperty("root", true); //$NON-NLS-1$
83:                 properties.addNonInheritableProperty("detail", true); //$NON-NLS-1$
84:                 final Map<String, String> keyValueMap = new LinkedHashMap<String, String>();
85:                 keyValueMap.put("MyColumn1", "MyValue1"); //$NON-NLS-1$ //$NON-NLS-2$
86:                 final Map<String, String> keyValueMap2 = new LinkedHashMap<String, String>();
87:                 keyValueMap2.put("MyColumn2", "MyValue2"); //$NON-NLS-1$ //$NON-NLS-2$
88:
89:                 final Workbook wb = viewRenderer.render(Arrays.asList(user, user2), user, properties);
90:
91:                 final File targetFile = new File("export.xls"); //$NON-NLS-1$
92:                 saveWorkbook(wb, targetFile.getAbsolutePath());
93:
94:                 // read data
95:                 final FileInputStream file = new FileInputStream(targetFile);
96:                 final Workbook workbook = new HSSFWorkbook(file);
97:
98:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
99:                 final Collection<EObject> users = spreadsheetImport.importSpreadsheet(workbook,
100:                         TaskPackage.eINSTANCE.getUser()).getImportedEObjects();
101:                 for (final EObject eObject : users) {
102:                         EcoreUtil.equals(eObject, user);
103:                 }
104:
105:         }
106:
107:         private void saveWorkbook(Workbook wb, String absolutePath) {
108:                 FileOutputStream fileOut = null;
109:                 try {
110:                         fileOut = new FileOutputStream(absolutePath);
111:                         wb.write(fileOut);
112:                 } catch (final FileNotFoundException e) {
113:                         e.printStackTrace();
114:                 } catch (final IOException e) {
115:                         e.printStackTrace();
116:                 } finally {
117:                         try {
118:                                 fileOut.close();
119:                         } catch (final IOException e) {
120:                                 e.printStackTrace();
121:                         }
122:                 }
123:         }
124:
125:         private EObject getDomainModel() {
126:                 final User user = TaskFactory.eINSTANCE.createUser();
127:                 user.setFirstName("John"); //$NON-NLS-1$
128:                 user.setLastName("Doe"); //$NON-NLS-1$
129:                 user.setEmail("john.doe@mail.com"); //$NON-NLS-1$
130:                 user.setWeight(1.1);
131:                 user.setHeigth(1);
132:                 user.setNationality(Nationality.ITALIAN);
133:                 user.setTimeOfRegistration(Calendar.getInstance().getTime());
134:                 user.setDateOfBirth(new XMLCalendar(Calendar.getInstance().getTime(), XMLCalendar.DATE));
135:                 return user;
136:         }
137:
138:         @Test
139:         public void testUnsetFeatures() throws IOException, DatatypeConfigurationException {
140:
141:                 final Fan domainModel = BowlingFactory.eINSTANCE.createFan();
142:                 domainModel.setNumberOfTournamentsVisited(1);
143:                 assertFalse(domainModel.isSetName());
144:                 assertFalse(domainModel.isSetEMails());
145:                 assertTrue(domainModel.isSetNumberOfTournamentsVisited());
146:                 assertFalse(domainModel.isSetFavouriteMerchandise());
147:                 assertFalse(domainModel.isSetFanMerchandise());
148:
149:                 final VView view = view(BowlingPackage.eINSTANCE.getFan(),
150:                         control(BowlingPackage.eINSTANCE.getFan_Name()),
151:                         control(BowlingPackage.eINSTANCE.getFan_EMails()),
152:                         control(BowlingPackage.eINSTANCE.getFan_NumberOfTournamentsVisited()),
153:                         control(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise()),
154:                         control(BowlingPackage.eINSTANCE.getFan_FanMerchandise()));
155:
156:                 @SuppressWarnings("restriction")
157:                 final EMFFormsSpreadsheetExporter viewRenderer = new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl(
158:                         new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl.ViewProvider() {
159:                                 @Override
160:                                 public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
161:                                         return view;
162:                                 }
163:                         });
164:
165:                 final Workbook wb = viewRenderer.render(Collections.singleton(domainModel), null, null);
166:
167:                 final File targetFile = new File("export.xls"); //$NON-NLS-1$
168:                 saveWorkbook(wb, targetFile.getAbsolutePath());
169:
170:                 // read data
171:                 final FileInputStream file = new FileInputStream(targetFile);
172:                 final Workbook workbook = new HSSFWorkbook(file);
173:
174:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
175:                 final Collection<EObject> fans = spreadsheetImport.importSpreadsheet(workbook,
176:                         BowlingPackage.eINSTANCE.getFan()).getImportedEObjects();
177:
178:                 assertEquals(1, fans.size());
179:                 final Fan importedFan = (Fan) fans.iterator().next();
180:                 assertFalse(importedFan.isSetName());
181:                 assertFalse(importedFan.isSetEMails());
182:                 assertTrue(importedFan.isSetNumberOfTournamentsVisited());
183:                 assertEquals(1, importedFan.getNumberOfTournamentsVisited());
184:                 assertFalse(importedFan.isSetFavouriteMerchandise());
185:                 assertFalse(importedFan.isSetFanMerchandise());
186:                 assertTrue(EcoreUtil.equals(domainModel, importedFan));
187:         }
188:
189:         @Test
190:         public void testMixingUnsetFeatures() throws IOException, DatatypeConfigurationException {
191:
192:                 final Fan domainModel1 = BowlingFactory.eINSTANCE.createFan();
193:                 domainModel1.setName("Hans"); //$NON-NLS-1$
194:                 domainModel1.getFanMerchandise().addAll(Arrays.asList(merchandise("1"), merchandise("2"))); //$NON-NLS-1$//$NON-NLS-2$
195:
196:                 final Fan domainModel2 = BowlingFactory.eINSTANCE.createFan();
197:                 domainModel2.getEMails().addAll(Arrays.asList("hans@eclipse.org", "hans@hans.com")); //$NON-NLS-1$//$NON-NLS-2$
198:                 domainModel2.setFavouriteMerchandise(merchandise("fav")); //$NON-NLS-1$
199:
200:                 final VView view = view(BowlingPackage.eINSTANCE.getFan(),
201:                         control(BowlingPackage.eINSTANCE.getFan_Name()),
202:                         control(BowlingPackage.eINSTANCE.getFan_EMails()),
203:                         control(BowlingPackage.eINSTANCE.getFan_FavouriteMerchandise()),
204:                         control(BowlingPackage.eINSTANCE.getFan_FanMerchandise()));
205:
206:                 @SuppressWarnings("restriction")
207:                 final EMFFormsSpreadsheetExporter viewRenderer = new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl(
208:                         new org.eclipse.emfforms.internal.spreadsheet.core.transfer.EMFFormsSpreadsheetExporterImpl.ViewProvider() {
209:                                 @Override
210:                                 public VView getViewModel(EObject viewEobject, VViewModelProperties properties) {
211:                                         return view;
212:                                 }
213:                         });
214:
215:                 final Workbook wb = viewRenderer.render(Arrays.asList(domainModel1, domainModel2), null, null);
216:
217:                 final File targetFile = new File("export.xls"); //$NON-NLS-1$
218:                 saveWorkbook(wb, targetFile.getAbsolutePath());
219:
220:                 // read data
221:                 final FileInputStream file = new FileInputStream(targetFile);
222:                 final Workbook workbook = new HSSFWorkbook(file);
223:
224:                 final EMFFormsSpreadsheetImporter spreadsheetImport = EMFFormsSpreadsheetImporter.INSTANCE;
225:                 final Collection<EObject> fans = spreadsheetImport.importSpreadsheet(workbook,
226:                         BowlingPackage.eINSTANCE.getFan()).getImportedEObjects();
227:
228:                 assertEquals(2, fans.size());
229:                 final Iterator<EObject> iterator = fans.iterator();
230:                 assertTrue(EcoreUtil.equals(domainModel1, iterator.next()));
231:                 assertTrue(EcoreUtil.equals(domainModel2, iterator.next()));
232:         }
233:
234:         private static VView view(EClass rootEClass, VContainedElement... elements) {
235:                 final VView view = VViewFactory.eINSTANCE.createView();
236:                 view.setRootEClass(rootEClass);
237:                 view.getChildren().addAll(Arrays.asList(elements));
238:                 return view;
239:         }
240:
241:         private static VControl control(EStructuralFeature feature) {
242:                 final VControl control = VViewFactory.eINSTANCE.createControl();
243:                 control.setDomainModelReference(feature);
244:                 return control;
245:         }
246:
247:         private static Merchandise merchandise(String name) {
248:                 final Merchandise merchandise = BowlingFactory.eINSTANCE.createMerchandise();
249:                 merchandise.setName(name);
250:                 return merchandise;
251:         }
252:
253: }