/** * <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: ReferersTest.java,v 1.4 2011/08/26 07:58:32 mtaal Exp $ */ package org.eclipse.emf.texo.server.test.store; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.texo.component.ComponentProvider; import org.eclipse.emf.texo.model.ModelResolver; import org.eclipse.emf.texo.server.store.EPersistenceService; import org.eclipse.emf.texo.server.store.ObjectStoreFactory; import org.eclipse.emf.texo.store.EMFResourceObjectStore; import org.eclipse.emf.texo.store.ObjectStore; import org.eclipse.emf.texo.store.TexoEMFResourceURIConverter; import org.eclipse.emf.texo.test.model.issues.bz391624.Bz391624ModelPackage; import org.eclipse.emf.texo.test.model.samples.emap.EmapsampleModelPackage; import org.eclipse.emf.texo.test.model.samples.extlibrary.ExtlibraryModelPackage; import org.eclipse.emf.texo.test.model.samples.library.Book; import org.eclipse.emf.texo.test.model.samples.library.Library; import org.eclipse.emf.texo.test.model.samples.library.Writer; import org.eclipse.emf.texo.test.model.samples.librarymodelclasses.model.LibraryModelFactory; import org.eclipse.emf.texo.test.model.samples.librarymodelclasses.model.LibraryModelPackage; import org.eclipse.emf.texo.test.model.schemaconstructs.emap.EmapModelPackage; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; /** * Tests the {@link EPersistenceService} object. * * @author <a href="mailto:mtaal@elver.org">Martin Taal</a> * @version $Revision: 1.4 $ */ @RunWith(Parameterized.class) public class EMFResourceObjectStoreTest { private final int COUNT = 10; @Parameterized.Parameters public static List<String> getParameters() { return Arrays.asList(new String[] { "xml", "xmi" }); } @BeforeClass public static void beforeClass() { ModelResolver.getInstance().deregister(Bz391624ModelPackage.INSTANCE); ModelResolver.getInstance().deregister(EmapModelPackage.INSTANCE); ModelResolver.getInstance().deregister(EmapsampleModelPackage.INSTANCE); ModelResolver.getInstance().deregister(ExtlibraryModelPackage.INSTANCE); } @AfterClass public static void afterClass() { ObjectStoreFactory.setInstance(new ObjectStoreFactory()); ModelResolver.getInstance().reRegisterModelPackage(Bz391624ModelPackage.INSTANCE); ModelResolver.getInstance().reRegisterModelPackage(EmapModelPackage.INSTANCE); ModelResolver.getInstance().reRegisterModelPackage(EmapsampleModelPackage.INSTANCE); ModelResolver.getInstance().reRegisterModelPackage(ExtlibraryModelPackage.INSTANCE); } @Before public void before() { { File xmiFile = new File(getTemporaryDirectoryPath(), "texo_data.xmi"); if (xmiFile.exists()) { xmiFile.delete(); } } { File xmlFile = new File(getTemporaryDirectoryPath(), "texo_data.xml"); if (xmlFile.exists()) { xmlFile.delete(); } } ObjectStoreFactory.setInstance(new ObjectStoreFactory() { @Override protected ObjectStore createObjectStoreLocal(HttpServletRequest request, String objectStoreUri) { ObjectStore os = super.createEMFResourceObjectStore(); if ("xml".equals(fileExtension)) { final EMFResourceObjectStore eos = (EMFResourceObjectStore) os; ((TexoEMFResourceURIConverter) eos.getURIConverter()) .setResourceType(TexoEMFResourceURIConverter.ResourceType.XML); } return os; } }); } @After public void after() { ObjectStoreFactory.setInstance(new ObjectStoreFactory()); } private String fileExtension; private String uriStr; public EMFResourceObjectStoreTest(String extension) { fileExtension = extension; uriStr = null; } @Test public void testPersistenceRead() { createPersistTestData(); readAdd(); readRemove(); readUpdate(); } private void readAdd() { ObjectStore os = getObjectStore(); os.begin(); Assert.assertEquals(1, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getLibraryEClass().getName(), new HashMap<String, Object>())); Assert.assertEquals(COUNT, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getBookEClass().getName(), new HashMap<String, Object>())); Library lib = (Library) os.query(LibraryModelPackage.INSTANCE.getLibraryEClass(), 0, 100).get(0); Book bk = LibraryModelPackage.INSTANCE.getModelFactory().createBook(); bk.setTitle("Title " + 11); bk.setPages(11); lib.getBooks().add(bk); os.insert(bk); os.commit(); } private void readRemove() { ObjectStore os = getObjectStore(); os.begin(); Assert.assertEquals(1, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getLibraryEClass().getName(), new HashMap<String, Object>())); Assert.assertEquals(COUNT + 1, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getBookEClass().getName(), new HashMap<String, Object>())); Library lib = (Library) os.query(LibraryModelPackage.INSTANCE.getLibraryEClass(), 0, 100).get(0); { os.remove(lib.getBooks().get(0)); Book bk = lib.getBooks().remove(0); if (bk.getAuthor() != null) { bk.getAuthor().getBooks().remove(bk); } } { os.remove(lib.getBooks().get(0)); Book bk = lib.getBooks().remove(0); if (bk.getAuthor() != null) { bk.getAuthor().getBooks().remove(bk); } } os.commit(); } private void readUpdate() { String newTitle = "UPDATE TRY"; { ObjectStore os = getObjectStore(); os.begin(); Assert.assertEquals(1, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getLibraryEClass().getName(), new HashMap<String, Object>())); Assert.assertEquals(COUNT - 1, os.count("FROM library|" + LibraryModelPackage.INSTANCE.getBookEClass().getName(), new HashMap<String, Object>())); Library lib = (Library) os.query(LibraryModelPackage.INSTANCE.getLibraryEClass(), 0, 100).get(0); lib.getBooks().get(5).setTitle(newTitle); os.commit(); } { ObjectStore os = getObjectStore(); os.begin(); Library lib = (Library) os.query(LibraryModelPackage.INSTANCE.getLibraryEClass(), 0, 100).get(0); Assert.assertEquals(newTitle, lib.getBooks().get(5).getTitle()); os.commit(); } } protected void createPersistTestData() { ObjectStore os = getObjectStore(); os.begin(); LibraryModelFactory modelFactory = LibraryModelPackage.INSTANCE.getModelFactory(); Library library = modelFactory.createLibrary(); library.setName("T1"); os.insert(library); for (int i = 0; i < COUNT; i++) { Book bk = modelFactory.createBook(); bk.setTitle("Title " + i); bk.setPages(i); Writer w = modelFactory.createWriter(); w.setName("Name " + i); w.getBooks().add(bk); bk.setAuthor(w); library.getBooks().add(bk); library.getWriters().add(w); os.insert(bk); os.insert(w); } os.commit(); } protected ObjectStore getObjectStore() { try { final EMFResourceObjectStore objectStore = ComponentProvider.getInstance().newInstance( EMFResourceObjectStore.class); if (uriStr == null) { uriStr = "http://localhost:8080/texo/data"; } objectStore.setUri(URI.createURI(uriStr)); objectStore.setChildLevels(1); return objectStore; } catch (Exception e) { throw new RuntimeException(e); } } protected String getTemporaryDirectoryPath() { try { final File f = File.createTempFile("test" + System.currentTimeMillis(), null); //$NON-NLS-1$ String tempDirectory = f.getParentFile().getAbsolutePath(); f.delete(); return tempDirectory; } catch (IOException e) { throw new IllegalStateException(e); } } }