http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BuildDeliverySnapshotTest.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BuildDeliverySnapshotTest.java b/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BuildDeliverySnapshotTest.java deleted file mode 100644 index 9693d87..0000000 --- a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BuildDeliverySnapshotTest.java +++ /dev/null @@ -1,672 +0,0 @@ -/* - * 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.zest.sample.dcicargo.sample_a.context.shipping.booking; - -import java.time.LocalDate; -import java.time.ZoneOffset; -import org.apache.zest.api.unitofwork.UnitOfWork; -import org.apache.zest.api.unitofwork.UnitOfWorkFactory; -import org.apache.zest.sample.dcicargo.sample_a.bootstrap.test.TestApplication; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargos; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.RouteSpecification; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.TrackingId; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.Delivery; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.RoutingStatus; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.TransportStatus; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvent; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvents; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.location.Location; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.voyage.Voyage; -import org.junit.Before; -import org.junit.Test; - -import static org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType.CLAIM; -import static org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType.CUSTOMS; -import static org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType.LOAD; -import static org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType.UNLOAD; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.not; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -/** - * Tests of the Build Delivery Snapshot subfunction use case. - * - * All deviations of the use case are tested one by one. The business rules are therefore enforcing the - * structure for the test suite and not arbitrary ideas of the programmer what to test. If the business - * analyst haven't foreseen a deviation in the use case, it's his responsibility that it's not tested. - * - * Test method names describe the test purpose. The prefix refers to the step in the use case. - * - * FIXME: Test methods call each other to allow ordered execution, ie. tests are not indepedants ! - */ -public class BuildDeliverySnapshotTest - extends TestApplication -{ - private final LocalDate TODAY = LocalDate.now(); - - private Location HONGKONG; - private Location STOCKHOLM; - private Location NEWYORK; - private Location DALLAS; - private Location HANGZHOU; - private Location HELSINKI; - private Location TOKYO; - private Location HAMBURG; - private Voyage V100S; - private Voyage V200T; - private Voyage V300A; - private Voyage V400S; - private Voyage V500S; - private Location SHANGHAI; - private TrackingId trackingId; - private Cargo cargo; - private Itinerary itinerary; - private UnitOfWorkFactory uowf; - - @Before - public void prepareTest() - throws Exception - { - super.prepareTest(); - uowf = module.unitOfWorkFactory(); - UnitOfWork uow = uowf.currentUnitOfWork(); - HONGKONG = uow.get( Location.class, CNHKG.code().get() ); - STOCKHOLM = uow.get( Location.class, SESTO.code().get() ); - SHANGHAI = uow.get( Location.class, CNSHA.code().get() ); - TOKYO = uow.get( Location.class, JNTKO.code().get() ); - NEWYORK = uow.get( Location.class, USNYC.code().get() ); - DALLAS = uow.get( Location.class, USDAL.code().get() ); - HANGZHOU = uow.get( Location.class, CNHGH.code().get() ); - HELSINKI = uow.get( Location.class, FIHEL.code().get() ); - HAMBURG = uow.get( Location.class, DEHAM.code().get() ); - V100S = uow.get( Voyage.class, "V100S" ); - V200T = uow.get( Voyage.class, "V200T" ); - V300A = uow.get( Voyage.class, "V300A" ); - V400S = uow.get( Voyage.class, "V400S" ); - V500S = uow.get( Voyage.class, "V500S" ); - - Cargos CARGOS = uow.get( Cargos.class, Cargos.CARGOS_ID ); - trackingId = new BookNewCargo( CARGOS, HONGKONG, STOCKHOLM, day( 17 ) ).createCargo( "ABC" ); - cargo = uow.get( Cargo.class, trackingId.id().get() ); - - itinerary = itinerary( - leg( V100S, HONGKONG, NEWYORK, day( 1 ), day( 8 ) ), - leg( V200T, NEWYORK, DALLAS, day( 9 ), day( 12 ) ), - leg( V300A, DALLAS, STOCKHOLM, day( 13 ), day( 16 ) ) - ); - } - - // DERIVE WITH ROUTE SPECIFICATION ============================================================================== - - @Test( expected = RouteException.class ) - public void deviation_2a_InvalidRouteSpecification_sameLocations() - throws Exception - { - RouteSpecification routeSpec = routeSpecification( HONGKONG, HONGKONG, day( 20 ) ); - new BuildDeliverySnapshot( routeSpec ).get(); - } - - @Test( expected = RouteException.class ) - public void deviation_2b_InvalidRouteSpecification_tooEarlyDeadline() - throws Exception - { - RouteSpecification routeSpec = routeSpecification( HONGKONG, STOCKHOLM, TODAY ); - new BuildDeliverySnapshot( routeSpec ).get(); - } - - @Test - public void deviation_2c_ItineraryIsUnknown_buildFromRouteSpecification() - throws Exception - { - RouteSpecification routeSpec = routeSpecification( HONGKONG, STOCKHOLM, day( 20 ) ); - Delivery delivery = new BuildDeliverySnapshot( routeSpec ).get(); - - assertThat( delivery.timestamp().get().isAfter( TODAY.atStartOfDay().toInstant( ZoneOffset.UTC ) ), is( equalTo( true ) ) ); // TODAY is set first - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.NOT_ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.NOT_RECEIVED ) ) ); - assertThat( delivery.nextExpectedHandlingEvent() - .get() - .handlingEventType() - .get(), is( equalTo( HandlingEventType.RECEIVE ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( null ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - // DERIVE WITH NON-ROUTED CARGO ============================================================================== - - @Test - public void deviation_2c_ItineraryIsUnknown_buildFromNonRoutedCargo() - throws Exception - { - deviation_2c_ItineraryIsUnknown_buildFromRouteSpecification(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - RouteSpecification routeSpec = routeSpecification( HONGKONG, STOCKHOLM, day( 20 ) ); - Cargos CARGOS = uow.get( Cargos.class, Cargos.CARGOS_ID ); - Delivery delivery = new BuildDeliverySnapshot( routeSpec ).get(); - CARGOS.createCargo( routeSpec, delivery, "ABCD" ); - - // Same as previous test (just build from cargo instead) - assertThat( delivery.timestamp().get().isAfter( TODAY.atStartOfDay().toInstant( ZoneOffset.UTC ) ), is( equalTo( true ) ) ); // TODAY is set first - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.NOT_ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.NOT_RECEIVED ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), - is( equalTo( HandlingEventType.RECEIVE ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( null ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - // DERIVE WITH ROUTE SPECIFICATION + ITINERARY (Routed cargo) ============================================== - - @Test - public void deviation_2d_UnsatisfyingItinerary_wrongOrigin() - throws Exception - { - deviation_2c_ItineraryIsUnknown_buildFromNonRoutedCargo(); - - Itinerary itinerary = itinerary( - leg( V100S, HONGKONG, NEWYORK, day( 1 ), day( 8 ) ), - leg( V200T, NEWYORK, DALLAS, day( 9 ), day( 12 ) ), - leg( V300A, DALLAS, STOCKHOLM, day( 13 ), day( 16 ) ) - ); - - // Hangzhou not in itinerary first leg - RouteSpecification routeSpec = routeSpecification( HANGZHOU, STOCKHOLM, day( 20 ) ); - cargo.itinerary().set( itinerary ); - cargo.routeSpecification().set( routeSpec ); - Delivery delivery = new BuildDeliverySnapshot( cargo ).get(); - - // Route specification not satisfied by itinerary - assertThat( itinerary.firstLeg().loadLocation().get(), is( not( equalTo( routeSpec.origin().get() ) ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.MISROUTED ) ) ); - } - - @Test - public void deviation_2d_UnsatisfyingItinerary_wrongDestination() - throws Exception - { - deviation_2d_UnsatisfyingItinerary_wrongOrigin(); - - // Helsinki not in itinerary last leg - RouteSpecification routeSpec = routeSpecification( HONGKONG, HELSINKI, day( 20 ) ); - cargo.routeSpecification().set( routeSpec ); - Delivery delivery = new BuildDeliverySnapshot( cargo ).get(); - - // Route specification not satisfied by itinerary - assertThat( itinerary.lastLeg().unloadLocation().get(), is( not( equalTo( routeSpec.destination().get() ) ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.MISROUTED ) ) ); - } - - @Test - public void deviation_2d_UnsatisfyingItinerary_missedDeadline() - throws Exception - { - deviation_2d_UnsatisfyingItinerary_wrongDestination(); - - // Arrival on day 12 according to itinerary is not meeting deadline - RouteSpecification routeSpec = routeSpecification( HONGKONG, STOCKHOLM, day( 14 ) ); - cargo.routeSpecification().set( routeSpec ); - Delivery delivery = new BuildDeliverySnapshot( cargo ).get(); - - // Route specification not satisfied by itinerary - assertFalse( routeSpec.arrivalDeadline().get().isAfter( itinerary.finalArrivalDate() ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.MISROUTED ) ) ); - } - - @Test - public void deviation_3a_CargoHasNoHandlingHistory() - throws Exception - { - deviation_2d_UnsatisfyingItinerary_missedDeadline(); - - LocalDate arrival = day( 16 ); - LocalDate deadline = day( 20 ); - // Itinerary will satisfy route specification - RouteSpecification routeSpec = routeSpecification( HONGKONG, STOCKHOLM, deadline ); - cargo.routeSpecification().set( routeSpec ); - Delivery delivery = new BuildDeliverySnapshot( cargo ).get(); - - // Route specification satisfied by itinerary - assertThat( itinerary.firstLeg().loadLocation().get(), is( equalTo( routeSpec.origin().get() ) ) ); - assertThat( itinerary.lastLeg().unloadLocation().get(), is( equalTo( routeSpec.destination().get() ) ) ); - assertTrue( routeSpec.arrivalDeadline().get().isAfter( itinerary.finalArrivalDate() ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - - assertThat( delivery.timestamp() - .get() - .isAfter( TODAY.atStartOfDay() - .toInstant( ZoneOffset.UTC ) ), is( equalTo( true ) ) ); // TODAY is set first - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.NOT_RECEIVED ) ) ); - assertThat( delivery.nextExpectedHandlingEvent() - .get() - .handlingEventType() - .get(), is( equalTo( HandlingEventType.RECEIVE ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( null ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( arrival ) ) ); - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - // DERIVE WITH ROUTE SPECIFICATION + ITINERARY + LAST HANDLING EVENT ============================================ - - @Test - public void deviation_4a_RECEIVE_1a_UnexpectedPort() - throws Exception - { - deviation_3a_CargoHasNoHandlingHistory(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - // Unexpected receipt in Shanghai - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 1 ), trackingId, HandlingEventType.RECEIVE, SHANGHAI, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - // We don't know what's next for a misdirected cargo - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( SHANGHAI ) ) ); - - // Cargo is still routed - but it should be re-routed according to new (unexpected) location. - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - @Test - public void deviation_4a_RECEIVE_1b_ExpectedPort() - throws Exception - { - deviation_4a_RECEIVE_1a_UnexpectedPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - // Expected receipt in Hong Kong - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 1 ), trackingId, HandlingEventType.RECEIVE, HONGKONG, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HONGKONG ) ) ); - - // We expect the cargo to be loaded on voyage V100S in Hong Kong - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( LOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - } - - @Test - public void deviation_4b_LOAD_2a_UnexpectedPort() - throws Exception - { - deviation_4a_RECEIVE_1b_ExpectedPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - // Unexpected load in Tokyo - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 1 ), trackingId, LOAD, TOKYO, V100S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.ONBOARD_CARRIER ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( TOKYO ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( V100S ) ) ); - } - - @Test - public void deviation_4b_LOAD_2b_ExpectedPort() - throws Exception - { - deviation_4b_LOAD_2a_UnexpectedPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - // Expected load in Hong Kong - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 1 ), trackingId, LOAD, HONGKONG, V100S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.ONBOARD_CARRIER ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( V100S ) ) ); - - // We expect the cargo to be unloaded from voyage V100S in New York - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( NEWYORK ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - } - - @Test - public void deviation_4b_LOAD_2c_UnexpectedVoyageNotFromItinerary() - throws Exception - { - deviation_4b_LOAD_2b_ExpectedPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - // Load onto unexpected voyage - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 1 ), trackingId, LOAD, HONGKONG, V400S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.ONBOARD_CARRIER ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( V400S ) ) ); - } - - @Test - public void deviation_4b_LOAD_2c_ExpectedButLaterVoyageInItinerary() - throws Exception - { - deviation_4b_LOAD_2c_UnexpectedVoyageNotFromItinerary(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // The system doesn't currently check if handling events happen in the right order, so - // a cargo can now suddenly load in New York, even though it hasn't got there yet. - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 5 ), day( 5 ), trackingId, LOAD, NEWYORK, V200T ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - // Should have been true, but we accept it for now... - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.ONBOARD_CARRIER ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( NEWYORK ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( V200T ) ) ); - - // We expect the cargo to be unloaded from voyage V200T in Dallas - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( DALLAS ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V200T ) ) ); - } - - @Test - public void deviation_4c_UNLOAD_1a_UnexpectedPort() - throws Exception - { - deviation_4b_LOAD_2c_ExpectedButLaterVoyageInItinerary(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Unexpected unload in Tokyo - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 5 ), day( 5 ), trackingId, UNLOAD, TOKYO, V100S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - cargo.delivery().set( delivery ); - - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.lastHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( TOKYO ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - - // Cargo needs to be rerouted - - // Customer specifies a new route - RouteSpecification routeSpec = routeSpecification( TOKYO, STOCKHOLM, day( 20 ) ); - cargo.routeSpecification().set( routeSpec ); - delivery = new BuildDeliverySnapshot( cargo ).get(); - cargo.delivery().set( delivery ); - - // Old itinerary will not satisfy new route specification - assertThat( itinerary.firstLeg().loadLocation().get(), is( not( equalTo( routeSpec.origin().get() ) ) ) ); - assertThat( itinerary.lastLeg().unloadLocation().get(), is( equalTo( routeSpec.destination().get() ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.MISROUTED ) ) ); - - // Old planned arrival time is still satisfying new deadline - assertTrue( routeSpec.arrivalDeadline().get().isAfter( itinerary.finalArrivalDate() ) ); - - // We don't know what's next before a new itinerary has been chosen - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - // Cargo is still misdirected (in unexpected location) according to old itinerary - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - - // Last known data - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.lastHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( TOKYO ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - - // New itinerary that satisfy the new route specification. New origin departure from Tokyo. - LocalDate arrival = day( 19 ); - itinerary = itinerary( - leg( V400S, TOKYO, HAMBURG, day( 9 ), day( 16 ) ), - leg( V500S, HAMBURG, STOCKHOLM, day( 17 ), arrival ) - ); - - // Customer reroutes cargo. This is a possible step in the cargo booking process. - new BookNewCargo( cargo, itinerary ).assignCargoToRoute(); - delivery = cargo.delivery().get(); - - // Cargo is on track again - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.lastHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( TOKYO ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( arrival ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - - // When a cargo is rerouted the (often misdirected) last handling event is flagged as disregarded - // since it doesn't have to be part of the new itinerary (this isn't in the Citerus version). - - // We now expect the cargo to be loaded onto voyage V400S in Tokyo heading to Hamburg - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( LOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( TOKYO ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V400S ) ) ); - - // Cargo is not misdirected anymore according to new itinerary. Cargo location is now expected to be in Tokyo. - } - - @Test - public void deviation_4c_UNLOAD_1b_ExpectedMidpointLocation() - throws Exception - { - deviation_4c_UNLOAD_1a_UnexpectedPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Unload at midpoint location of itinerary - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 8 ), day( 8 ), trackingId, UNLOAD, HAMBURG, V400S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HAMBURG ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - - // We expect the cargo to be loaded onto voyage V200T in New York heading for Dallas - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( LOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( HAMBURG ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V500S ) ) ); - } - - @Test - public void deviation_4c_UNLOAD_1c_Destination() - throws Exception - { - deviation_4c_UNLOAD_1b_ExpectedMidpointLocation(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Unload at destination - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 16 ), day( 16 ), trackingId, UNLOAD, STOCKHOLM, V500S ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( STOCKHOLM ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - - // Cargo has arrived at destination location - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( true ) ) ); - - // We expect the cargo to be claimed by customer - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( CLAIM ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( STOCKHOLM ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( null ) ) ); - } - - @Test - public void deviation_4d_CUSTOMS_1a_CargoIsInDestinationPort() - throws Exception - { - deviation_4c_UNLOAD_1c_Destination(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Cargo was handled by the customs authorities - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 16 ), day( 16 ), trackingId, CUSTOMS, STOCKHOLM, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.IN_PORT ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( STOCKHOLM ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - - // Cargo might be at destination, but the last handling event wasn't unloading - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( true ) ) ); - - // Shouldn't we expect the cargo to be claimed by the customer now ? - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - } - - @Test - public void deviation_4e_CLAIM_1a_CargoIsNotInDestinationPort() - throws Exception - { - deviation_4d_CUSTOMS_1a_CargoIsInDestinationPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Cargo was claimed but not at destination location - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 1 ), day( 16 ), trackingId, CLAIM, HELSINKI, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( true ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - assertThat( delivery.eta().get(), is( equalTo( null ) ) ); - - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.CLAIMED ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HELSINKI ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - - // Cargo is claimed but has not arrived yet in destination port - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - @Test - public void deviation_4e_CLAIM_1b_CargoIsInDestinationPort() - throws Exception - { - deviation_4e_CLAIM_1a_CargoIsNotInDestinationPort(); - - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - - // Cargo was claimed by customer at destination location - HandlingEvent handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 16 ), day( 16 ), trackingId, CLAIM, STOCKHOLM, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.CLAIMED ) ) ); - assertThat( delivery.lastHandlingEvent().get(), is( equalTo( handlingEvent ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( STOCKHOLM ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( null ) ) ); - - // Cargo is claimed in destination port - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( true ) ) ); - - // No more expected handling events - assertThat( delivery.nextExpectedHandlingEvent().get(), is( equalTo( null ) ) ); - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/InspectCargoTest.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/InspectCargoTest.java b/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/InspectCargoTest.java deleted file mode 100644 index 0a05b2d..0000000 --- a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/InspectCargoTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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.zest.sample.dcicargo.sample_a.context.shipping.handling; - -import org.apache.zest.api.unitofwork.UnitOfWorkFactory; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvents; -import org.junit.Before; -import org.junit.Test; -import org.apache.zest.api.unitofwork.UnitOfWork; -import org.apache.zest.sample.dcicargo.sample_a.bootstrap.test.TestApplication; -import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BookNewCargo; -import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BuildDeliverySnapshot; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargos; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.TrackingId; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.Delivery; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvent; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.location.Location; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.voyage.Voyage; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -/** - * Javadoc - * - * Test method names describe the test purpose. The prefix refers to the step in the use case. - */ -public class InspectCargoTest - extends TestApplication -{ - private Cargo cargo; - private TrackingId trackingId; - private Location STOCKHOLM; - private Location DALLAS; - private Location SHANGHAI; - private Voyage V200T; - private Voyage V300A; - private HandlingEvent handlingEvent; - private UnitOfWorkFactory uowf; - - @Before - public void beforeEachTest() - throws Exception - { - uowf = module.unitOfWorkFactory(); - UnitOfWork uow = uowf.currentUnitOfWork(); - Cargos CARGOS = uow.get( Cargos.class, Cargos.CARGOS_ID ); - Location HONGKONG = uow.get( Location.class, CNHKG.code().get() ); - SHANGHAI = uow.get( Location.class, CNSHA.code().get() ); - STOCKHOLM = uow.get( Location.class, SESTO.code().get() ); - Location NEWYORK = uow.get( Location.class, USNYC.code().get() ); - DALLAS = uow.get( Location.class, USDAL.code().get() ); - Voyage V100S = uow.get( Voyage.class, "V100S" ); - V200T = uow.get( Voyage.class, "V200T" ); - V300A = uow.get( Voyage.class, "V300A" ); - - // Create cargo - trackingId = new BookNewCargo( CARGOS, HONGKONG, STOCKHOLM, day( 17 ) ).createCargo( "ABC" ); - cargo = uow.get( Cargo.class, trackingId.id().get() ); - Itinerary itinerary = itinerary( - leg( V100S, HONGKONG, NEWYORK, day( 1 ), day( 8 ) ), - leg( V200T, NEWYORK, DALLAS, day( 9 ), day( 12 ) ), - leg( V300A, DALLAS, STOCKHOLM, day( 13 ), day( 16 ) ) - ); - - // Route cargo - new BookNewCargo( cargo, itinerary ).assignCargoToRoute(); - } - - @Test - public void deviation_3a_CargoIsMisdirected() - throws Exception - { - // Create misdirected handling event for cargo (receipt in Shanghai is unexpected) - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 0 ), day( 0 ), trackingId, HandlingEventType.RECEIVE, SHANGHAI, null ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - cargo.delivery().set( delivery ); - assertThat( cargo.delivery().get().isMisdirected().get(), is( equalTo( true ) ) ); - - logger.info( " Handling cargo 'ABC' (misdirected):" ); - new InspectCargo( handlingEvent ).inspect(); - - // Assert that notification of misdirection has been sent (see console output). - } - - @Test - public void deviation_3b_CargoHasArrived() - throws Exception - { - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 15 ), day( 15 ), trackingId, HandlingEventType.UNLOAD, STOCKHOLM, V300A ); - Delivery delivery = new BuildDeliverySnapshot( cargo, handlingEvent ).get(); - cargo.delivery().set( delivery ); - assertThat( cargo.delivery().get().isUnloadedAtDestination().get(), is( equalTo( true ) ) ); - - logger.info( " Handling cargo 'ABC' (arrived):" ); - new InspectCargo( handlingEvent ).inspect(); - - // Assert that notification of arrival has been sent (see console output). - } - - @Test - public void step_3_CargoIsCorrectlyInTransit() - throws Exception - { - logger.info( " Handling cargo 'ABC' (unloaded in Dallas):" ); - UnitOfWork uow = uowf.currentUnitOfWork(); - HandlingEvents HANDLING_EVENTS = uow.get( HandlingEvents.class, HandlingEvents.HANDLING_EVENTS_ID ); - handlingEvent = HANDLING_EVENTS.createHandlingEvent( day( 12 ), day( 12 ), trackingId, HandlingEventType.UNLOAD, DALLAS, V200T ); - cargo.delivery().set( new BuildDeliverySnapshot( cargo, handlingEvent ).get() ); - assertThat( cargo.delivery().get().isMisdirected().get(), is( equalTo( false ) ) ); - new InspectCargo( handlingEvent ).inspect(); - - logger.info( " Cargo was correctly directed." ); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/RegisterHandlingEventTest.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/RegisterHandlingEventTest.java b/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/RegisterHandlingEventTest.java deleted file mode 100644 index 0f3e992..0000000 --- a/samples/dci-cargo/dcisample_a/src/test/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/handling/RegisterHandlingEventTest.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * 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.zest.sample.dcicargo.sample_a.context.shipping.handling; - -import java.time.LocalDate; -import org.junit.Before; -import org.junit.Test; -import org.apache.zest.api.unitofwork.UnitOfWork; -import org.apache.zest.sample.dcicargo.sample_a.bootstrap.test.TestApplication; -import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BookNewCargo; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargos; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.TrackingId; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.Delivery; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.RoutingStatus; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.TransportStatus; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.location.Location; -import org.apache.zest.sample.dcicargo.sample_a.data.shipping.voyage.Voyage; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; -import static org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEventType.UNLOAD; - -/** - * Testing the Register Handling Event use case. - * - * Test method names describe the test purpose. The prefix refers to the step in the use case. - */ -public class RegisterHandlingEventTest - extends TestApplication -{ - private LocalDate date; - private String trackId; - private String msg; - private LocalDate arrival; - private Cargo cargo; - private TrackingId trackingId; - private Cargos CARGOS; - private Location HONGKONG; - private Location STOCKHOLM; - private Location NEWYORK; - private Location DALLAS; - private Voyage V100S; - private Voyage V200T; - private Voyage V300A; - - @Before - public void beforeEachTest() throws Exception { - UnitOfWork uow = module.unitOfWorkFactory().currentUnitOfWork(); - CARGOS = uow.get(Cargos.class, Cargos.CARGOS_ID ); - HONGKONG = uow.get( Location.class, CNHKG.code().get() ); - STOCKHOLM = uow.get( Location.class, SESTO.code().get() ); - NEWYORK = uow.get( Location.class, USNYC.code().get() ); - DALLAS = uow.get( Location.class, USDAL.code().get() ); - V100S = uow.get( Voyage.class, "V100S" ); - V200T = uow.get( Voyage.class, "V200T" ); - V300A = uow.get( Voyage.class, "V300A" ); - trackingId = new BookNewCargo( CARGOS, HONGKONG, STOCKHOLM, day( 17 ) ).createCargo( "ABC" ); - cargo = uow.get( Cargo.class, trackingId.id().get() ); - Itinerary itinerary = itinerary( - leg( V100S, HONGKONG, NEWYORK, day( 1 ), day( 8 ) ), - leg( V200T, NEWYORK, DALLAS, day( 9 ), day( 12 ) ), - leg( V300A, DALLAS, STOCKHOLM, day( 13 ), - arrival = day( 16 ) ) - ); - new BookNewCargo( cargo, itinerary ).assignCargoToRoute(); - date = day( 1 ); - trackId = trackingId.id().get(); - } - - // INPUT EXISTENCE VALIDATION ================================================================== - - @Test - public void deviation_2a_MissingRegistrationTime() throws Exception - { - msg = register( null, date, trackId, "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Registration time was null. All parameters have to be passed." ) ) ); - } - @Test - public void deviation_2a_MissingCompletionTime() throws Exception - { - msg = register( date, null, trackId, "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Completion time was null. All parameters have to be passed." ) ) ); - } - - @Test - public void deviation_2a_MissingTrackingId() throws Exception - { - msg = register( date, date, null, "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Tracking id was null. All parameters have to be passed." ) ) ); - } - - @Test - public void deviation_2a_EmptyTrackingId() throws Exception - { - msg = register( date, date, "", "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Tracking id cannot be empty." ) ) ); - } - - @Test - public void deviation_2a_MissingEventType() throws Exception - { - msg = register( date, date, trackId, null, "CNHKG", null ); - assertThat( msg, is( equalTo( "Event type was null. All parameters have to be passed." ) ) ); - } - - @Test - public void deviation_2a_EmptyEventType() throws Exception - { - msg = register( date, date, trackId, "", "CNHKG", null ); - assertThat( msg, is( equalTo( "Event type cannot be empty." ) ) ); - } - - @Test - public void deviation_2a_MissingUnlocode() throws Exception - { - msg = register( date, date, trackId, "RECEIVE", null, null ); - assertThat( msg, is( equalTo( "UnLocode was null. All parameters have to be passed." ) ) ); - } - - @Test - public void deviation_2a_EmptyUnlocode() throws Exception - { - msg = register( date, date, trackId, "RECEIVE", "", null ); - assertThat( msg, is( equalTo( "UnLocode cannot be empty." ) ) ); - } - - @Test - public void step_2_CompleteData__Receive_in_Hong_Kong() throws Exception - { - new RegisterHandlingEvent( date, date, trackId, "RECEIVE", "CNHKG", null ).register(); - } - - - // INPUT VALIDATION ================================================================== - - @Test - public void deviation_3a_HandlingTypeNotRecognized() throws Exception - { - msg = register( date, date, trackId, "RECEIPT", "CNHKG", null ); - assertThat( msg, is( equalTo( - "'RECEIPT' is not a valid handling event type. Valid types are: [RECEIVE, LOAD, UNLOAD, CUSTOMS, CLAIM]" ) ) ); - } - - @Test - public void deviation_3b_NoCargoWithTrackingId() throws Exception - { - msg = register( date, date, "XXX", "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Found no cargo with tracking id 'XXX'." ) ) ); - } - - @Test - public void deviation_3c_CargoNotRoutedYet() throws Exception - { - TrackingId nonRoutedTrackingId = new BookNewCargo( CARGOS, HONGKONG, STOCKHOLM, day( 17 ) ).createCargo( "NonRoutedCargo" ); - String nonRouted = nonRoutedTrackingId.id().get(); - - msg = register( date, date, nonRouted, "RECEIVE", "CNHKG", null ); - assertThat( msg, is( equalTo( "Can't create handling event for non-routed cargo '" + nonRouted + "'." ) ) ); - } - - @Test - public void deviation_3d_NoLocationWithUnlocode() throws Exception - { - msg = register( date, date, trackId, "RECEIVE", "ZZZZZ", null ); - assertThat( msg, is( equalTo( "Unknown location: ZZZZZ" ) ) ); - } - - @Test - public void deviation_3e_1a_MissingVoyageNumber() throws Exception - { - msg = register( date, date, trackId, "LOAD", "CNHKG", null ); - assertThat( msg, is( equalTo( "Handling event LOAD requires a voyage. No voyage number submitted." ) ) ); - } - - @Test - public void deviation_3e_1b_MissingVoyage() throws Exception - { - msg = register( date, date, trackId, "LOAD", "CNHKG", "V600S" ); - assertThat( msg, is( equalTo( "Found no voyage with voyage number 'V600S'." ) ) ); - } - - @Test - public void deviation_3f_SkipVoyageNumberSilentlyWhenProhibited() throws Exception - { - new RegisterHandlingEvent( date, date, trackId, "RECEIVE", "CNHKG", "V100S" ).register(); - assertThat( cargo.delivery().get().currentVoyage().get(), is( equalTo( null ) ) ); - } - - @Test - public void step_3_to_5_ValidRegistration__Load_in_Hong_Kong() throws Exception - { - new RegisterHandlingEvent( date, date, trackId, "LOAD", "CNHKG", "V100S" ).register(); - - Delivery delivery = cargo.delivery().get(); - assertThat( delivery.routingStatus().get(), is( equalTo( RoutingStatus.ROUTED ) ) ); - assertThat( delivery.transportStatus().get(), is( equalTo( TransportStatus.ONBOARD_CARRIER ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().handlingEventType().get(), is( equalTo( UNLOAD ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().location().get(), is( equalTo( NEWYORK ) ) ); - assertThat( delivery.nextExpectedHandlingEvent().get().voyage().get(), is( equalTo( V100S ) ) ); - assertThat( delivery.lastKnownLocation().get(), is( equalTo( HONGKONG ) ) ); - assertThat( delivery.currentVoyage().get(), is( equalTo( V100S ) ) ); - assertThat( delivery.eta().get(), is( equalTo( arrival ) ) ); - assertThat( delivery.isMisdirected().get(), is( equalTo( false ) ) ); - assertThat( delivery.isUnloadedAtDestination().get(), is( equalTo( false ) ) ); - } - - - private String register( LocalDate registrationDate, - LocalDate completionDate, - String trackingIdString, - String eventTypeString, - String unLocodeString, - String voyageNumberString ) throws Exception - { - try - { - new RegisterHandlingEvent( registrationDate, - completionDate, - trackingIdString, - eventTypeString, - unLocodeString, - voyageNumberString ).register(); - } - catch (IllegalArgumentException e) - { - return e.getMessage(); - } - throw new Exception( "Unexpected exception." ); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/build.gradle ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/build.gradle b/samples/dci-cargo/dcisample_b/build.gradle deleted file mode 100644 index 3b7b63c..0000000 --- a/samples/dci-cargo/dcisample_b/build.gradle +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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. - * - * - */ - -description = "Sample of how DCI (Data, Context & Interaction) pattern is implemented with Apache Zestâ¢, for Eric Evans DDD sample." - -jar { manifest { name = "Apache Zest⢠Sample DCI Cargo - Sample B" }} - -dependencies { - - compile project( ':org.apache.zest.core:org.apache.zest.core.bootstrap' ) - compile project( ':org.apache.zest.libraries:org.apache.zest.library.constraints' ) - compile project( ':org.apache.zest.extensions:org.apache.zest.extension.valueserialization-orgjson' ) - compile project( ':org.apache.zest.extensions:org.apache.zest.extension.indexing-rdf' ) - compile project( ':org.apache.zest.tools:org.apache.zest.tool.envisage' ) - compile libraries.jetty_webapp - compile libraries.wicket - compile libraries.wicket_devutils - compile libraries.wicket_stateless - compile libraries.slf4j_api - - runtime project( ':org.apache.zest.core:org.apache.zest.core.runtime' ) - - testCompile project( ':org.apache.zest.core:org.apache.zest.core.testsupport' ) - testCompile libraries.easymock - - testRuntime libraries.logback - -} - -task(runSample, dependsOn: 'testClasses', type: JavaExec) { - main = 'org.apache.zest.sample.dcicargo.sample_b.bootstrap.Start8082' - classpath = sourceSets.test.runtimeClasspath -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/GraphTraversalService.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/GraphTraversalService.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/GraphTraversalService.java deleted file mode 100644 index 754188b..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/GraphTraversalService.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.zest.sample.dcicargo.pathfinder_b.api; - -import java.rmi.Remote; -import java.rmi.RemoteException; -import java.time.LocalDate; -import java.util.List; - -/** - * Part of the external graph traversal API exposed by the routing team - * and used by us (booking and tracking team). - */ -public interface GraphTraversalService extends Remote -{ - - /** - * @param departureDate - * @param originUnLocode origin UN Locode - * @param destinationUnLocode destination UN Locode - * - * @return A list of transit paths - * - * @throws RemoteException RMI problem - */ - List<TransitPath> findShortestPath( LocalDate departureDate, String originUnLocode, String destinationUnLocode ) - throws RemoteException; - - List<TransitPath> getVoyages() - throws RemoteException; -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitEdge.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitEdge.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitEdge.java deleted file mode 100644 index 82174d5..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitEdge.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.zest.sample.dcicargo.pathfinder_b.api; - -import java.io.Serializable; -import java.time.LocalDate; - -/** - * Represents an edge in a path through a graph, - * describing the route of a cargo. - */ -public final class TransitEdge implements Serializable -{ - - private final String voyageNumber; - private final String fromUnLocode; - private final String toUnLocode; - private final LocalDate fromDate; - private final LocalDate toDate; - - /** - * Constructor. - * - * @param voyageNumber The voyage number - * @param fromUnLocode The UNLO code of the originating port - * @param toUnLocode The UNLO code of the destination port - * @param fromDate The starting date of the voyage - * @param toDate The last day of the voyage - */ - public TransitEdge( final String voyageNumber, - final String fromUnLocode, - final String toUnLocode, - final LocalDate fromDate, - final LocalDate toDate - ) - { - this.voyageNumber = voyageNumber; - this.fromUnLocode = fromUnLocode; - this.toUnLocode = toUnLocode; - this.fromDate = fromDate; - this.toDate = toDate; - } - - public String getVoyageNumber() - { - return voyageNumber; - } - - public String getFromUnLocode() - { - return fromUnLocode; - } - - public String getToUnLocode() - { - return toUnLocode; - } - - public LocalDate getFromDate() - { - return fromDate; - } - - public LocalDate getToDate() - { - return toDate; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitPath.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitPath.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitPath.java deleted file mode 100644 index d03403e..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/TransitPath.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.zest.sample.dcicargo.pathfinder_b.api; - -import java.io.Serializable; -import java.util.Collections; -import java.util.List; - -/** - * - */ -public final class TransitPath implements Serializable -{ - - private final List<TransitEdge> transitEdges; - - /** - * Constructor. - * - * @param transitEdges The legs for this itinerary. - */ - public TransitPath( final List<TransitEdge> transitEdges ) - { - this.transitEdges = transitEdges; - } - - /** - * @return An unmodifiable list DTOs. - */ - public List<TransitEdge> getTransitEdges() - { - return Collections.unmodifiableList( transitEdges ); - } - - public String print() - { - StringBuilder sb = new StringBuilder( "\nTRANSIT PATH -----------------------------------------------------" ); - for( int i = 0; i < transitEdges.size(); i++ ) - { - printLeg( i, sb, transitEdges.get( i ) ); - } - return sb.append( "\n---------------------------------------------------------------\n" ).toString(); - } - - private void printLeg( int i, StringBuilder sb, TransitEdge edge ) - { - sb.append( "\n Leg " ).append( i ); - sb.append( " Load " ); - sb.append( edge.getFromDate() ); - sb.append( " " ).append( edge.getFromUnLocode() ); - sb.append( " " ).append( edge.getVoyageNumber() ); - sb.append( " Unload " ); - sb.append( edge.getToDate() ); - sb.append( " " ).append( edge.getToUnLocode() ); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/package.html ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/package.html deleted file mode 100644 index 8829a5e..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/api/package.html +++ /dev/null @@ -1,26 +0,0 @@ -<!-- - ~ 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. - ~ - ~ - --> -<html> -<body> -<p> - Public API for the pathfinder application. -</p> -</body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphDAO.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphDAO.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphDAO.java deleted file mode 100644 index 3ff7a87..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphDAO.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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.zest.sample.dcicargo.pathfinder_b.internal; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import org.apache.zest.sample.dcicargo.pathfinder_b.api.TransitEdge; -import org.apache.zest.sample.dcicargo.pathfinder_b.api.TransitPath; - -public class GraphDAO -{ - private List<TransitPath> voyages = new ArrayList<>(); - - private List<String> listLocations() - { - return new ArrayList<>( Arrays.asList( - "CNHKG", "AUMEL", "SESTO", "FIHEL", "USCHI", "JNTKO", "DEHAM", "CNSHA", "NLRTM", "SEGOT", "CNHGH", "SOMGQ", "USNYC", "USDAL" - ) ); - } - - List<TransitPath> voyages() - { - if( voyages.size() > 0 ) - { - return voyages; - } - - LocalDate departureDate = LocalDate.now(); - for( int i = 0; i < 50; i++ ) - { - List<String> locations = getRandomChunkOfLocations( listLocations() ); - final List<TransitEdge> transitEdges = new ArrayList<>( locations.size() - 1 ); - final String voyageNumber = "V" + ( 101 + i ); - - // Origin and destination of voyage schedule - String from = locations.remove( 0 ); - String destination = locations.remove( 0 ); - - LocalDate date = nextDate( departureDate ); - LocalDate fromDate; - LocalDate toDate; - - // Carrier movements - for( final String to : locations ) - { - fromDate = nextDate( date ); - toDate = nextDate( fromDate ); - date = nextDate( toDate ); - transitEdges.add( new TransitEdge( voyageNumber, from, to, fromDate, toDate ) ); - - // Arrival location of last carrier movement becomes departure location of next - from = to; - } - - // Final carrier movement - fromDate = nextDate( date ); - toDate = nextDate( fromDate ); - transitEdges.add( new TransitEdge( voyageNumber, from, destination, fromDate, toDate ) ); - - voyages.add( new TransitPath( transitEdges ) ); - } - - return voyages; - } - - private LocalDate nextDate( LocalDate date ) - { - return date.plusDays(1); - } - - private List<String> getRandomChunkOfLocations( List<String> allLocations ) - { - Collections.shuffle( allLocations ); - final int total = allLocations.size(); - // Including origin and destination - final int chunk = total > 6 ? 3 + new Random().nextInt( 5 ) : total; - return allLocations.subList( 0, chunk ); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java deleted file mode 100644 index c7b6484..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/GraphTraversalServiceImpl.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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.zest.sample.dcicargo.pathfinder_b.internal; - -import java.rmi.RemoteException; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import org.apache.zest.sample.dcicargo.pathfinder_b.api.GraphTraversalService; -import org.apache.zest.sample.dcicargo.pathfinder_b.api.TransitEdge; -import org.apache.zest.sample.dcicargo.pathfinder_b.api.TransitPath; - -public class GraphTraversalServiceImpl - implements GraphTraversalService -{ - private GraphDAO dao; - private Random random; - - public GraphTraversalServiceImpl( GraphDAO dao ) - { - this.dao = dao; - this.random = new Random(); - } - - // Combine existing voyages to create a route. - public List<TransitPath> findShortestPath( final LocalDate departureDate, - final String originUnLocode, - final String destinationUnLocode - ) - { - // Transit paths (itineraries) - final int candidateCount = getRandomNumberOfCandidates(); - final List<TransitPath> routeCandidates = new ArrayList<TransitPath>( candidateCount ); - - int maxTries = 50; - int tries = 0; - do - { - String expectedDeparture = originUnLocode; - LocalDate lastArrivalTime = departureDate; - - // Transit edges (itinerary legs) - final List<TransitEdge> routeEdges = new ArrayList<TransitEdge>(); - - // Avoid duplicate locations - final List<String> oldDepartures = new ArrayList<String>(); - - // Loop by depth - enabling chronological order - int depth = 0; - do - { - final List<TransitPath> voyages = getShuffledVoyages( dao.voyages() ); - - for( TransitPath voyage : voyages ) - { - if( depth >= voyage.getTransitEdges().size() ) - { - continue; - } - - final TransitEdge voyageEdge = voyage.getTransitEdges().get( depth ); - - final String departure = voyageEdge.getFromUnLocode(); - final String arrival = voyageEdge.getToUnLocode(); - final LocalDate departureTime = voyageEdge.getFromDate(); - final LocalDate arrivalTime = voyageEdge.getToDate(); - - boolean expectsDeparture = departure.equals( expectedDeparture ); - boolean uniqueDeparture = !oldDepartures.contains( departure ); - boolean uniqueArrival = !oldDepartures.contains( arrival ); - boolean afterLastArrivalTime = departureTime.isAfter( lastArrivalTime ); - - if( expectsDeparture && uniqueDeparture && uniqueArrival && afterLastArrivalTime ) - { - // Visited departure locations - oldDepartures.add( departure ); - - // Go with this carrier movement - routeEdges.add( voyageEdge ); - - // Current carrier movement destination will be origin of next movement - expectedDeparture = arrival; - lastArrivalTime = arrivalTime; - - // Go deeper to next edge in transit path (later dates) - break; - } - } - } - while( !expectedDeparture.equals( destinationUnLocode ) && depth++ < 10 ); - - // Satisfying routes with at least 2 legs (nextDeparture is the last arrival location) - if( expectedDeparture.equals( destinationUnLocode ) && routeEdges.size() > 1 ) - { - routeCandidates.add( new TransitPath( routeEdges ) ); - } - } - while( routeCandidates.size() < candidateCount && tries++ < maxTries ); - - return routeCandidates; - } - - private List<TransitPath> getShuffledVoyages( List<TransitPath> voyages ) - { - Collections.shuffle( voyages ); - return voyages; - } - - public List<TransitPath> getVoyages() - throws RemoteException - { - return dao.voyages(); - } - - private int getRandomNumberOfCandidates() - { - return 3 + random.nextInt( 3 ); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/package.html ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/package.html deleted file mode 100644 index 00de161..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/internal/package.html +++ /dev/null @@ -1,26 +0,0 @@ -<!-- - ~ 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. - ~ - ~ - --> -<html> -<body> -<p> - Internal parts of the pathfinder application. -</p> -</body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/package.html ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/package.html b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/package.html deleted file mode 100644 index 6329b87..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/pathfinder_b/package.html +++ /dev/null @@ -1,34 +0,0 @@ -<!-- - ~ 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. - ~ - ~ - --> -<html> -<body> -<p> - This is the pathfinder application context, which is separate from "our" application and context. - Our domain model with cargo, itinerary, handling event etc does not exist here. - The routing domain service implementation works against the API exposed by - this context. -</p> - -<p> - It is not related to the core application at all, and is only part of this source tree for - developer convenience. -</p> -</body> -</html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java ---------------------------------------------------------------------- diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java deleted file mode 100644 index 6e25291..0000000 --- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/DCISampleApplication_b.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.zest.sample.dcicargo.sample_b.bootstrap; - -import org.apache.wicket.ConverterLocator; -import org.apache.wicket.Page; -import org.apache.wicket.datetime.PatternDateConverter; -import org.apache.wicket.devutils.stateless.StatelessChecker; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.BookNewCargoPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.CargoDetailsPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.CargoListPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.ChangeDestinationPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.ReRouteCargoPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.booking.RouteCargoPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.handling.IncidentLoggingApplicationMockupPage; -import org.apache.zest.sample.dcicargo.sample_b.communication.web.tracking.TrackCargoPage; -import org.apache.zest.sample.dcicargo.sample_b.infrastructure.WicketZestApplication; -import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.tabs.TabsPanel; - -/** - * DCI Sample application instance - * - * A Wicket application backed by Zest. - */ -public class DCISampleApplication_b - extends WicketZestApplication -{ - public void wicketInit() - { - // Tabs and SEO urls - mountPages(); - - // Show/hide Ajax debugging - getDebugSettings().setDevelopmentUtilitiesEnabled( true ); - - // Check that components are stateless when required - getComponentPostOnBeforeRenderListeners().add( new StatelessChecker() ); - - // Show/hide wicket tags in html code - getMarkupSettings().setStripWicketTags( true ); - - // Default date format (we don't care for now about the hour of the day) - ( (ConverterLocator) getConverterLocator() ).set( java.util.Date.class, - new PatternDateConverter( "yyyy-MM-dd", true ) ); - } - - private void mountPages() - { - TabsPanel.registerTab( this, CargoListPage.class, "booking", "Booking and Routing" ); - TabsPanel.registerTab( this, TrackCargoPage.class, "tracking", "Tracking" ); - TabsPanel.registerTab( this, IncidentLoggingApplicationMockupPage.class, "handling", "Handling" ); - - mountPage( "/booking", CargoListPage.class ); - mountPage( "/booking/book-new-cargo", BookNewCargoPage.class ); - mountPage( "/booking/cargo", CargoDetailsPage.class ); - mountPage( "/booking/change-destination", ChangeDestinationPage.class ); - mountPage( "/booking/route-cargo", RouteCargoPage.class ); - mountPage( "/booking/re-route-cargo", ReRouteCargoPage.class ); - - mountPage( "/tracking", TrackCargoPage.class ); - - mountPage( "/register-handling-event", IncidentLoggingApplicationMockupPage.class ); - } - - public Class<? extends Page> getHomePage() - { - return CargoListPage.class; - } -} \ No newline at end of file
