| /**************************************************************************** |
| * Copyright (c) 2011, 2013 Oracle and/or its affiliates. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 |
| * which accompanies this distribution. |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: |
| * gonural |
| ******************************************************************************/ |
| package org.eclipse.persistence.jpars.test.service; |
| |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.InputStream; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import javax.ws.rs.core.MediaType; |
| |
| import org.eclipse.persistence.config.PersistenceUnitProperties; |
| import org.eclipse.persistence.descriptors.FetchGroupManager; |
| import org.eclipse.persistence.dynamic.DynamicClassLoader; |
| import org.eclipse.persistence.dynamic.DynamicEntity; |
| import org.eclipse.persistence.jpa.rs.PersistenceContext; |
| import org.eclipse.persistence.jpa.rs.PersistenceFactoryBase; |
| import org.eclipse.persistence.jpa.rs.resources.unversioned.PersistenceResource; |
| import org.eclipse.persistence.jpars.test.util.ExamplePropertiesLoader; |
| import org.eclipse.persistence.jpars.test.util.RestUtils; |
| import org.junit.After; |
| import org.junit.Test; |
| |
| public class TestServiceNonRelational { |
| PersistenceFactoryBase factory = null;; |
| PersistenceContext context = null; |
| private static final String PLACE_PU = "jpars_place"; |
| private static final String ZIPS_PU = "jpars_zip"; |
| private static final String PERSON_PU = "jpars_person"; |
| |
| @After |
| public void resetContext() { |
| if (factory != null) { |
| factory.close(); |
| factory = null; |
| } |
| if (context != null) { |
| context.stop(); |
| } |
| } |
| |
| @Test |
| public void testMarshallPlace() throws Exception { |
| setContext(PLACE_PU); |
| PersistenceResource resource = new PersistenceResource(); |
| resource.setPersistenceFactory(factory); |
| DynamicEntity place = (DynamicEntity) context.newEntity("Place"); |
| place.set("state", "Ontario"); |
| context.create(null, place); |
| InputStream stream = serializeToStream(place, context, MediaType.APPLICATION_JSON_TYPE); |
| place = (DynamicEntity) context.unmarshalEntity("Place", MediaType.APPLICATION_JSON_TYPE, stream); |
| (new FetchGroupManager()).setObjectFetchGroup(place, null, null); |
| String state = place.get("state"); |
| assertNotNull("State of place is null.", state); |
| assertTrue("Ontario".equals(state)); |
| } |
| |
| @SuppressWarnings("rawtypes") |
| @Test |
| public void testMarshallZips() throws Exception { |
| setContext(ZIPS_PU); |
| PersistenceResource resource = new PersistenceResource(); |
| resource.setPersistenceFactory(factory); |
| DynamicEntity zips = (DynamicEntity) context.newEntity("Zips"); |
| zips.set("state", "ON"); |
| zips.set("city", "Ottawa"); |
| zips.set("pop", new Integer(6055)); |
| zips.set("id", "1234"); |
| |
| List<Double> loc = new ArrayList<Double>(); |
| loc.add(new Double(45.4214)); |
| loc.add(new Double(75.6919)); |
| zips.set("loc", loc); |
| |
| context.create(null, zips); |
| InputStream stream = serializeToStream(zips, context, MediaType.APPLICATION_XML_TYPE); |
| zips = (DynamicEntity) context.unmarshalEntity("Zips", MediaType.APPLICATION_XML_TYPE, stream); |
| (new FetchGroupManager()).setObjectFetchGroup(zips, null, null); |
| String state = zips.get("state"); |
| assertNotNull("State of place is null.", state); |
| assertTrue("ON".equals(state)); |
| |
| String id = zips.get("id"); |
| assertNotNull("id is null.", id); |
| assertTrue("1234".equals(id)); |
| assertTrue("Unexpected number of objects in loc", (((Collection) zips.get("loc")).size() == 2)); |
| } |
| |
| @Test |
| public void testMarshallPerson() throws Exception { |
| setContext(PERSON_PU); |
| PersistenceResource resource = new PersistenceResource(); |
| resource.setPersistenceFactory(factory); |
| DynamicEntity person = (DynamicEntity) context.newEntity("Person"); |
| person.set("firstName", "Jim"); |
| person.set("lastName", "Smith"); |
| person.set("age", new Integer(48)); |
| person.set("occupation", "Engineer"); |
| person.set("currentEmployer", "Oracle"); |
| |
| List<String> pastEmployers = new ArrayList<String>(); |
| pastEmployers.add("BEA"); |
| pastEmployers.add("IBM"); |
| pastEmployers.add("Sun"); |
| person.set("pastEmployers", pastEmployers); |
| |
| DynamicEntity address1 = (DynamicEntity) context.newEntity("Addresses"); |
| address1.set("street1", "123 Sandy Lane"); |
| address1.set("city", "San Jose"); |
| address1.set("state", "CA"); |
| address1.set("zip", new Integer(94143)); |
| |
| DynamicEntity address2 = (DynamicEntity) context.newEntity("Addresses"); |
| address2.set("street1", "334 California Street"); |
| address2.set("city", "San Francisco"); |
| address2.set("state", "CA"); |
| address2.set("zip", new Integer(94110)); |
| |
| List<Object> addresses = new ArrayList<Object>(); |
| addresses.add(address1); |
| addresses.add(address2); |
| person.set("addresses", addresses); |
| |
| context.create(null, person); |
| InputStream stream = serializeToStream(person, context, MediaType.APPLICATION_XML_TYPE); |
| person = (DynamicEntity) context.unmarshalEntity("Person", MediaType.APPLICATION_XML_TYPE, stream); |
| (new FetchGroupManager()).setObjectFetchGroup(person, null, null); |
| String firstName = person.get("firstName"); |
| assertNotNull("firstName is null.", firstName); |
| assertTrue("Jim".equals(firstName)); |
| } |
| |
| private static InputStream serializeToStream(Object object, PersistenceContext context, MediaType mediaType) throws Exception { |
| ByteArrayOutputStream os = new ByteArrayOutputStream(); |
| context.marshallEntity(object, mediaType, os); |
| ByteArrayInputStream stream = new ByteArrayInputStream(os.toByteArray()); |
| return stream; |
| } |
| |
| private void setContext(String persistenceUnit) throws Exception { |
| context = null; |
| Map<String, Object> properties = new HashMap<String, Object>(); |
| ExamplePropertiesLoader.loadProperties(properties); |
| factory = new PersistenceFactoryBase(); |
| properties.put(PersistenceUnitProperties.NON_JTA_DATASOURCE, null); |
| properties.put(PersistenceUnitProperties.WEAVING, "static"); |
| properties.put(PersistenceUnitProperties.DEPLOY_ON_STARTUP, "true"); |
| properties.put(PersistenceUnitProperties.CLASSLOADER, new DynamicClassLoader(Thread.currentThread().getContextClassLoader())); |
| context = factory.get(persistenceUnit, RestUtils.getServerURI(), null, properties); |
| if (context == null) { |
| throw new Exception("Persistence context could not be created."); |
| } |
| } |
| } |