/**
* <copyright>
*
* Copyright (c) 2009, 2010 Springsite BV (The Netherlands) and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Martin Taal - Initial API and implementation
*
* </copyright>
*
* $Id: XMLReadTest.java,v 1.8 2011/09/04 20:04:15 mtaal Exp $
*/
package org.eclipse.emf.texo.server.test;
import java.io.StringReader;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.texo.json.JSONEObjectStore;
import org.eclipse.emf.texo.model.ModelObject;
import org.eclipse.emf.texo.model.ModelPackage;
import org.eclipse.emf.texo.model.ModelResolver;
import org.eclipse.emf.texo.server.model.request.RequestModelPackage;
import org.eclipse.emf.texo.server.model.response.ResponseType;
import org.eclipse.emf.texo.server.service.RetrieveModelOperation;
import org.eclipse.emf.texo.server.service.ServiceContext;
import org.eclipse.emf.texo.server.service.xml.XMLServiceContext;
import org.eclipse.emf.texo.test.emfmodel.library.impl.LibraryPackageImpl;
import org.eclipse.emf.texo.test.model.samples.librarymodelclasses.model.LibraryModelPackage;
import org.eclipse.emf.texo.test.model.samples.rental.RentalModelPackage;
import org.eclipse.emf.texo.utils.ModelUtils;
import org.eclipse.emf.texo.xml.ModelXMLLoader;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* Simple xml persist and read test.
*
* @author <a href="mailto:mtaal@elver.org">Martin Taal</a>
* @version $Revision: 1.8 $
*/
@RunWith(Parameterized.class)
public class XMLReadTest extends ModelPackageBaseTest {
@Parameters
public static Collection<Object[]> configs() {
// this is to prevent clashes in epackage loading
// of the library epackage
LibraryPackageImpl.init();
JSONEObjectStore.initEPackages();
return Arrays.asList(new Object[][] { { LibraryModelPackage.INSTANCE, new XMLServiceContext() },
{ RentalModelPackage.INSTANCE, new XMLServiceContext() } });
}
private ServiceContext serviceContext;
public XMLReadTest(ModelPackage modelPackage, ServiceContext serviceContext) {
super(modelPackage);
this.serviceContext = serviceContext;
}
@Test
public void persistAndRead() {
final List<Object> testSet = generateTestSet(5, 5, 5, 2000);
{
beginTransaction();
for (Object o : testSet) {
getObjectStore().insert(o);
}
commitTransaction();
}
{
for (EClass eClass : getEClasses()) {
serviceContext.setRequestURI("http://www.test.com/XMLService/" + ModelUtils.getQualifiedNameFromEClass(eClass)); //$NON-NLS-1$
serviceContext.setServiceRequestURI(ModelUtils.getQualifiedNameFromEClass(eClass));
serviceContext.setObjectStore(getNewObjectStore());
final RetrieveModelOperation retrieveModelOperation = new RetrieveModelOperation();
retrieveModelOperation.setServiceContext(serviceContext);
retrieveModelOperation.execute();
final String result = serviceContext.getResponseContent();
retrieveModelOperation.close();
final List<Object> objects = loadXMLData(result);
Assert.assertTrue(objects.size() == 1);
final ResponseType response = (ResponseType) objects.get(0);
// the objects should also be present in the original set
for (Object object : response.getData()) {
final ModelObject<?> modelObject = ModelResolver.getInstance().getModelObject(object);
Assert.assertTrue(modelObject.eClass() == eClass);
final List<Object> referees = getObjectStore().getReferingObjects(object, 3, true);
Assert.assertTrue(referees.size() < 4);
}
}
}
}
private List<Object> loadXMLData(String xml) {
final ModelXMLLoader xmlLoader = new ModelXMLLoader();
xmlLoader.setLoadAsXMI(false);
xmlLoader.setReader(new StringReader(xml));
xmlLoader.getEMFModelConverter().setUriResolver(getObjectStore());
return xmlLoader.read();
}
}