Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'eclipselink/org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests/src/org/eclipse/emf/teneo/eclipselink/examples/library/orm/tests/resource/EclipseLinkAndXMIResourceTest.java')
-rwxr-xr-xeclipselink/org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests/src/org/eclipse/emf/teneo/eclipselink/examples/library/orm/tests/resource/EclipseLinkAndXMIResourceTest.java250
1 files changed, 250 insertions, 0 deletions
diff --git a/eclipselink/org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests/src/org/eclipse/emf/teneo/eclipselink/examples/library/orm/tests/resource/EclipseLinkAndXMIResourceTest.java b/eclipselink/org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests/src/org/eclipse/emf/teneo/eclipselink/examples/library/orm/tests/resource/EclipseLinkAndXMIResourceTest.java
new file mode 100755
index 000000000..ef0ec2bcd
--- /dev/null
+++ b/eclipselink/org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests/src/org/eclipse/emf/teneo/eclipselink/examples/library/orm/tests/resource/EclipseLinkAndXMIResourceTest.java
@@ -0,0 +1,250 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle and Geensys.
+ * 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:
+ * Oracle and Geensys - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.teneo.eclipselink.examples.library.orm.tests.resource;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+import org.eclipse.emf.teneo.eclipselink.examples.library.Book;
+import org.eclipse.emf.teneo.eclipselink.examples.library.Library;
+import org.eclipse.emf.teneo.eclipselink.examples.library.LibraryPackage;
+import org.eclipse.emf.teneo.eclipselink.examples.library.Writer;
+import org.eclipse.emf.teneo.eclipselink.examples.library.forum.Forum;
+import org.eclipse.emf.teneo.eclipselink.examples.library.impl.StringToBookMapEntryImpl;
+import org.eclipse.emf.teneo.eclipselink.resource.EclipseLinkResourceImpl;
+import org.eclipse.emf.teneo.eclipselink.resource.EclipseLinkURIUtil;
+
+public class EclipseLinkAndXMIResourceTest extends AbstractEclipseLinkTest {
+
+ private IProject testProject;
+ private URI libraryURI, forumURI;
+ private Library library1;
+ private Forum forum1;
+ private Resource libraryResource1, libraryResource2, libraryResource3;
+ private Resource forumResource1, forumResource2, forumResource3;
+
+ @Override
+ protected void setUp() throws Exception {
+
+ super.setUp();
+
+ // create test project in runtime workspace
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ testProject = workspace.getRoot().getProject("Test");
+ IProjectDescription description = workspace.newProjectDescription("Test");
+ testProject.create(description, null);
+ testProject.open(null);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+
+ // delete test project including its contents from runtime workspace
+ try {
+ testProject.delete(true, true, null);
+ } catch (CoreException cex) {
+ cex.printStackTrace();
+ }
+
+ super.tearDown();
+ }
+
+ public void testEclipseLinkAndXMIResource() throws IOException {
+
+ // create library model instance
+ library1 = testLibraryFactory.createLibraryModel();
+
+ // create forum model instance
+ forum1 = testLibraryFactory.createForumModel();
+
+ saveLibraryModel1AndForumModel1();
+ loadLibraryModel2FromForumModel2ViaIDBasedCrossDocumentReference();
+ loadLibraryModel3FromForumModel3ViaIndexBasedCrossDocumentReference();
+ deleteLibraryModel1();
+ unloadAllLibraryAndForumModels();
+ }
+
+ private void saveLibraryModel1AndForumModel1() throws IOException {
+
+ // create EclipseLink URI for saving/loading library model in/from database
+ String query = EclipseLinkURIUtil.createContentsEqualQuery(LibraryPackage.eINSTANCE.getLibrary(),
+ LibraryPackage.eINSTANCE.getLibrary_Name(), library1.getName());
+ libraryURI = EclipseLinkURIUtil.createEclipseLinkURI(TEST_PERSISTENCE_UNIT_NAME, query);
+
+ // save library model instance in database
+ ResourceSet resourceSet1 = new ResourceSetImpl();
+ resourceSet1.getLoadOptions().putAll(getTestPersistenceUnitProperties(this.getClass().getClassLoader()));
+ libraryResource1 = resourceSet1.createResource(libraryURI);
+
+ assertTrue(libraryResource1 instanceof EclipseLinkResourceImpl);
+
+ libraryResource1.getContents().add(library1);
+ libraryResource1.save(Collections.EMPTY_MAP);
+
+ // create platform resource URI for saving/loading forum model in/from
+ // XMI file
+ String forumPathName = createForumModelPathName(testProject, forum1);
+ forumURI = URI.createPlatformResourceURI(forumPathName, false);
+
+ // save forum model instance in XMI resource
+ forumResource1 = resourceSet1.createResource(forumURI);
+
+ assertTrue(forumResource1 instanceof XMIResourceImpl);
+
+ forumResource1.getContents().add(forum1);
+ forumResource1.save(Collections.EMPTY_MAP);
+ }
+
+ private void loadLibraryModel2FromForumModel2ViaIDBasedCrossDocumentReference() {
+
+ // load second forum model instance from XMI resource
+ ResourceSet resourceSet2 = new ResourceSetImpl();
+ resourceSet2.getLoadOptions().putAll(getTestPersistenceUnitProperties(this.getClass().getClassLoader()));
+ forumResource2 = resourceSet2.getResource(forumURI, true);
+
+ assertTrue(forumResource2 instanceof XMIResourceImpl);
+
+ // analyse second forum model instance
+ List<EObject> forumContents2 = forumResource2.getContents();
+ assertNotNull(forumContents2);
+ assertEquals(1, forumContents2.size());
+ EObject forum2 = forumContents2.get(0);
+
+ EPackage forumPack = forum2.eClass().getEPackage();
+ EClass forumCls = (EClass) forumPack.getEClassifier("Forum");
+ EStructuralFeature nameFeat = forumCls.getEStructuralFeature("name");
+ EStructuralFeature ratedAuthorsFeat = forumCls.getEStructuralFeature("ratedAuthors");
+
+ assertNotNull(forum2.eGet(nameFeat));
+ assertEquals(forum1.eGet(nameFeat), forum2.eGet(nameFeat));
+ assertNotNull(forum2.eGet(ratedAuthorsFeat));
+ assertEquals(((EList<?>) forum1.eGet(ratedAuthorsFeat)).size(), ((EList<?>) forum2.eGet(ratedAuthorsFeat))
+ .size());
+
+ // navigate from second forum to referenced rated author and thereby
+ // lazily load second library model instance from database resource
+ Writer writer2 = (Writer) ((EList<?>) forum2.eGet(ratedAuthorsFeat)).get(0);
+
+ assertNotNull(writer2);
+
+ libraryResource2 = writer2.eResource();
+
+ assertTrue(libraryResource2 instanceof EclipseLinkResourceImpl);
+ assertEquals(libraryResource2.getURI(), libraryURI);
+
+ // analyse second library model instance
+ assertTrue(writer2.eContainer() instanceof Library);
+ Library library2 = (Library) writer2.eContainer();
+
+ assertNotNull(library2.getName());
+ assertEquals(library1.getName(), library2.getName());
+ assertNotNull(library2.getWriters());
+ assertEquals(library1.getWriters().size(), library2.getWriters().size());
+ assertNotNull(library2.getBooks());
+ assertEquals(library1.getBooks().size(), library2.getBooks().size());
+ }
+
+ private void loadLibraryModel3FromForumModel3ViaIndexBasedCrossDocumentReference() {
+
+ // load third forum model instance from XMI resource
+ ResourceSet resourceSet3 = new ResourceSetImpl();
+ resourceSet3.getLoadOptions().putAll(getTestPersistenceUnitProperties(this.getClass().getClassLoader()));
+ forumResource3 = resourceSet3.getResource(forumURI, true);
+
+ assertTrue(forumResource3 instanceof XMIResourceImpl);
+
+ // analyse third forum model instance
+ List<EObject> forumContents3 = forumResource3.getContents();
+ assertNotNull(forumContents3);
+ assertEquals(1, forumContents3.size());
+ EObject forum3 = forumContents3.get(0);
+
+ EPackage forumPack = forum3.eClass().getEPackage();
+ EClass forumCls = (EClass) forumPack.getEClassifier("Forum");
+ EStructuralFeature nameFeat = forumCls.getEStructuralFeature("name");
+ EStructuralFeature featuredBooksFeat = forumCls.getEStructuralFeature("featuredBooks");
+
+ assertNotNull(forum3.eGet(nameFeat));
+ assertEquals(forum1.eGet(nameFeat), forum3.eGet(nameFeat));
+ assertNotNull(forum3.eGet(featuredBooksFeat));
+ assertEquals(((EList<?>) forum1.eGet(featuredBooksFeat)).size(), ((EList<?>) forum3.eGet(featuredBooksFeat))
+ .size());
+
+ // navigate from third forum to referenced featured book and thereby
+ // lazily load third library model instance from database resource
+ Book book3 = (Book) ((EList<?>) forum3.eGet(featuredBooksFeat)).get(0);
+
+ assertNotNull(book3);
+
+ libraryResource3 = book3.eResource();
+
+ assertTrue(libraryResource3 instanceof EclipseLinkResourceImpl);
+ assertEquals(libraryResource3.getURI(), libraryURI);
+
+ // analyse third library model instance
+ assertTrue(book3.eContainer() instanceof StringToBookMapEntryImpl);
+ StringToBookMapEntryImpl bookEntry3 = (StringToBookMapEntryImpl) book3.eContainer();
+ assertTrue(bookEntry3.eContainer() instanceof Library);
+ Library library3 = (Library) bookEntry3.eContainer();
+
+ assertNotNull(library3.getName());
+ assertEquals(library1.getName(), library3.getName());
+ assertNotNull(library3.getWriters());
+ assertEquals(library1.getWriters().size(), library3.getWriters().size());
+ assertNotNull(library3.getBooks());
+ assertEquals(library1.getBooks().size(), library3.getBooks().size());
+ }
+
+ private void deleteLibraryModel1() throws IOException {
+
+ // delete first library model instance in database
+ libraryResource1.getContents().remove(library1);
+ libraryResource1.save(Collections.EMPTY_MAP);
+ }
+
+ private void unloadAllLibraryAndForumModels() {
+
+ // unload resources of first library and forum model instance
+ libraryResource1.unload();
+ forumResource1.unload();
+
+ // unload resources of second library and forum model instance
+ libraryResource2.unload();
+ forumResource2.unload();
+
+ // unload resources of third library and forum model instance
+ libraryResource3.unload();
+ forumResource3.unload();
+ }
+
+ private String createForumModelPathName(IProject project, Forum forum) {
+
+ IPath result = project.getFullPath().append(forum.getName() + "." + forum.eClass().getEPackage().getName());
+ return result.toString();
+ }
+}

Back to the top