You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2016/10/23 14:23:52 UTC

[11/28] zest-java git commit: ZEST-180, ZEST-186, ZEST-187, ZEST-188 Big Identity refactoring UnitOfWorkFactory is auto added to all modules that doesn't declare one IdentityGenerator is auto-added to all modules that deosn't declare one. Removed DCI/DDD

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/VisualizeApplicationStructure.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/VisualizeApplicationStructure.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/VisualizeApplicationStructure.java
deleted file mode 100644
index 391ae08..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/VisualizeApplicationStructure.java
+++ /dev/null
@@ -1,59 +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.zest.api.structure.ApplicationDescriptor;
-import org.apache.zest.bootstrap.Energy4Java;
-import org.apache.zest.envisage.Envisage;
-import org.apache.zest.sample.dcicargo.sample_b.bootstrap.assembly.Assembler;
-
-/**
- * Visualize the application assemblage structure.
- */
-public class VisualizeApplicationStructure
-{
-    public static void main( String[] args )
-        throws Exception
-    {
-        Energy4Java zest = new Energy4Java();
-        Assembler assembler = new Assembler();
-        ApplicationDescriptor applicationModel = zest.newApplicationModel( assembler );
-        applicationModel.newInstance( zest.spi() );
-
-        /*
-       * The Envisage Swing app visualizes the application assemblage structure.
-       *
-       * Tree view:
-       * - Click on elements to expand sub-elements.
-       * - Scroll to change font size.
-       * - Right click on viewer to re-size to fit window.
-       *
-       * Stacked view:
-       * - Scroll to zoom in/out of structure levels - might freeze though :-(
-       *
-       * Click on any element and see details of that element in the upper right pane.
-       *
-       * Pretty cool, eh?
-       * */
-        new Envisage().run( applicationModel );
-        int randomTimeoutMs = 18374140;
-        Thread.sleep( randomTimeoutMs );
-    }
-}
\ 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/assembly/Assembler.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java
deleted file mode 100644
index 6e3bf76..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/assembly/Assembler.java
+++ /dev/null
@@ -1,281 +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.assembly;
-
-import java.util.function.Function;
-import org.apache.zest.api.structure.Application;
-import org.apache.zest.api.structure.Module;
-import org.apache.zest.api.value.ValueSerialization;
-import org.apache.zest.bootstrap.ApplicationAssembler;
-import org.apache.zest.bootstrap.ApplicationAssembly;
-import org.apache.zest.bootstrap.ApplicationAssemblyFactory;
-import org.apache.zest.bootstrap.AssemblyException;
-import org.apache.zest.bootstrap.LayerAssembly;
-import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.entitystore.memory.MemoryEntityStoreService;
-import org.apache.zest.index.rdf.RdfIndexingEngineService;
-import org.apache.zest.library.rdf.entity.EntityStateSerializer;
-import org.apache.zest.library.rdf.entity.EntityTypeSerializer;
-import org.apache.zest.library.rdf.repository.MemoryRepositoryService;
-import org.apache.zest.sample.dcicargo.pathfinder_b.api.GraphTraversalService;
-import org.apache.zest.sample.dcicargo.pathfinder_b.internal.GraphDAO;
-import org.apache.zest.sample.dcicargo.pathfinder_b.internal.GraphTraversalServiceImpl;
-import org.apache.zest.sample.dcicargo.sample_b.bootstrap.DCISampleApplication_b;
-import org.apache.zest.sample.dcicargo.sample_b.bootstrap.sampledata.BaseDataService;
-import org.apache.zest.sample.dcicargo.sample_b.bootstrap.sampledata.SampleDataService;
-import org.apache.zest.sample.dcicargo.sample_b.communication.query.BookingQueries;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.ProcessHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.parsing.ParseHandlingEventData;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.parsing.dto.ParsedHandlingEventData;
-import org.apache.zest.sample.dcicargo.sample_b.context.rolemap.CargoRoleMap;
-import org.apache.zest.sample.dcicargo.sample_b.context.rolemap.CargosRoleMap;
-import org.apache.zest.sample.dcicargo.sample_b.context.rolemap.HandlingEventsRoleMap;
-import org.apache.zest.sample.dcicargo.sample_b.context.service.routing.RoutingService;
-import org.apache.zest.sample.dcicargo.sample_b.data.factory.RouteSpecificationFactoryService;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.RouteSpecification;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.Delivery;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.NextHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Leg;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.Location;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.UnLocode;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.tracking.TrackingId;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.CarrierMovement;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Schedule;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Voyage;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.VoyageNumber;
-import org.apache.zest.spi.uuid.UuidIdentityGeneratorService;
-import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerializationService;
-
-import static org.apache.zest.api.common.Visibility.application;
-import static org.apache.zest.api.structure.Application.Mode.development;
-
-/**
- * Zest assembly of the DCI Sample application (version B)
- *
- * A Zest application structure is declared by an assembly that defines which layers and modules
- * the application has and how they are allowed to depend on each other. Each layer could have it's
- * own assembly file in larger applications.
- *
- * The Zest assembly doesn't strictly map 1-1 to the directory hierarchy and the assembly
- * structures. An example is the Entities:
- *
- * Data objects (Entities and ValuesComposites) can be promoted to Role Players when they are
- * needed to play a Role in a Context. One Role Map is created for each Data object and it lists
- * Roles in different Contexts that the object can play. It then has knowledge about the Context
- * layer and therefore goes into the CONTEXT-RoleMap module.
- *
- * All other Date objects are candidates to play a role if needed by some context and they "stand by"
- * in the CONTEXT-RoleMapCandidates module. Note that there are still no "physical" upward dependencies
- * from the data package (containing entities and values) to layers above.
- *
- * TRY THIS:
- * Run VisualizeApplicationStructure to see a cool visualization of the assembly!
- */
-@SuppressWarnings( "unchecked" )
-public class Assembler
-    implements ApplicationAssembler
-{
-    @Override
-    public ApplicationAssembly assemble( ApplicationAssemblyFactory applicationFactory )
-        throws AssemblyException
-    {
-        // Application assembly
-        ApplicationAssembly assembly = applicationFactory.newApplicationAssembly();
-        assembly.setName( "DCI Sample (version B)" );
-        assembly.setVersion( "B.1.0" );
-        assembly.setMode( development );
-
-        // Layers (adding bottom-up - will be assembled in this order)
-        LayerAssembly infrastructureLayer = assembly.layer( "INFRASTRUCTURE" );
-        LayerAssembly dataLayer = assembly.layer( "DATA" );
-        LayerAssembly contextLayer = assembly.layer( "CONTEXT" );
-        LayerAssembly communicationLayer = assembly.layer( "COMMUNICATION" );
-        LayerAssembly bootstrapLayer = assembly.layer( "BOOTSTRAP" );
-
-        // Layer dependencies
-        bootstrapLayer.uses(
-            communicationLayer,
-            contextLayer,
-            dataLayer,
-            infrastructureLayer );
-
-        communicationLayer.uses(
-            contextLayer,
-            dataLayer,
-            infrastructureLayer );
-
-        contextLayer.uses(
-            dataLayer,
-            infrastructureLayer );
-
-        dataLayer.uses(
-            infrastructureLayer
-        );
-
-        // Assemble
-        assembleBootstrapLayer( bootstrapLayer );
-        assembleCommunicationLayer( communicationLayer );
-        assembleContextLayer( contextLayer );
-        assembleDataLayer( dataLayer );
-        assembleInfrastructureLayer( infrastructureLayer );
-
-        return assembly;
-    }
-
-    private void assembleBootstrapLayer( LayerAssembly bootstrapLayer )
-        throws AssemblyException
-    {
-        ModuleAssembly bootstrapModule = bootstrapLayer.module( "BOOTSTRAP-Bootstrap" );
-        bootstrapModule
-            .objects(
-                DCISampleApplication_b.class );
-
-        bootstrapModule
-            .addServices(
-                BaseDataService.class )
-            .instantiateOnStartup();
-
-        bootstrapModule
-            .addServices(
-                SampleDataService.class )
-            .instantiateOnStartup();
-    }
-
-    private void assembleCommunicationLayer( LayerAssembly communicationLayer )
-        throws AssemblyException
-    {
-        ModuleAssembly queryModule = communicationLayer.module( "COMMUNICATION-Query" );
-        queryModule
-            .values(
-                Cargo.class,
-                Location.class,
-                HandlingEvent.class,
-                Voyage.class );
-
-        queryModule
-            .transients(
-                BookingQueries.class )
-            .visibleIn( application );
-    }
-
-    private void assembleContextLayer( LayerAssembly contextLayer )
-        throws AssemblyException
-    {
-        ModuleAssembly roleMapModule = contextLayer.module( "CONTEXT-RoleMap" );
-        roleMapModule
-            .entities(
-                CargoRoleMap.class,
-                CargosRoleMap.class,
-                HandlingEventsRoleMap.class )
-            .visibleIn( application );
-
-        ModuleAssembly roleMapCandidatesModule = contextLayer.module( "CONTEXT-RoleMapCandidates" );
-        roleMapCandidatesModule
-            .entities(
-                HandlingEvent.class,
-                Location.class,
-                Voyage.class )
-            .visibleIn( application );
-
-        roleMapCandidatesModule
-            .values(
-                Itinerary.class )
-            .visibleIn( application );
-
-        ModuleAssembly interactionModule = contextLayer.module( "CONTEXT-Interaction" );
-        interactionModule
-            .transients(
-                ProcessHandlingEvent.class )
-            .visibleIn( application );
-
-        ModuleAssembly contextServiceModule = contextLayer.module( "CONTEXT-Service" );
-        contextServiceModule
-            .addServices(
-                ParseHandlingEventData.class,
-                RoutingService.class,
-                RouteSpecificationFactoryService.class )
-            .visibleIn( application );
-
-        contextServiceModule
-            .values(
-                ParsedHandlingEventData.class )
-            .visibleIn( application );
-    }
-
-    private void assembleDataLayer( LayerAssembly dataLayer )
-        throws AssemblyException
-    {
-        ModuleAssembly dataModule = dataLayer.module( "DATA-Structure" );
-        dataModule
-            .values(
-                TrackingId.class,
-                RouteSpecification.class,
-                Delivery.class,
-                NextHandlingEvent.class,
-                UnLocode.class,
-                Leg.class,
-                CarrierMovement.class,
-                Schedule.class,
-                VoyageNumber.class )
-            .visibleIn( application );
-    }
-
-    private void assembleInfrastructureLayer( LayerAssembly infrastructureLayer )
-        throws AssemblyException
-    {
-        ModuleAssembly serializationModule = infrastructureLayer.module( "INFRASTRUCTURE-Serialization" );
-        serializationModule
-            .services( OrgJsonValueSerializationService.class )
-            .taggedWith( ValueSerialization.Formats.JSON )
-            .setMetaInfo( (Function<Application, Module>) application -> application.findModule( "CONTEXT", "CONTEXT-RoleMap" ) )
-        .visibleIn( application );
-
-        ModuleAssembly indexingModule = infrastructureLayer.module( "INFRASTRUCTURE-Indexing" );
-        indexingModule
-            .objects(
-                EntityStateSerializer.class,
-                EntityTypeSerializer.class );
-
-        indexingModule
-            .services(
-                MemoryRepositoryService.class,
-                RdfIndexingEngineService.class )
-            .instantiateOnStartup()
-            .visibleIn( application );
-
-        ModuleAssembly entityStoreModule = infrastructureLayer.module( "INFRASTRUCTURE-EntityStore" );
-        entityStoreModule
-            .services(
-                MemoryEntityStoreService.class,
-                UuidIdentityGeneratorService.class )
-            .instantiateOnStartup()
-            .visibleIn( application );
-
-        ModuleAssembly externalServiceModule = infrastructureLayer.module( "INFRASTRUCTURE-ExternalService" );
-        externalServiceModule
-            .importedServices(
-                GraphTraversalService.class )
-            .setMetaInfo( new GraphTraversalServiceImpl( new GraphDAO() ) )
-            .visibleIn( application );
-    }
-}

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/sampledata/BaseData.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseData.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseData.java
deleted file mode 100644
index 08a9bb7..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseData.java
+++ /dev/null
@@ -1,196 +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.sampledata;
-
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneOffset;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.api.value.ValueBuilderFactory;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.parsing.dto.ParsedHandlingEventData;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.Delivery;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.NextHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.RoutingStatus;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.TransportStatus;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Leg;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.Location;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.UnLocode;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.CarrierMovement;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Schedule;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Voyage;
-
-/**
- * Test base class with shared data and factory methods.
- */
-public abstract class BaseData
-{
-    private static Random random = new Random();
-    protected UnLocode AUMEL;
-    protected UnLocode CNHGH;
-    protected UnLocode CNHKG;
-    protected UnLocode CNSHA;
-    protected UnLocode DEHAM;
-    protected UnLocode FIHEL;
-    protected UnLocode JNTKO;
-    protected UnLocode NLRTM;
-    protected UnLocode SEGOT;
-    protected UnLocode SESTO;
-    protected UnLocode SOMGQ;
-    protected UnLocode USCHI;
-    protected UnLocode USDAL;
-    protected UnLocode USNYC;
-    protected ValueBuilderFactory vbf;
-
-    protected BaseData( ValueBuilderFactory vbf )
-    {
-        this.vbf = vbf;
-    }
-
-    protected UnLocode unlocode( String unlocodeString )
-    {
-        ValueBuilder<UnLocode> unlocode = vbf.newValueBuilder( UnLocode.class );
-        unlocode.prototype().code().set( unlocodeString );
-        return unlocode.newInstance();
-    }
-
-    protected CarrierMovement carrierMovement( Location depLoc, Location arrLoc, LocalDate depDate, LocalDate arrDate )
-    {
-        ValueBuilder<CarrierMovement> carrierMovement = vbf.newValueBuilder( CarrierMovement.class );
-        carrierMovement.prototype().departureLocation().set( depLoc );
-        carrierMovement.prototype().arrivalLocation().set( arrLoc );
-        carrierMovement.prototype().departureDate().set( depDate );
-        carrierMovement.prototype().arrivalDate().set( arrDate );
-        return carrierMovement.newInstance();
-    }
-
-    protected Schedule schedule( CarrierMovement... carrierMovements )
-    {
-        ValueBuilder<Schedule> schedule = vbf.newValueBuilder( Schedule.class );
-        List<CarrierMovement> cm = new ArrayList<>();
-        cm.addAll( Arrays.asList( carrierMovements ) );
-        schedule.prototype().carrierMovements().set( cm );
-        return schedule.newInstance();
-    }
-
-    protected Leg leg( Voyage voyage, Location load, Location unload, LocalDate loadDate, LocalDate unloadDate )
-    {
-        ValueBuilder<Leg> leg = vbf.newValueBuilder( Leg.class );
-        leg.prototype().voyage().set( voyage );
-        leg.prototype().loadLocation().set( load );
-        leg.prototype().unloadLocation().set( unload );
-        leg.prototype().loadDate().set( loadDate );
-        leg.prototype().unloadDate().set( unloadDate );
-        return leg.newInstance();
-    }
-
-    protected Itinerary itinerary( Leg... legArray )
-    {
-        ValueBuilder<Itinerary> itinerary = vbf.newValueBuilder( Itinerary.class );
-        List<Leg> legs = new ArrayList<>();
-        legs.addAll( Arrays.asList( legArray ) );
-        itinerary.prototype().legs().set( legs );
-        return itinerary.newInstance();
-    }
-
-    protected Delivery delivery(
-        HandlingEvent lastHandlingEvent,
-        TransportStatus transportStatus,
-        Boolean isUnloadedAtDestination,
-        RoutingStatus routingStatus,
-        Boolean isMisdirected,
-        LocalDate eta,
-        Integer itineraryProgressIndex,
-        NextHandlingEvent nextHandlingEvent
-    )
-    {
-        ValueBuilder<Delivery> delivery = vbf.newValueBuilder( Delivery.class );
-        delivery.prototype().timestamp().set( Instant.now() );
-        delivery.prototype().lastHandlingEvent().set( lastHandlingEvent );
-        delivery.prototype().transportStatus().set( transportStatus );
-        delivery.prototype().isUnloadedAtDestination().set( isUnloadedAtDestination );
-        delivery.prototype().routingStatus().set( routingStatus );
-        delivery.prototype().isMisdirected().set( isMisdirected );
-        delivery.prototype().eta().set( eta );
-        delivery.prototype().itineraryProgressIndex().set( itineraryProgressIndex );
-        delivery.prototype().nextHandlingEvent().set( nextHandlingEvent );
-        return delivery.newInstance();
-    }
-
-    // Delivery with only mandatory values
-    protected Delivery delivery( LocalDate date,
-                                 TransportStatus transportStatus,
-                                 RoutingStatus routingStatus,
-                                 Integer itineraryProgressIndex
-    )
-    {
-        ValueBuilder<Delivery> delivery = vbf.newValueBuilder( Delivery.class );
-        delivery.prototype().timestamp().set( date.atStartOfDay().toInstant( ZoneOffset.UTC ) );
-        delivery.prototype().transportStatus().set( transportStatus );
-        delivery.prototype().routingStatus().set( routingStatus );
-        delivery.prototype().itineraryProgressIndex().set( itineraryProgressIndex );
-        return delivery.newInstance();
-    }
-
-    protected NextHandlingEvent nextHandlingEvent( HandlingEventType handlingEventType,
-                                                   Location location,
-                                                   LocalDate time,
-                                                   Voyage voyage
-    )
-    {
-        ValueBuilder<NextHandlingEvent> nextHandlingEvent = vbf.newValueBuilder( NextHandlingEvent.class );
-        nextHandlingEvent.prototype().handlingEventType().set( handlingEventType );
-        nextHandlingEvent.prototype().location().set( location );
-        nextHandlingEvent.prototype().date().set( time );
-        nextHandlingEvent.prototype().voyage().set( voyage );
-        return nextHandlingEvent.newInstance();
-    }
-
-    protected ParsedHandlingEventData parsedHandlingEventData( LocalDate registrationDate,
-                                                               LocalDate completionDate,
-                                                               String trackingIdString,
-                                                               HandlingEventType handlingEventType,
-                                                               String unLocodeString,
-                                                               String voyageNumberString
-    )
-        throws Exception
-    {
-        ValueBuilder<ParsedHandlingEventData> attempt = vbf.newValueBuilder( ParsedHandlingEventData.class );
-        attempt.prototype().registrationDate().set( registrationDate );
-        attempt.prototype().completionDate().set( completionDate );
-        attempt.prototype().trackingIdString().set( trackingIdString );
-        attempt.prototype().handlingEventType().set( handlingEventType );
-        attempt.prototype().unLocodeString().set( unLocodeString );
-        attempt.prototype().voyageNumberString().set( voyageNumberString );
-
-        return attempt.newInstance();
-    }
-
-    protected static LocalDate day( int days )
-    {
-        return LocalDate.now().plusDays( days );
-    }
-}

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/sampledata/BaseDataService.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseDataService.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseDataService.java
deleted file mode 100644
index 479326f..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/BaseDataService.java
+++ /dev/null
@@ -1,192 +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.sampledata;
-
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.zest.api.activation.ActivatorAdapter;
-import org.apache.zest.api.activation.Activators;
-import org.apache.zest.api.entity.EntityBuilder;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.service.ServiceComposite;
-import org.apache.zest.api.service.ServiceReference;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.unitofwork.UnitOfWorkCompletionException;
-import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.api.value.ValueBuilderFactory;
-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;
-import org.apache.zest.sample.dcicargo.sample_b.data.aggregateroot.CargoAggregateRoot;
-import org.apache.zest.sample.dcicargo.sample_b.data.aggregateroot.HandlingEventAggregateRoot;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.Location;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.UnLocode;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.CarrierMovement;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Schedule;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Voyage;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.VoyageNumber;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.zest.api.usecase.UsecaseBuilder.newUsecase;
-
-/**
- * Create basic sample data on startup of application.
- */
-@Mixins( BaseDataService.Mixin.class )
-@Activators( BaseDataService.Activator.class )
-public interface BaseDataService
-    extends ServiceComposite
-{
-
-    void createBaseData()
-        throws Exception;
-
-    class Activator
-        extends ActivatorAdapter<ServiceReference<BaseDataService>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<BaseDataService> activated )
-            throws Exception
-        {
-            activated.get().createBaseData();
-        }
-    }
-
-    public abstract class Mixin
-        extends BaseData
-        implements BaseDataService
-    {
-        @Structure
-        UnitOfWorkFactory uowf;
-
-        @Service
-        GraphTraversalService graphTraversalService;
-
-        private static final Logger logger = LoggerFactory.getLogger( BaseDataService.class );
-
-        protected Mixin( @Structure ValueBuilderFactory vbf )
-        {
-            super( vbf );
-        }
-
-        @Override
-        public void createBaseData()
-            throws Exception
-        {
-            logger.debug( "CREATING BASIC DATA..." );
-
-            UnitOfWork uow = uowf.newUnitOfWork( newUsecase( "Create base data" ) );
-
-            // Create locations
-            location( unlocode( "AUMEL" ), "Melbourne" );
-            location( unlocode( "CNHGH" ), "Hangzhou" );
-            location( unlocode( "CNHKG" ), "Hongkong" );
-            location( unlocode( "CNSHA" ), "Shanghai" );
-            location( unlocode( "DEHAM" ), "Hamburg" );
-            location( unlocode( "FIHEL" ), "Helsinki" );
-            location( unlocode( "JNTKO" ), "Tokyo" );
-            location( unlocode( "NLRTM" ), "Rotterdam" );
-            location( unlocode( "SEGOT" ), "Gothenburg" );
-            location( unlocode( "SESTO" ), "Stockholm" );
-            location( unlocode( "SOMGQ" ), "Mogadishu" );
-            location( unlocode( "USCHI" ), "Chicago" );
-            location( unlocode( "USDAL" ), "Dallas" );
-            location( unlocode( "USNYC" ), "New York" );
-
-            // Create voyages
-            try
-            {
-                for( TransitPath voyagePath : graphTraversalService.getVoyages() )
-                {
-                    String voyageNumber = null;
-                    List<CarrierMovement> carrierMovements = new ArrayList<>();
-                    for( TransitEdge voyageEdge : voyagePath.getTransitEdges() )
-                    {
-                        voyageNumber = voyageEdge.getVoyageNumber();
-                        Location from = uow.get( Location.class, voyageEdge.getFromUnLocode() );
-                        Location to = uow.get( Location.class, voyageEdge.getToUnLocode() );
-                        carrierMovements.add( carrierMovement( from, to, voyageEdge.getFromDate(), voyageEdge.getToDate() ) );
-                    }
-
-                    ValueBuilder<Schedule> schedule = vbf.newValueBuilder( Schedule.class );
-                    schedule.prototype().carrierMovements().set( carrierMovements );
-                    voyage( voyageNumber, schedule.newInstance() );
-                }
-            }
-            catch( RemoteException e )
-            {
-                e.printStackTrace();
-            }
-
-            // Cargo and HandlingEvent aggregate roots
-            uow.newEntity( CargoAggregateRoot.class, CargoAggregateRoot.CARGOS_ID );
-            uow.newEntity( HandlingEventAggregateRoot.class, HandlingEventAggregateRoot.HANDLING_EVENTS_ID );
-
-            try
-            {
-                uow.complete();
-                logger.debug( "BASIC DATA CREATED" );
-            }
-            catch( UnitOfWorkCompletionException ex )
-            {
-                uow.discard();
-                logger.error( "UNABLE TO CREATE BASIC DATA" );
-                throw ex;
-            }
-        }
-
-        protected UnLocode unlocode( String unlocodeString )
-        {
-            ValueBuilder<UnLocode> unlocode = vbf.newValueBuilder( UnLocode.class );
-            unlocode.prototype().code().set( unlocodeString );
-            return unlocode.newInstance();
-        }
-
-        protected Location location( UnLocode unlocode, String locationStr )
-        {
-            UnitOfWork uow = uowf.currentUnitOfWork();
-            EntityBuilder<Location> location = uow.newEntityBuilder( Location.class, unlocode.code().get() );
-            location.instance().unLocode().set( unlocode );
-            location.instance().name().set( locationStr );
-            return location.newInstance();
-        }
-
-        protected Voyage voyage( String voyageNumberStr, Schedule schedule )
-        {
-            UnitOfWork uow = uowf.currentUnitOfWork();
-            EntityBuilder<Voyage> voyage = uow.newEntityBuilder( Voyage.class, voyageNumberStr );
-
-            // VoyageNumber
-            ValueBuilder<VoyageNumber> voyageNumber = vbf.newValueBuilder( VoyageNumber.class );
-            voyageNumber.prototype().number().set( voyageNumberStr );
-            voyage.instance().voyageNumber().set( voyageNumber.newInstance() );
-
-            // Schedule
-            voyage.instance().schedule().set( schedule );
-            return voyage.newInstance();
-        }
-    }
-}
\ 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/sampledata/SampleDataService.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/SampleDataService.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/SampleDataService.java
deleted file mode 100644
index aee65fd..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/bootstrap/sampledata/SampleDataService.java
+++ /dev/null
@@ -1,424 +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.sampledata;
-
-import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.UUID;
-import org.apache.zest.api.activation.ActivatorAdapter;
-import org.apache.zest.api.activation.Activators;
-import org.apache.zest.api.composite.TransientBuilderFactory;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.query.Query;
-import org.apache.zest.api.query.QueryBuilder;
-import org.apache.zest.api.query.QueryBuilderFactory;
-import org.apache.zest.api.service.ServiceComposite;
-import org.apache.zest.api.service.ServiceReference;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
-import org.apache.zest.api.usecase.Usecase;
-import org.apache.zest.api.usecase.UsecaseBuilder;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.api.value.ValueBuilderFactory;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.booking.BookNewCargo;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.booking.routing.AssignCargoToRoute;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.ProcessHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.inspection.event.InspectUnhandledCargo;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.handling.parsing.dto.ParsedHandlingEventData;
-import org.apache.zest.sample.dcicargo.sample_b.context.service.routing.RoutingService;
-import org.apache.zest.sample.dcicargo.sample_b.data.aggregateroot.CargoAggregateRoot;
-import org.apache.zest.sample.dcicargo.sample_b.data.factory.RouteSpecificationFactoryService;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.RouteSpecification;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.delivery.NextHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.Location;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.CarrierMovement;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Voyage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.apache.zest.api.usecase.UsecaseBuilder.newUsecase;
-import static org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType.CLAIM;
-import static org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType.CUSTOMS;
-import static org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType.LOAD;
-import static org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType.RECEIVE;
-import static org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType.UNLOAD;
-import static org.apache.zest.sample.dcicargo.sample_b.infrastructure.dci.Context.prepareContextBaseClass;
-
-/**
- * Create sample cargos in different delivery stages.
- *
- * Add more cases if needed in the loop below.
- */
-@Mixins( SampleDataService.Mixin.class )
-@Activators( SampleDataService.Activator.class )
-public interface SampleDataService
-    extends ServiceComposite
-{
-    void insertSampleData()
-        throws Exception;
-
-    class Activator
-        extends ActivatorAdapter<ServiceReference<SampleDataService>>
-    {
-
-        @Override
-        public void afterActivation( ServiceReference<SampleDataService> activated )
-            throws Exception
-        {
-            activated.get().insertSampleData();
-        }
-    }
-
-    abstract class Mixin
-        implements SampleDataService
-    {
-        @Structure
-        UnitOfWorkFactory uowf;
-
-        @Structure
-        ValueBuilderFactory vbf;
-
-        @Structure
-        QueryBuilderFactory qbf;
-
-        @Structure
-        TransientBuilderFactory tbf;
-
-        @Service
-        RoutingService routingService;
-
-        @Service
-        BaseDataService baseDataService;
-
-        @Service
-        RouteSpecificationFactoryService routeSpecFactory;
-
-        private static final Logger logger = LoggerFactory.getLogger( SampleDataService.class );
-
-        @Override
-        public void insertSampleData()
-            throws Exception
-        {
-            prepareContextBaseClass( uowf, vbf );
-
-            logger.info( "######  CREATING SAMPLE DATA...  ##########################################" );
-
-            // Create cargos
-            populateRandomCargos( 12 );
-
-            // Handle cargos
-            UnitOfWork uow = uowf.newUnitOfWork( newUsecase( "Create sample data" ) );
-            try
-            {
-                int i = 11; // starting at 11 for sortable tracking id prefix in lists
-                QueryBuilder<Cargo> qb = qbf.newQueryBuilder( Cargo.class );
-                for( Cargo cargo : uow.newQuery( qb ) )
-
-                {
-                    final String trackingId = cargo.trackingId().get().id().get();
-                    final RouteSpecification routeSpec = cargo.routeSpecification().get();
-                    routeSpec.print();
-
-                    NextHandlingEvent nextEvent = null;
-                    LocalDate date = null;
-                    String port = null;
-                    String voyageNumber = null;
-                    Voyage voyage;
-                    HandlingEventType type = null;
-                    String wrongPort = null;
-                    String wrongVoyage = null;
-
-                    // First cargo with id 11 is not routed
-
-                    // ROUTE
-                    if( i > 11 )
-                    {
-                        final List<Itinerary> routes = routingService.fetchRoutesForSpecification( routeSpec );
-                        final Itinerary itinerary = routes.get( 0 );
-                        new AssignCargoToRoute( cargo, itinerary ).assign();
-                    }
-
-                    // MISROUTE: Route specification not satisfied with itinerary
-                    if( i == 12 )
-                    {
-                        Location origin = routeSpec.origin().get();
-                        Location dest = routeSpec.destination().get();
-                        Location badDest = null;
-                        Query<Location> locations = uow.newQuery( qbf.newQueryBuilder( Location.class ) );
-                        for( Location loc : locations )
-                        {
-                            if( !origin.equals( loc ) && !dest.equals( loc ) )
-                            {
-                                badDest = loc;
-                                break;
-                            }
-                        }
-
-                        final RouteSpecification unsatisfiedRouteSpec =
-                            routeSpecFactory.build( origin, badDest, LocalDate.now(), LocalDate.now().plusDays( 25 ) );
-                        cargo.routeSpecification().set( unsatisfiedRouteSpec );
-
-                        new InspectUnhandledCargo( cargo ).inspect();
-                    }
-
-                    // RECEIVE
-                    if( i > 13 )
-                    {
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        port = nextEvent.location().get().getCode();
-                        final LocalDate mockTime = LocalDate.now();
-                        registerEvent( mockTime, mockTime, trackingId, RECEIVE, port, null );
-                    }
-
-                    // MISDIRECT: LOAD onto wrong carrier
-                    if( i == 15 )
-                    {
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        date = nextEvent.date().get();
-                        port = nextEvent.location().get().getCode();
-                        voyageNumber = nextEvent.voyage().get().voyageNumber().get().number().get();
-
-                        // Find earliest wrong carrier movement (voyage) with same departure location
-                        final Query<Voyage> voyages = uowf.currentUnitOfWork()
-                            .newQuery( qbf.newQueryBuilder( Voyage.class ) );
-                        int depth = 0;
-                        do
-                        {
-                            for( Voyage voy : voyages )
-                            {
-                                if( voy.voyageNumber().get().number().get().equals( voyageNumber ) )
-                                {
-                                    continue;
-                                }
-
-                                if( depth >= voy.schedule().get().carrierMovements().get().size() )
-                                {
-                                    continue;
-                                }
-
-                                // Carrier movement at current depth
-                                final CarrierMovement movement = voy.schedule()
-                                    .get()
-                                    .carrierMovements()
-                                    .get()
-                                    .get( depth );
-                                final boolean goingFromSamePort = movement.departureLocation()
-                                    .get()
-                                    .getCode()
-                                    .equals( port );
-                                final boolean notGoingToDestination = !movement.arrivalLocation()
-                                    .get()
-                                    .equals( routeSpec.destination().get() );
-
-                                if( goingFromSamePort && notGoingToDestination )
-                                {
-                                    wrongVoyage = voy.voyageNumber().get().number().get();
-                                    break;
-                                }
-                            }
-                        }
-                        while( wrongVoyage == null && depth++ < 10 );
-
-                        registerEvent( date, date, trackingId, LOAD, port, wrongVoyage );
-                    }
-
-                    // LOAD
-                    if( i > 15 )
-                    {
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        date = nextEvent.date().get();
-                        port = nextEvent.location().get().getCode();
-                        voyageNumber = nextEvent.voyage().get().voyageNumber().get().number().get();
-                        registerEvent( date, date, trackingId, LOAD, port, voyageNumber );
-
-                        // Cargo is now on board carrier
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        date = nextEvent.date().get();
-                        type = nextEvent.handlingEventType().get();
-                        port = nextEvent.location().get().getCode();
-                        voyageNumber = nextEvent.voyage().get().voyageNumber().get().number().get();
-                    }
-
-                    // MISDIRECT: UNLOAD from carrier in wrong location
-                    if( i == 17 )
-                    {
-                        voyage = uow.get( Voyage.class, voyageNumber );
-                        for( CarrierMovement movement : voyage.schedule().get().carrierMovements().get() )
-                        {
-                            final String arrivalPort = movement.arrivalLocation().get().getCode();
-
-                            // Take first voyage with different arrival location
-                            if( !arrivalPort.equals( port ) )
-                            {
-                                wrongPort = movement.arrivalLocation().get().unLocode().get().code().get();
-                                break;
-                            }
-                        }
-                        registerEvent( date, date, trackingId, UNLOAD, wrongPort, voyageNumber );
-                    }
-
-                    // UNLOAD
-                    if( i > 17 )
-                    {
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        date = nextEvent.date().get();
-                        port = nextEvent.location().get().getCode();
-                        voyageNumber = nextEvent.voyage().get().voyageNumber().get().number().get();
-                        registerEvent( date, date, trackingId, UNLOAD, port, voyageNumber );
-
-                        // Cargo is now in midpoint location
-                        nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                        date = nextEvent.date().get();
-                        type = nextEvent.handlingEventType().get();
-                        port = nextEvent.location().get().getCode();
-                    }
-
-                    // CUSTOMS: Customs handling in midpoint location (doesn't affect misdirection status)
-                    if( i == 19 )
-                    {
-                        registerEvent( date, date, trackingId, CUSTOMS, port, null );
-                    }
-
-                    // MISDIRECT: Unexpected claim before reaching destination
-                    if( i == 20 )
-                    {
-                        registerEvent( date, date, trackingId, CLAIM, port, null );
-                    }
-
-                    // Complete all LOAD/UNLOADS
-                    if( i > 20 )
-                    {
-                        do
-                        {
-                            //noinspection ConstantConditions
-                            voyageNumber = nextEvent.voyage().get().voyageNumber().get().number().get();
-                            registerEvent( date, date, trackingId, type, port, voyageNumber );
-
-                            nextEvent = cargo.delivery().get().nextHandlingEvent().get();
-                            date = nextEvent.date().get();
-                            port = nextEvent.location().get().getCode();
-                            type = nextEvent.handlingEventType().get();
-                        }
-                        while( type != HandlingEventType.CLAIM );
-                    }
-
-                    // CLAIM at destination - this ends the life cycle of the cargo delivery
-                    if( i == 22 )
-                    {
-                        registerEvent( date, date, trackingId, CLAIM, port, null );
-                    }
-
-                    // Add more cases if needed...
-                    i++;
-                }
-
-                uow.complete();
-            }
-            catch( Exception e )
-            {
-                uow.discard();
-                logger.error( "Problem handling cargos: " + e.getMessage() );
-                throw e;
-            }
-
-            logger.info( "######  SAMPLE DATA CREATED  ##############################################" );
-        }
-
-        private void populateRandomCargos( int numberOfCargos )
-        {
-            Usecase usecase = UsecaseBuilder.newUsecase( "Populate Random Cargos" );
-            UnitOfWork uow = uowf.newUnitOfWork( usecase );
-
-            CargoAggregateRoot cargos = uow.get( CargoAggregateRoot.class, CargoAggregateRoot.CARGOS_ID );
-
-            Query<Location> allLocations = uow.newQuery( qbf.newQueryBuilder( Location.class ) );
-            int locationSize = (int) allLocations.count();
-
-            // Make array for selection of location with random index
-            final List<Location> locationList = new ArrayList<>();
-            for( Location location : allLocations )
-            {
-                locationList.add( location );
-            }
-
-            Location origin;
-            Location destination;
-            Random random = new Random();
-            LocalDate deadline;
-            String uuid;
-            String id;
-            try
-            {
-                for( int i = 0; i < numberOfCargos; i++ )
-                {
-                    origin = locationList.get( random.nextInt( locationSize ) );
-
-                    // Find destination different from origin
-                    do
-                    {
-                        destination = locationList.get( random.nextInt( locationSize ) );
-                    }
-                    while( destination.equals( origin ) );
-
-                    deadline = LocalDate.now().plusDays( 35 + random.nextInt( 10 ) );
-
-                    // Build sortable random tracking ids
-                    uuid = UUID.randomUUID().toString().toUpperCase();
-                    id = ( i + 11 ) + "-" + uuid.substring( 0, uuid.indexOf( "-" ) );
-
-                    new BookNewCargo( cargos, origin, destination, deadline ).withTrackingId( id );
-                }
-                uow.complete();
-            }
-            catch( Exception e )
-            {
-                uow.discard();
-                logger.error( "Problem booking a new cargo: " + e.getMessage() );
-            }
-        }
-
-        private void registerEvent( LocalDate registrationDate,
-                                    LocalDate completionDate,
-                                    String trackingIdString,
-                                    HandlingEventType handlingEventType,
-                                    String unLocodeString,
-                                    String voyageNumberString
-        )
-            throws Exception
-        {
-            ValueBuilder<ParsedHandlingEventData> event = vbf.newValueBuilder( ParsedHandlingEventData.class );
-            event.prototype().registrationDate().set( registrationDate );
-            event.prototype().completionDate().set( completionDate );
-            event.prototype().trackingIdString().set( trackingIdString );
-            event.prototype().handlingEventType().set( handlingEventType );
-            event.prototype().unLocodeString().set( unLocodeString );
-            event.prototype().voyageNumberString().set( voyageNumberString );
-
-            tbf.newTransient( ProcessHandlingEvent.class ).register( event.newInstance() );
-        }
-    }
-}

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/communication/query/BookingQueries.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/BookingQueries.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/BookingQueries.java
deleted file mode 100644
index 633b0ef..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/BookingQueries.java
+++ /dev/null
@@ -1,87 +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.communication.query;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.wicket.model.IModel;
-import org.apache.zest.api.composite.TransientComposite;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.unitofwork.UnitOfWorkFactory;
-import org.apache.zest.sample.dcicargo.sample_b.context.service.routing.RoutingService;
-import org.apache.zest.sample.dcicargo.sample_b.context.service.routing.exception.FoundNoRoutesException;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.RouteSpecification;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.JSONModel;
-
-/**
- * Booking queries
- *
- * Implemented as a Zest composite since we can then conveniently get the routing service injected.
- * We could choose to implement all query classes like this too.
- *
- * Used by the communication layer only. Can change according to ui needs.
- */
-@Mixins( BookingQueries.Mixin.class )
-public interface BookingQueries
-    extends TransientComposite
-{
-    List<IModel<Itinerary>> routeCandidates( String trackingIdString )
-        throws FoundNoRoutesException;
-
-    List<IModel<Itinerary>> routeCandidates( RouteSpecification routeSpec )
-        throws FoundNoRoutesException;
-
-    abstract class Mixin
-        implements BookingQueries
-    {
-        @Structure
-        UnitOfWorkFactory uowf;
-
-        @Service
-        RoutingService routingService;
-
-        public List<IModel<Itinerary>> routeCandidates( final String trackingIdString )
-            throws FoundNoRoutesException
-        {
-            Cargo cargo = uowf.currentUnitOfWork().get( Cargo.class, trackingIdString );
-            RouteSpecification routeSpec = cargo.routeSpecification().get();
-
-            return routeCandidates( routeSpec );
-        }
-
-        public List<IModel<Itinerary>> routeCandidates( final RouteSpecification routeSpec )
-            throws FoundNoRoutesException
-        {
-            List<Itinerary> routes = routingService.fetchRoutesForSpecification( routeSpec );
-
-            List<IModel<Itinerary>> modelList = new ArrayList<IModel<Itinerary>>();
-            for( Itinerary itinerary : routes )
-            {
-                modelList.add( JSONModel.of( itinerary ) );
-            }
-
-            return modelList;
-        }
-    }
-}

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/communication/query/CommonQueries.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/CommonQueries.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/CommonQueries.java
deleted file mode 100644
index 0b61115..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/CommonQueries.java
+++ /dev/null
@@ -1,76 +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.communication.query;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.wicket.model.IModel;
-import org.apache.zest.api.query.Query;
-import org.apache.zest.api.query.QueryBuilder;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.location.Location;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.EntityModel;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.Queries;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.QueryModel;
-
-import static org.apache.zest.api.query.QueryExpressions.orderBy;
-import static org.apache.zest.api.query.QueryExpressions.templateFor;
-
-/**
- * Common queries
- *
- * Queries shared by Contexts in different packages.
- *
- * Used by the communication layer only. Can change freely according to presentation needs.
- */
-public class CommonQueries extends Queries
-{
-    public IModel<Cargo> cargo( String trackingId )
-    {
-        return EntityModel.of( Cargo.class, trackingId, Cargo.class );
-    }
-
-    public IModel<List<Cargo>> cargoList()
-    {
-        return new QueryModel<Cargo>( Cargo.class )
-        {
-            public Query<Cargo> getQuery()
-            {
-                QueryBuilder<Cargo> qb = qbf.newQueryBuilder( Cargo.class );
-                return uowf.currentUnitOfWork().newQuery( qb )
-                    .orderBy( orderBy( templateFor( Cargo.class ).trackingId().get().id() ) );
-            }
-        };
-    }
-
-    public List<String> unLocodes()
-    {
-        QueryBuilder<Location> qb = qbf.newQueryBuilder( Location.class );
-        Query<Location> locations = uowf.currentUnitOfWork().newQuery( qb )
-            .orderBy( orderBy( templateFor( Location.class ).unLocode().get().code() ) );
-        List<String> unLocodeList = new ArrayList<String>();
-        for( Location location : locations )
-        {
-            unLocodeList.add( location.getCode() );
-        }
-
-        return unLocodeList;
-    }
-}
\ 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/communication/query/HandlingQueries.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/HandlingQueries.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/HandlingQueries.java
deleted file mode 100644
index 3eb9ea2..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/HandlingQueries.java
+++ /dev/null
@@ -1,77 +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.communication.query;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.zest.api.query.Query;
-import org.apache.zest.api.query.QueryBuilder;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEventType;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.voyage.Voyage;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.Queries;
-
-import static org.apache.zest.api.query.QueryExpressions.orderBy;
-import static org.apache.zest.api.query.QueryExpressions.templateFor;
-
-/**
- * Handling queries
- *
- * Used by the communication layer only. Can change freely according to presentation needs.
- */
-public class HandlingQueries extends Queries
-{
-    public List<String> voyages()
-    {
-        QueryBuilder<Voyage> qb = qbf.newQueryBuilder( Voyage.class );
-        Query<Voyage> voyages = uowf.currentUnitOfWork().newQuery( qb )
-            .orderBy( orderBy( templateFor( Voyage.class ).voyageNumber() ) );
-
-        List<String> voyageList = new ArrayList<String>();
-        for( Voyage voyage : voyages )
-        {
-            voyageList.add( voyage.voyageNumber().get().number().get() );
-        }
-        return voyageList;
-    }
-
-    public List<String> cargoIds()
-    {
-        QueryBuilder<Cargo> qb = qbf.newQueryBuilder( Cargo.class );
-        Query<Cargo> cargos = uowf.currentUnitOfWork().newQuery( qb )
-            .orderBy( orderBy( templateFor( Cargo.class ).trackingId().get().id() ) );
-        List<String> cargoList = new ArrayList<>();
-        for( Cargo cargo : cargos )
-        {
-            cargoList.add( cargo.trackingId().get().id().get() );
-        }
-        return cargoList;
-    }
-
-    public List<String> eventTypes()
-    {
-        List<String> eventTypes = new ArrayList<>();
-        for( HandlingEventType eventType : HandlingEventType.values() )
-        {
-            eventTypes.add( eventType.name() );
-        }
-        return eventTypes;
-    }
-}
\ 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/communication/query/TrackingQueries.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/TrackingQueries.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/TrackingQueries.java
deleted file mode 100644
index fce2557..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/query/TrackingQueries.java
+++ /dev/null
@@ -1,75 +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.communication.query;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.wicket.model.IModel;
-import org.apache.zest.api.query.Query;
-import org.apache.zest.api.query.QueryBuilder;
-import org.apache.zest.api.query.QueryExpressions;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.handling.HandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.Queries;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.model.QueryModel;
-
-import static org.apache.zest.api.query.QueryExpressions.*;
-
-/**
- * Tracking queries
- *
- * Used by the communication layer only. Can change freely according to presentation needs.
- */
-public class TrackingQueries extends Queries
-{
-    public List<String> routedCargos()
-    {
-        Cargo cargoEntity = templateFor( Cargo.class );
-
-        QueryBuilder<Cargo> qb = qbf.newQueryBuilder( Cargo.class )
-            .where( isNotNull( cargoEntity.itinerary() ) );
-        Query<Cargo> cargos = uowf.currentUnitOfWork().newQuery( qb )
-            .orderBy( orderBy( cargoEntity.trackingId().get().id() ) );
-
-        List<String> cargoList = new ArrayList<String>();
-        for( Cargo cargo : cargos )
-        {
-            cargoList.add( cargo.trackingId().get().id().get() );
-        }
-
-        return cargoList;
-    }
-
-    public IModel<List<HandlingEvent>> events( final String trackingIdString )
-    {
-        return new QueryModel<HandlingEvent>( HandlingEvent.class )
-        {
-            public Query<HandlingEvent> getQuery()
-            {
-                HandlingEvent eventTemplate = templateFor( HandlingEvent.class );
-
-                QueryBuilder<HandlingEvent> qb = qbf.newQueryBuilder( HandlingEvent.class )
-                    .where( QueryExpressions.eq( eventTemplate.trackingId().get().id(), trackingIdString ) );
-                return uowf.currentUnitOfWork().newQuery( qb )
-                    .orderBy( orderBy( eventTemplate.completionDate() ) );
-            }
-        };
-    }
-}
\ 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/communication/web/BasePage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/BasePage.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/BasePage.java
deleted file mode 100644
index 76ee4b8..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/BasePage.java
+++ /dev/null
@@ -1,78 +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.communication.web;
-
-import com.google.code.joliratools.StatelessAjaxFallbackLink;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.markup.html.panel.Fragment;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.WicketZestApplication;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.page.BaseWebPage;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.tabs.TabsPanel;
-//import org.wicketstuff.stateless.StatelessAjaxFallbackLink;
-
-/**
- * Base Wicket page of the DCI Sample application
- */
-public class BasePage extends BaseWebPage
-{
-    private final Link toggleLinks;
-    private static boolean showLInks = false;
-    private Fragment links = new Fragment( "links", "linksFragment", this );
-
-    public BasePage( String activeTab )
-    {
-        this( activeTab, null );
-    }
-
-    public BasePage( String activeTab, PageParameters pageParameters )
-    {
-        super( pageParameters );
-
-        toggleLinks = new StatelessAjaxFallbackLink<Void>( "toggleLinks" )
-        {
-            @Override
-            public void onClick( AjaxRequestTarget target )
-            {
-                // Open/close triangle of this toggle link
-                add( new AttributeModifier( "class", Model.of( showLInks ? "closed" : "open" ) ) );
-
-                // Show/hide links
-                links.setVisible( showLInks = !showLInks );
-
-                // Update with ajax if browser allows
-                if( target != null )
-                {
-                    target.add( links, toggleLinks );
-                }
-            }
-        };
-        add( toggleLinks );
-        add( links.setOutputMarkupPlaceholderTag( true ).setVisible( false ) );
-
-        add( new Label( "version", ( (WicketZestApplication) getApplication() ).appVersion() ) );
-
-        add( new TabsPanel( activeTab ) );
-    }
-}

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/communication/web/booking/BookNewCargoPage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.java
deleted file mode 100644
index 7c19a97..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookNewCargoPage.java
+++ /dev/null
@@ -1,152 +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.communication.web.booking;
-
-import java.time.LocalDate;
-import java.util.List;
-import org.apache.wicket.Session;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
-import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.zest.sample.dcicargo.sample_b.communication.query.CommonQueries;
-import org.apache.zest.sample.dcicargo.sample_b.context.interaction.booking.BookNewCargo;
-import org.apache.zest.sample.dcicargo.sample_b.data.structure.tracking.TrackingId;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.form.AbstractForm;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.form.DateTextFieldWithPicker;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.form.SelectorInForm;
-import org.apache.zest.sample.dcicargo.sample_b.infrastructure.wicket.prevnext.PrevNext;
-
-/**
- * Book new cargo
- *
- * An example of UI validation:
- * - you can't choose equal locations
- * - earliest deadline you can choose from the date picker is tomorrow (we could set any date that the domain wants).
- *
- * More elaborate validation rules could be enforced in a real domain to avoid even touching
- * the backend with invalid data (of course we would still need backend validation).
- */
-public class BookNewCargoPage extends BookingBasePage
-{
-    public BookNewCargoPage()
-    {
-        add( new BookNewCargoForm() );
-    }
-
-    private final class BookNewCargoForm extends AbstractForm<Void>
-    {
-        // Set by Wicket property resolvers:
-        private String origin, destination;
-        private LocalDate deadline;
-
-        public BookNewCargoForm()
-        {
-            List<String> locations = new CommonQueries().unLocodes();
-
-            final FeedbackPanel feedback = new FeedbackPanel( "feedback" );
-            add( feedback.setOutputMarkupId( true ) );
-
-            final SelectorInForm originSelector = new SelectorInForm(
-                "origin", "Origin", locations, this, "destination" );
-            originSelector.setRequired( true );
-
-            final ComponentFeedbackPanel originFeedback = new ComponentFeedbackPanel(
-                "originFeedback", originSelector );
-            add( originFeedback.setOutputMarkupId( true ) );
-
-            final SelectorInForm destinationSelector = new SelectorInForm(
-                "destination", "Destinatin", locations, this, "origin" );
-            destinationSelector.setRequired( true );
-
-            final ComponentFeedbackPanel destinationFeedback = new ComponentFeedbackPanel(
-                "destinationFeedback", destinationSelector );
-            add( destinationFeedback.setOutputMarkupId( true ) );
-
-            // Disable equal locations
-            originSelector.add( new AjaxFormComponentUpdatingBehavior( "onchange" )
-            {
-                @Override
-                protected void onUpdate( AjaxRequestTarget target )
-                {
-                    // Exclude origin in destination drop down
-                    target.add( originSelector, originFeedback, destinationSelector );
-                    focusFirstError( target );
-                }
-            } );
-
-            destinationSelector.add( new AjaxFormComponentUpdatingBehavior( "onchange" )
-            {
-                @Override
-                protected void onUpdate( AjaxRequestTarget target )
-                {
-                    // Exclude destination in origin drop down
-                    target.add( destinationSelector, destinationFeedback, originSelector );
-                    focusFirstError( target );
-                }
-            } );
-
-            // Deadline
-            final DateTextFieldWithPicker deadlineField = new DateTextFieldWithPicker( "deadline", "Arrival deadline", this );
-            deadlineField.earliestDate( LocalDate.now().plusDays( 1 ) );
-
-            final ComponentFeedbackPanel deadlineFeedback = new ComponentFeedbackPanel(
-                "deadlineFeedback", deadlineField );
-            add( deadlineFeedback.setOutputMarkupId( true ) );
-
-            add( originSelector, destinationSelector, deadlineField );
-
-            add( new AjaxFallbackButton( "book", this )
-            {
-                @Override
-                protected void onSubmit( AjaxRequestTarget target, Form<?> form )
-                {
-                    try
-                    {
-                        // Perform use case
-                        TrackingId trackingId = new BookNewCargo( origin, destination, deadline ).getTrackingId();
-
-                        // Add new tracking id to list in session
-                        PrevNext.addId( Session.get(), trackingId.id().get() );
-
-                        // Show created cargo
-                        setResponsePage( CargoDetailsPage.class, new PageParameters().set( 0, trackingId.id().get() ) );
-                    }
-                    catch( Exception e )
-                    {
-                        logger.warn( "Problem booking a new cargo: " + e.getMessage() );
-                        feedback.error( e.getMessage() );
-                        target.add( feedback );
-                    }
-                }
-
-                @Override
-                protected void onError( final AjaxRequestTarget target, Form<?> form )
-                {
-                    target.add( originFeedback, destinationFeedback, deadlineFeedback );
-                    focusFirstError( target );
-                }
-            } );
-        }
-    }
-}
\ 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/communication/web/booking/BookingBasePage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.java b/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.java
deleted file mode 100644
index 3fed83b..0000000
--- a/samples/dci-cargo/dcisample_b/src/main/java/org/apache/zest/sample/dcicargo/sample_b/communication/web/booking/BookingBasePage.java
+++ /dev/null
@@ -1,39 +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.communication.web.booking;
-
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.zest.sample.dcicargo.sample_b.communication.web.BasePage;
-
-/**
- * Booking base page - to control the selected tab
- */
-public class BookingBasePage extends BasePage
-{
-    public BookingBasePage()
-    {
-        super( "booking" );
-    }
-
-    public BookingBasePage( PageParameters pageParameters )
-    {
-        super( "booking", pageParameters );
-    }
-}
\ No newline at end of file