Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.olingo.fit.proxy; // CHECKSTYLE:OFF (Maven checkstyle) import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.Calendar; import java.util.TimeZone; import org.apache.commons.lang3.RandomUtils; import org.apache.olingo.client.api.EdmEnabledODataClient; import org.apache.olingo.ext.proxy.AbstractService; import org.apache.olingo.ext.proxy.api.PrimitiveCollection; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.InMemoryEntities; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.AccessLevel; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Address; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Color; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Customer; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Employee; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Order; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderCollection; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderDetail; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.OrderDetailKey; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrument; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.PaymentInstrumentCollection; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.Product; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.ProductDetail; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.ProductDetailCollection; import org.apache.olingo.fit.proxy.staticservice.microsoft.test.odata.services.odatawcfservice.types.HomeAddress; import org.junit.Assert; import org.junit.Test; // CHECKSTYLE:ON (Maven checkstyle) /** * This is the unit test class to check entity create operations. */ public class EntityCreateTestITCase extends AbstractTestITCase { protected AbstractService<EdmEnabledODataClient> getService() { return service; } protected InMemoryEntities getContainer() { return container; } @Test public void createAndDelete() { createPatchAndDeleteOrder(getContainer(), getService()); } @Test public void createEmployee() { final Integer id = 101; final Employee employee = getContainer().newEntityInstance(Employee.class); employee.setPersonID(id); employee.setFirstName("Fabio"); employee.setLastName("Martelli"); PrimitiveCollection<String> value = getContainer().newPrimitiveCollection(String.class); value.add("fabio.martelli@tirasa.net"); employee.setEmails(value); final Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT")); date.clear(); date.set(2011, 3, 4, 9, 0, 0); employee.setDateHired(new Timestamp(date.getTimeInMillis())); final Address homeAddress = getContainer().newComplexInstance(HomeAddress.class); homeAddress.setCity("Pescara"); homeAddress.setPostalCode("65100"); homeAddress.setStreet("viale Gabriele D'Annunzio 256"); employee.setHomeAddress(homeAddress); value = getContainer().newPrimitiveCollection(String.class); value.add("3204725072"); value.add("08569930"); employee.setNumbers(value); getContainer().getPeople().add(employee); getContainer().flush(); Employee actual = getContainer().getPeople().getByKey(id, Employee.class).load(); assertNotNull(actual); assertEquals(id, actual.getPersonID()); Assert.assertEquals(homeAddress.getCity(), actual.getHomeAddress().getCity()); getService().getContext().detachAll(); actual = getContainer().getPeople().getByKey(id, Employee.class).load(); assertNotNull(actual); assertEquals(id, actual.getPersonID()); Assert.assertEquals(homeAddress.getCity(), actual.getHomeAddress().getCity()); getContainer().getPeople().delete(actual.getPersonID()); getContainer().flush(); try { getContainer().getPeople().getByKey(id, Employee.class).load(); fail(); } catch (IllegalArgumentException e) { // Expected } getService().getContext().detachAll(); try { getContainer().getPeople().getByKey(id, Employee.class).load(); fail(); } catch (IllegalArgumentException e) { // Expected } } @Test public void createWithNavigation() { final Integer id = 101; final Customer customer = getContainer().newEntityInstance(Customer.class); customer.setPersonID(id); customer.setPersonID(id); customer.setFirstName("Fabio"); customer.setLastName("Martelli"); customer.setCity("Pescara"); PrimitiveCollection<String> value = getContainer().newPrimitiveCollection(String.class); value.add("fabio.martelli@tirasa.net"); customer.setEmails(value); Address homeAddress = getContainer().newComplexInstance(HomeAddress.class); homeAddress.setCity("Pescara"); homeAddress.setPostalCode("65100"); homeAddress.setStreet("viale Gabriele D'Annunzio 256"); customer.setHomeAddress(homeAddress); value = getContainer().newPrimitiveCollection(String.class); value.add("3204725072"); value.add("08569930"); customer.setNumbers(value); final OrderCollection orders = getContainer().newEntityCollection(OrderCollection.class); orders.add(getContainer().getOrders().getByKey(8)); customer.setOrders(orders); getContainer().getCustomers().add(customer); getContainer().flush(); Customer actual = readCustomer(getContainer(), id); Assert.assertEquals(homeAddress.getCity(), actual.getHomeAddress().getCity()); Assert.assertEquals(1, actual.getOrders().execute().size()); Assert.assertEquals(8, actual.getOrders().iterator().next().getOrderID(), 0); getContainer().getCustomers().delete(actual.getPersonID()); getContainer().flush(); try { getContainer().getCustomers().getByKey(id).load(); fail(); } catch (IllegalArgumentException e) { // Expected } } @Test public void createWithBackNavigation() { final Integer id = 102; // ------------------------------- // Create a new order // ------------------------------- Order order = getContainer().newEntityInstance(Order.class); order.setOrderID(id); final Calendar orderDate = Calendar.getInstance(TimeZone.getTimeZone("GMT")); orderDate.clear(); orderDate.set(2011, 3, 4, 16, 3, 57); order.setOrderDate(new Timestamp(orderDate.getTimeInMillis())); order.setShelfLife(BigDecimal.TEN); PrimitiveCollection<BigDecimal> osl = getContainer().newPrimitiveCollection(BigDecimal.class); osl.add(BigDecimal.TEN.negate()); osl.add(BigDecimal.TEN); order.setOrderShelfLifes(osl); // ------------------------------- // ------------------------------- // Create a new customer // ------------------------------- final Customer customer = getContainer().newEntityInstance(Customer.class); customer.setPersonID(id); customer.setPersonID(id); customer.setFirstName("Fabio"); customer.setLastName("Martelli"); customer.setCity("Pescara"); PrimitiveCollection<String> value = getContainer().newPrimitiveCollection(String.class); value.add("fabio.martelli@tirasa.net"); customer.setEmails(value); final Address homeAddress = getContainer().newComplexInstance(HomeAddress.class); homeAddress.setCity("Pescara"); homeAddress.setPostalCode("65100"); homeAddress.setStreet("viale Gabriele D'Annunzio 256"); customer.setHomeAddress(homeAddress); value = getContainer().newPrimitiveCollection(String.class); value.add("3204725072"); value.add("08569930"); customer.setNumbers(value); final OrderCollection orders = getContainer().newEntityCollection(OrderCollection.class); orders.add(order); customer.setOrders(orders); // ------------------------------- // ------------------------------- // Link customer to order // ------------------------------- order.setCustomerForOrder(customer); // ------------------------------- getContainer().getOrders().add(order); getContainer().flush(); assertEquals(id, order.getOrderID()); assertEquals(id, customer.getPersonID()); Customer actual = readCustomer(getContainer(), id); Assert.assertEquals(homeAddress.getCity(), actual.getHomeAddress().getCity()); Assert.assertEquals(1, actual.getOrders().execute().size()); Assert.assertEquals(id, actual.getOrders().iterator().next().getOrderID()); order = getContainer().getOrders().getByKey(id); assertNotNull(order); Assert.assertEquals(id, order.getCustomerForOrder().load().getPersonID()); getContainer().getOrders().delete(actual.getOrders()); getContainer().flush(); try { getContainer().getOrders().getByKey(id).load(); fail(); } catch (IllegalArgumentException e) { // Expected } actual = readCustomer(getContainer(), id); assertTrue(actual.getOrders().isEmpty()); getContainer().getCustomers().delete(actual.getPersonID()); getContainer().flush(); try { getContainer().getCustomers().getByKey(id).load(); fail(); } catch (IllegalArgumentException e) { // Expected } } @Test public void multiKey() { OrderDetail details = getContainer().newEntityInstance(OrderDetail.class); details.setOrderID(8); details.setProductID(1); details.setQuantity(100); details.setUnitPrice(5f); getContainer().getOrderDetails().add(details); getContainer().flush(); OrderDetailKey key = new OrderDetailKey(); key.setOrderID(8); key.setProductID(1); details = getContainer().getOrderDetails().getByKey(key).load(); assertNotNull(details); assertEquals(Integer.valueOf(100), details.getQuantity()); assertEquals(8, details.getOrderID(), 0); assertEquals(1, details.getProductID(), 0); assertEquals(5f, details.getUnitPrice(), 0); getContainer().getOrderDetails().delete(key); getContainer().flush(); try { getContainer().getOrderDetails().getByKey(key).load(); fail(); } catch (IllegalArgumentException e) { // Expected } } @Test public void deepInsert() { Product product = getContainer().newEntityInstance(Product.class); product.setProductID(12); product.setName("Latte"); product.setQuantityPerUnit("100g Bag"); product.setUnitPrice(3.24f); product.setQuantityInStock(100); product.setDiscontinued(false); product.setUserAccess(AccessLevel.Execute); product.setSkinColor(Color.Blue); PrimitiveCollection<Color> value = getContainer().newPrimitiveCollection(Color.class); value.add(Color.Red); value.add(Color.Green); product.setCoverColors(value); final ProductDetail detail = getContainer().newEntityInstance(ProductDetail.class); detail.setProductID(product.getProductID()); detail.setProductDetailID(12); detail.setProductName("LatteHQ"); detail.setDescription("High-Quality Milk"); final ProductDetailCollection detailCollection = getContainer() .newEntityCollection(ProductDetailCollection.class); detailCollection.add(detail); product.setDetails(detailCollection); getContainer().getProducts().add(product); getContainer().flush(); product = getContainer().getProducts().getByKey(12).load(); assertEquals("Latte", product.getName()); Assert.assertEquals(12, product.getDetails().execute().iterator().next().getProductDetailID(), 0); } @Test public void contained() { PaymentInstrumentCollection instruments = getContainer().getAccounts().getByKey(101) .getMyPaymentInstruments().execute(); final int sizeBefore = instruments.size(); final PaymentInstrument instrument = getContainer().newEntityInstance(PaymentInstrument.class); instruments.add(instrument); final int id = RandomUtils.nextInt(101999, 105000); instrument.setPaymentInstrumentID(id); instrument.setFriendlyName("New one"); instrument.setCreatedDate(new Timestamp(Calendar.getInstance().getTimeInMillis())); getContainer().flush(); instruments = getContainer().getAccounts().getByKey(101).getMyPaymentInstruments().execute(); final int sizeAfter = instruments.size(); assertEquals(sizeBefore + 1, sizeAfter); getContainer().getAccounts().getByKey(101).getMyPaymentInstruments().delete(id); getContainer().flush(); instruments = getContainer().getAccounts().getByKey(101).getMyPaymentInstruments().execute(); final int sizeEnd = instruments.size(); assertEquals(sizeBefore, sizeEnd); } }