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:58 UTC

[17/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_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.java
deleted file mode 100644
index e435cdb..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/ChangeDestinationPage.java
+++ /dev/null
@@ -1,108 +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.communication.web.booking;
-
-import java.util.List;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
-import org.apache.wicket.markup.html.basic.Label;
-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_a.communication.query.CommonQueries;
-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.infrastructure.wicket.form.AbstractForm;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.form.SelectorInForm;
-
-/**
- * Change destination of Cargo
- */
-public class ChangeDestinationPage extends BookingBasePage
-{
-    public ChangeDestinationPage( PageParameters parameters )
-    {
-        String trackingId = parameters.get( 0 ).toString();
-        add( new Label( "trackingId", trackingId ) );
-        add( new CargoEditForm( trackingId ) );
-    }
-
-    private class CargoEditForm extends AbstractForm<Void>
-    {
-        private String trackingId; // Set by Wicket property resolver
-        private String origin, destination, oldDestination;
-
-        public CargoEditForm( final String trackingId )
-        {
-            CommonQueries fetch = new CommonQueries();
-            Cargo cargo = fetch.cargo( trackingId ).getObject();
-            List<String> locations = fetch.unLocodes();
-
-            origin = cargo.origin().get().getCode();
-            oldDestination = destination = cargo.routeSpecification().get().destination().get().getCode();
-
-            final FeedbackPanel feedback = new FeedbackPanel( "usecaseFeedback" );
-            final SelectorInForm destinationSelector = new SelectorInForm(
-                "destination", "Destination", locations, this, "origin" );
-            final ComponentFeedbackPanel destinationFeedback = new ComponentFeedbackPanel(
-                "destinationFeedback", destinationSelector.setRequired( true ) );
-
-            add( feedback.setOutputMarkupId( true ) );
-            add( new Label( "origin", origin ) );
-            add( new Label( "destination", destination ) );
-            add( destinationFeedback.setOutputMarkupId( true ) );
-            add( destinationSelector );
-            add( new AjaxFallbackButton( "submit", this )
-            {
-                @Override
-                protected void onSubmit( AjaxRequestTarget target, Form<?> form )
-                {
-                    try
-                    {
-                        if( oldDestination.equals( destination ) )
-                        {
-                            throw new IllegalArgumentException( "Please select a new destination." );
-                        }
-
-                        // Perform use case
-                        new BookNewCargo( trackingId ).changeDestination( destination );
-
-                        // Show updated cargo
-                        setResponsePage( CargoDetailsPage.class, new PageParameters().set( 0, trackingId ) );
-                    }
-                    catch( Exception e )
-                    {
-                        logger.warn( "Problem changing destination of cargo " + trackingId + ": " + e.getMessage() );
-                        feedback.error( e.getMessage() );
-                        target.add( feedback );
-                    }
-                }
-
-                @Override
-                protected void onError( final AjaxRequestTarget target, Form<?> form )
-                {
-                    target.add( destinationFeedback );
-                    target.focusComponent( destinationSelector );
-                }
-            } );
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.java
deleted file mode 100644
index be29b41..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RouteCargoPage.java
+++ /dev/null
@@ -1,69 +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.communication.web.booking;
-
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.BookingQueries;
-import org.apache.zest.sample.dcicargo.sample_a.context.support.FoundNoRoutesException;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary;
-
-/**
- * Re-route page - presents a list of possible routes a cargo can take that the user can choose from.
- *
- * Each route candidate is presented by a {@link RoutePanel}.
- */
-public class RouteCargoPage extends BookingBasePage
-{
-    private FeedbackPanel feedback = new FeedbackPanel( "feedback" );
-
-    public RouteCargoPage( PageParameters parameters )
-    {
-        final String trackingId = parameters.get( 0 ).toString();
-
-        add( new Label( "trackingId", trackingId ) );
-
-        add( new FeedbackPanel( "feedback" ) );
-
-//        List<IModel<Itinerary>> routes = null;
-        try
-        {
-            add( new ListView<IModel<Itinerary>>( "routes", query( BookingQueries.class ).routeCandidates( trackingId ) )
-            {
-                @Override
-                protected void populateItem( ListItem<IModel<Itinerary>> item )
-                {
-                    item.add( new RoutePanel( "route", trackingId, item.getModelObject(), item.getIndex() + 1 ) );
-                }
-            } );
-        }
-        catch( FoundNoRoutesException e )
-        {
-            error( e.getMessage() );
-
-            add( new WebMarkupContainer( "routes" ).add( new Label( "route" ) ) );
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.java
deleted file mode 100644
index 7ad9d14..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/booking/RoutePanel.java
+++ /dev/null
@@ -1,118 +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.communication.web.booking;
-
-import java.util.List;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BookNewCargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Leg;
-
-import static java.time.ZoneOffset.UTC;
-import static java.util.Date.from;
-
-/**
- * Route Panel - shows a suggested route a Cargo can take.
- *
- * If the user chooses this candidate route, all route data (a value object) is attached by the BookNewCargo context
- * as an Itinerary to the Cargo. To see the result, the user is then redirected to the details page of the cargo.
- */
-public class RoutePanel extends Panel
-{
-    public RoutePanel( String id,
-                       final String trackingIdString,
-                       final IModel<Itinerary> candidateRouteModel,
-                       int index
-    )
-    {
-        super( id, candidateRouteModel );
-        Itinerary itinerary = candidateRouteModel.getObject();
-
-        IModel<String> header = Model.of( "Route candidate " + index + " - duration: " + itinerary.days() + " days." );
-        add( new Label( "routeHeader", header ) );
-
-        final FeedbackPanel routeFeedback = new FeedbackPanel( "routeFeedback" );
-        add( routeFeedback.setOutputMarkupId( true ) );
-
-        IModel<List<Leg>> legListModel = new LoadableDetachableModel<List<Leg>>()
-        {
-            @Override
-            protected List<Leg> load()
-            {
-                return candidateRouteModel.getObject().legs().get();
-            }
-        };
-
-        add( new ListView<Leg>( "legs", legListModel )
-        {
-            @Override
-            protected void populateItem( ListItem<Leg> item )
-            {
-                Leg leg = item.getModelObject();
-                item.add( new Label( "voyage", leg.voyage().get().toString() ),
-                          new Label( "loadLocation", leg.loadLocation().get().getCode() ),
-                          new Label( "loadDate", new Model<>( from( leg.loadDate().get().atStartOfDay().toInstant( UTC ) ) ) ),
-                          new Label( "unloadLocation", leg.unloadLocation().get().getCode() ),
-                          new Label( "unloadDate", new Model<>( from( leg.unloadDate().get().atStartOfDay().toInstant( UTC ) ) ) )
-                );
-            }
-        } );
-
-        Form form = new Form<Void>( "form" );
-        form.add( new AjaxFallbackButton( "assign", form )
-        {
-            @Override
-            protected void onSubmit( AjaxRequestTarget target, Form<?> form )
-            {
-                try
-                {
-                    // The candidate route is sent as the chosen Itinerary
-                    new BookNewCargo( trackingIdString, candidateRouteModel.getObject() ).assignCargoToRoute();
-                    setResponsePage( CargoDetailsPage.class, new PageParameters().set( 0, trackingIdString ) );
-                }
-                catch( Exception e )
-                {
-                    String msg = "Problem assigning this route to cargo: " + e.getMessage();
-                    routeFeedback.error( msg );
-                    target.add( routeFeedback );
-                }
-            }
-
-            @Override
-            protected void onError( final AjaxRequestTarget target, Form<?> form )
-            {
-                routeFeedback.error( "Unexpected error - all routes are expected to be valid." );
-                target.add( routeFeedback );
-            }
-        } );
-        add( form );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.java
deleted file mode 100644
index e522a93..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/handling/RegisterHandlingEventPage.java
+++ /dev/null
@@ -1,146 +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.communication.web.handling;
-
-import java.time.LocalDate;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.util.value.ValueMap;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.CommonQueries;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.HandlingQueries;
-import org.apache.zest.sample.dcicargo.sample_a.communication.web.BasePage;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.handling.RegisterHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.form.AbstractForm;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.form.DateTextFieldWithPicker;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.form.SelectorInForm;
-
-/**
- * Register Handling Events
- *
- * Interface used by various authorities to register handling events for cargos. This would be a
- * separate interface not coupled to the booking system, but for testing convenience it is integrated
- * with Booking and Tracking.
- *
- * Tip: try open the Event Registration window side-by-side to a Cargo details window for a specific cargo.
- * Then register events for that cargo and here and update the details window to see the progress. You can
- * also then in the details window see what event is expected next...
- */
-public class RegisterHandlingEventPage extends BasePage
-{
-    public RegisterHandlingEventPage()
-    {
-        super( "handling" ); // Selects the Event Registration tab
-        add( new RegisterHandlingEventForm() );
-    }
-
-    private final class RegisterHandlingEventForm extends AbstractForm<Void>
-    {
-        // Set by Wicket property resolvers:
-        private LocalDate completionDate;
-        private String trackingId, unLocode, voyageNumber, eventType;
-
-        private String lastSubmittedData;
-
-        public RegisterHandlingEventForm()
-        {
-            final FeedbackPanel feedback = new FeedbackPanel( "feedback" );
-            add( feedback.setOutputMarkupId( true ) );
-
-            final DateTextFieldWithPicker completionDateInput = new DateTextFieldWithPicker( "completionDate", "Completion", this );
-            completionDateInput.earliestDate( LocalDate.now() );
-
-            HandlingQueries fetch = new HandlingQueries();
-            add( completionDateInput.setLabel( Model.of( "Completion" ) ) );
-            add( new SelectorInForm( "trackingId", "Tracking Id", fetch.cargoIds(), this ).setRequired( true ) );
-            add( new SelectorInForm( "eventType", "Event Type", fetch.eventTypes(), this ).setRequired( true ) );
-            add( new SelectorInForm( "unLocode", "Location", new CommonQueries().unLocodes(), this ).setRequired( true ) );
-            add( new SelectorInForm( "voyageNumber", "Voyage number", fetch.voyages(), this ) );
-
-            add( new AjaxFallbackButton( "register", this )
-            {
-                @Override
-                protected void onSubmit( AjaxRequestTarget target, Form<?> form )
-                {
-                    try
-                    {
-                        // We want to allow making multiple _unique_ handling event registrations
-                        if( sameDataIsSubmitted() )
-                        {
-                            throw new Exception( "Can't re-submit the same data." );
-                        }
-
-                        // Perform use case
-                        new RegisterHandlingEvent(
-                            LocalDate.now(), completionDate, trackingId, eventType, unLocode, voyageNumber ).register();
-
-                        // We could redirect to Details, but it's more fun to update details in a separate
-                        // window to follow the successive handling event registrations you make...
-//                        setResponsePage( CargoDetails.class, new PageParameters().set( 0, trackingId ) );
-
-                        ValueMap map = new ValueMap();
-                        map.put( "type", eventType );
-                        map.put( "location", unLocode );
-                        if( voyageNumber != null )
-                        {
-                            map.put( "voyage", voyageNumber );
-                        }
-                        String msg = new StringResourceModel(
-                            "handlingEvent.${type}", this, new Model<>( map ) ).getObject();
-
-                        feedback.info( "Registered handling event for cargo '" + trackingId + "': " + msg );
-                        target.add( feedback );
-                    }
-                    catch( Exception e )
-                    {
-                        logger.warn( "Problem registering handling event: " + e.getMessage() );
-                        feedback.error( e.getMessage() );
-                        target.add( feedback );
-                    }
-                }
-
-                @Override
-                protected void onError( final AjaxRequestTarget target, Form<?> form )
-                {
-                    target.add( feedback );
-                    focusFirstError( target );
-                }
-            } );
-        }
-
-        private boolean sameDataIsSubmitted()
-        {
-            String submittedData = completionDate.toString() + trackingId + unLocode + voyageNumber + eventType;
-
-            if( submittedData.equals( lastSubmittedData ) )
-            {
-                return true;
-            }
-
-            // Valid new data submitted
-            lastSubmittedData = submittedData;
-
-            return false;
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.java
deleted file mode 100644
index 5aa441f..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/HandlingHistoryPanel.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.sample_a.communication.web.tracking;
-
-import java.util.List;
-import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.devutils.stateless.StatelessComponent;
-import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.util.value.ValueMap;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.TrackingQueries;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.color.ErrorColor;
-
-/**
- * Handling history - a table list of handling events
- *
- * A tracking id string is passed in to retrieve all events matching that cargo.
- */
-@StatelessComponent
-public class HandlingHistoryPanel extends Panel
-{
-    public HandlingHistoryPanel( String id, final IModel<Cargo> cargoModel, String trackingId )
-    {
-        super( id );
-
-        IModel<List<HandlingEvent>> handlingEventsModel = new TrackingQueries().events( trackingId );
-
-        add( new ListView<HandlingEvent>( "handlingEvents", handlingEventsModel )
-        {
-            @Override
-            protected void populateItem( ListItem<HandlingEvent> item )
-            {
-                HandlingEvent event = item.getModelObject();
-                Boolean isLast = item.getIndex() == getList().size() - 1;
-                Boolean isMisdirected = cargoModel.getObject().delivery().get().isMisdirected().get();
-
-                // Status icon
-                IModel iconName = Model.of( isLast && isMisdirected ? "cross.png" : "tick.png" );
-                item.add( new WebMarkupContainer( "onTrackIcon" ).add( new AttributeAppender( "src", iconName, "" ) ) );
-
-                // Date
-                item.add( new Label( "completion", new Model<>( event.completionDate().get() ) ) );
-
-                // Event description (data substitution in strings from HandlingHistoryPanel.properties)
-                ValueMap map = new ValueMap();
-                map.put( "type", event.handlingEventType().get().name() );
-                map.put( "location", event.location().get().getString() );
-                if( event.voyage().get() != null )
-                {
-                    map.put( "voyage", event.voyage().get().voyageNumber().get().number().get() );
-                }
-                IModel text = new StringResourceModel( "handlingEvent.${type}", this, new Model<>( map ) );
-                item.add( new Label( "event", text )
-                              .add( new ErrorColor( isLast && isMisdirected ) )
-                              .setEscapeModelStrings( false ) );
-            }
-        } );
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.java
deleted file mode 100644
index 77091e4..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/NextHandlingEventPanel.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.sample_a.communication.web.tracking;
-
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.devutils.stateless.StatelessComponent;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.util.value.ValueMap;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.delivery.ExpectedHandlingEvent;
-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.location.Location;
-
-/**
- * Next expected handling event
- *
- * Quite some logic to render 1 line of information!
- */
-@StatelessComponent
-public class NextHandlingEventPanel extends Panel
-{
-    public NextHandlingEventPanel( String id, IModel<Cargo> cargoModel )
-    {
-        super( id );
-
-        ValueMap map = new ValueMap();
-        Label label = new Label( "text", new StringResourceModel(
-            "expectedEvent.${expectedEvent}", this, new Model<>( map ) ) );
-        add( label );
-
-        Cargo cargo = cargoModel.getObject();
-        Location destination = cargo.routeSpecification().get().destination().get();
-
-        if( cargo.itinerary().get() == null )
-        {
-            map.put( "expectedEvent", "ROUTE" );
-            return;
-        }
-
-        HandlingEvent previousEvent = cargo.delivery().get().lastHandlingEvent().get();
-        if( previousEvent == null )
-        {
-            map.put( "expectedEvent", "RECEIVE" );
-            map.put( "location", cargo.routeSpecification().get().origin().get().getString() );
-            return;
-        }
-
-        Location lastLocation = previousEvent.location().get();
-        if( previousEvent.handlingEventType().get() == HandlingEventType.CLAIM && lastLocation == destination )
-        {
-            map.put( "expectedEvent", "END_OF_CYCLE" );
-            map.put( "location", destination.getString() );
-            label.add( new AttributeModifier( "class", "correctColor" ) );
-            return;
-        }
-
-        ExpectedHandlingEvent nextEvent = cargo.delivery().get().nextExpectedHandlingEvent().get();
-        if( nextEvent == null )
-        {
-            map.put( "expectedEvent", "UNKNOWN" );
-            label.add( new AttributeModifier( "class", "errorColor" ) );
-            return;
-        }
-
-        map.put( "expectedEvent", nextEvent.handlingEventType().get().name() );
-        map.put( "location", nextEvent.location().get().getString() );
-
-        if( nextEvent.date() != null )
-        {
-            map.put( "time", nextEvent.date().get().toString() );
-        }
-
-        if( nextEvent.voyage().get() != null )
-        {
-            map.put( "voyage", nextEvent.voyage().get().voyageNumber().get().number().get() );
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.java
deleted file mode 100644
index e891be1..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/communication/web/tracking/TrackCargoPage.java
+++ /dev/null
@@ -1,201 +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.communication.web.tracking;
-
-import java.time.LocalDate;
-import java.util.List;
-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.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
-import org.apache.wicket.markup.html.panel.Fragment;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.model.StringResourceModel;
-import org.apache.wicket.util.value.ValueMap;
-import org.apache.zest.api.unitofwork.NoSuchEntityException;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.CommonQueries;
-import org.apache.zest.sample.dcicargo.sample_a.communication.query.TrackingQueries;
-import org.apache.zest.sample.dcicargo.sample_a.communication.web.BasePage;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo;
-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.infrastructure.wicket.form.AbstractForm;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.wicket.form.SelectorInForm;
-
-/**
- * Track a cargo
- *
- * For convenience during testing, routed (non-received) cargos can be chosen from the dropdown list.
- */
-public class TrackCargoPage extends BasePage
-{
-    public TrackCargoPage()
-    {
-        super( "tracking" ); // Selects the Tracking tab
-        add( new TrackingForm() );
-    }
-
-    private final class TrackingForm extends AbstractForm<Void>
-    {
-        private String trackingId;
-
-        @SuppressWarnings( "unused" )   // Set by Wicket property resolver
-        private String selectedTrackingId;
-
-        private TextField<String> trackingIdInput;
-        private SelectorInForm selectedTrackingIdSelector;
-
-        private FeedbackPanel feedback = new FeedbackPanel( "feedback" );
-        private Fragment statusFragment = new Fragment( "status", "statusFragment", new WebMarkupContainer( "mock" ) );
-
-        private TrackingForm()
-        {
-            // Manual input
-            trackingIdInput = new TextField<>( "trackingId", new PropertyModel<String>( this, "trackingId" ) );
-            add( trackingIdInput.setRequired( true ).setOutputMarkupId( true ) );
-
-            // Submit button
-            add( new AjaxFallbackButton( "track", this )
-            {
-                @Override
-                protected void onSubmit( AjaxRequestTarget target, Form<?> form )
-                {
-                    updateStatusFragment( target );
-                }
-
-                @Override
-                protected void onError( final AjaxRequestTarget target, Form<?> form )
-                {
-                    target.add( feedback, trackingIdInput, selectedTrackingIdSelector, statusFragment.setVisible( false ) );
-                }
-            } );
-
-            // Drop down selector (for convenience when testing)
-            List<String> cargoIds = new TrackingQueries().routedCargos();
-            add( selectedTrackingIdSelector = new SelectorInForm(
-                "selectedTrackingId", "Selected Tracking id", cargoIds, this ) );
-            selectedTrackingIdSelector.add( new AjaxFormComponentUpdatingBehavior( "onchange" )
-            {
-                @Override
-                protected void onUpdate( AjaxRequestTarget target )
-                {
-                    trackingId = selectedTrackingId;
-                    updateStatusFragment( target );
-                }
-            } );
-
-            add( feedback.setOutputMarkupId( true ) );
-            add( statusFragment.setOutputMarkupId( true ).setOutputMarkupPlaceholderTag( true ).setVisible( false ) );
-        }
-
-        private void updateStatusFragment( final AjaxRequestTarget target )
-        {
-            try
-            {
-                IModel<Cargo> cargoModel = new CommonQueries().cargo( trackingId );
-                statusFragment = (Fragment) statusFragment.replaceWith( new StatusFragment( cargoModel, false ) );
-                target.add( feedback, trackingIdInput, selectedTrackingIdSelector, statusFragment.setVisible( true ) );
-            }
-            catch( NoSuchEntityException e )
-            {
-                e.printStackTrace();
-                error( "Cargo '" + trackingId + "' wasn't found in the system. Please check the tracking number." );
-                target.add( feedback, trackingIdInput, selectedTrackingIdSelector, statusFragment.setVisible( false ) );
-            }
-            catch( Exception e )
-            {
-                e.printStackTrace();
-                error( "Problem retrieving status for cargo '" + trackingId + "': " + e.getMessage() );
-                target.add( feedback, trackingIdInput, selectedTrackingIdSelector, statusFragment.setVisible( false ) );
-            }
-        }
-
-        private class StatusFragment extends Fragment
-        {
-            StatusFragment( IModel<Cargo> cargoModel, Boolean visible )
-            {
-                super( "status", "statusFragment", TrackingForm.this );
-                setVisible( visible );
-
-                Cargo cargo = cargoModel.getObject();
-
-                // Status ----------------------------------------------------------------------
-                ValueMap map = new ValueMap();
-                map.put( "status", cargo.delivery().get().transportStatus().get().name() );
-                map.put( "trackingId", trackingId );
-                HandlingEvent lastEvent = cargo.delivery().get().lastHandlingEvent().get();
-                if( lastEvent != null )
-                {
-                    String voyageString = lastEvent.voyage().get() != null ?
-                                          lastEvent.voyage()
-                                              .get()
-                                              .voyageNumber()
-                                              .get()
-                                              .number()
-                                              .get() : "UNKNOWN_VOYAGE";
-                    map.put( "voyage", voyageString );
-                    map.put( "location", lastEvent.location().get().getString() );
-                }
-                else
-                {
-                    map.put( "voyage", "UNKNOWN_VOYAGE" );
-                    map.put( "location", cargo.origin().get().getString() );
-                }
-                add( new Label( "transportStatus", new StringResourceModel(
-                    "transportStatus.${status}", this, new Model<>( map ) ) ) );
-
-                // ETA ----------------------------------------------------------------------
-                String destination = cargo.routeSpecification().get().destination().get().getString();
-                LocalDate eta = cargo.delivery().get().eta().get();
-                String etaString = eta == null ? "?" : eta.toString();
-                add( new Label( "eta", new StringResourceModel(
-                    "eta", this, null, Model.of( destination ), Model.of( etaString ) ) ) );
-
-                // Warning/Notifier ----------------------------------------------------------------------
-                add( new WebMarkupContainer( "isMisdirected" ).setVisible( cargo.delivery()
-                                                                               .get()
-                                                                               .isMisdirected()
-                                                                               .get() ) );
-                add( new WebMarkupContainer( "isClaimed" ).setVisible(
-                    !cargo.delivery().get().isMisdirected().get()
-                    && cargo.delivery().get().isUnloadedAtDestination().get()
-                    && lastEvent != null
-                    && lastEvent.handlingEventType().get() == HandlingEventType.CLAIM
-                ) );
-
-                // Handling history ----------------------------------------------------------------------
-                if( cargo.delivery().get().lastHandlingEvent().get() == null )
-                {
-                    add( new Label( "handlingHistoryPanel" ) );
-                }
-                else
-                {
-                    add( new HandlingHistoryPanel( "handlingHistoryPanel", cargoModel, trackingId ) );
-                }
-            }
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargoRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargoRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargoRoleMap.java
deleted file mode 100644
index 8f713f7..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargoRoleMap.java
+++ /dev/null
@@ -1,31 +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.rolemap;
-
-import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BookNewCargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargo;
-
-/**
- * Cargo Role Map
- */
-public interface CargoRoleMap extends BookNewCargo.RoutingFacadeRole, EntityComposite, Cargo
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargosRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargosRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargosRoleMap.java
deleted file mode 100644
index 51cdcd4..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/CargosRoleMap.java
+++ /dev/null
@@ -1,31 +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.rolemap;
-
-import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BookNewCargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.Cargos;
-
-/**
- * Cargos Role Map
- */
-public interface CargosRoleMap extends BookNewCargo.CargoFactoryRole, EntityComposite, Cargos
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventRoleMap.java
deleted file mode 100644
index e88f204..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventRoleMap.java
+++ /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.
- *
- *
- */
-package org.apache.zest.sample.dcicargo.sample_a.context.rolemap;
-
-import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BuildDeliverySnapshot;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.handling.InspectCargo;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvent;
-
-/**
- * Handling Event Role Map
- */
-public interface HandlingEventRoleMap extends BuildDeliverySnapshot.HandlingEventRole,
-                                              InspectCargo.CargoInspectorRole,
-                                              EntityComposite, HandlingEvent
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventsRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventsRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventsRoleMap.java
deleted file mode 100644
index 637c871..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/HandlingEventsRoleMap.java
+++ /dev/null
@@ -1,32 +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.rolemap;
-
-import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.handling.RegisterHandlingEvent;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.handling.HandlingEvents;
-
-/**
- * Handling Events Role Map
- */
-public interface HandlingEventsRoleMap extends RegisterHandlingEvent.HandlingEventFactoryRole,
-                                               EntityComposite, HandlingEvents
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/ItineraryRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/ItineraryRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/ItineraryRoleMap.java
deleted file mode 100644
index 915aed8..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/ItineraryRoleMap.java
+++ /dev/null
@@ -1,36 +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.rolemap;
-
-import org.apache.zest.api.value.ValueComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BuildDeliverySnapshot;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.itinerary.Itinerary;
-
-/**
- * Itinerary Role Map
- *
- * Note that this is a Value Composite (and not an entity) capable of playing different Roles.
- */
-public interface ItineraryRoleMap
-    extends ValueComposite,
-            Itinerary,
-            BuildDeliverySnapshot.ItineraryRole
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/RouteSpecificationRoleMap.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/RouteSpecificationRoleMap.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/RouteSpecificationRoleMap.java
deleted file mode 100644
index e231fd1..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/rolemap/RouteSpecificationRoleMap.java
+++ /dev/null
@@ -1,36 +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.rolemap;
-
-import org.apache.zest.api.value.ValueComposite;
-import org.apache.zest.sample.dcicargo.sample_a.context.shipping.booking.BuildDeliverySnapshot;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.cargo.RouteSpecification;
-
-/**
- * Route Specification Role Map
- *
- * Note that this is a Value Composite (and not an entity) capable of playing different Roles.
- */
-public interface RouteSpecificationRoleMap
-    extends ValueComposite,
-            RouteSpecification,
-            BuildDeliverySnapshot.FactoryRole
-{
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/103c59cb/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BookNewCargo.java
----------------------------------------------------------------------
diff --git a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BookNewCargo.java b/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BookNewCargo.java
deleted file mode 100644
index d57593d..0000000
--- a/samples/dci-cargo/dcisample_a/src/main/java/org/apache/zest/sample/dcicargo/sample_a/context/shipping/booking/BookNewCargo.java
+++ /dev/null
@@ -1,253 +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.util.List;
-import org.apache.zest.api.common.Optional;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.value.ValueBuilder;
-import org.apache.zest.api.value.ValueBuilderFactory;
-import org.apache.zest.sample.dcicargo.sample_a.context.support.FoundNoRoutesException;
-import org.apache.zest.sample.dcicargo.sample_a.context.support.RoutingService;
-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.itinerary.Itinerary;
-import org.apache.zest.sample.dcicargo.sample_a.data.shipping.location.Location;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.dci.Context;
-import org.apache.zest.sample.dcicargo.sample_a.infrastructure.dci.RoleMixin;
-
-/**
- * Book New Cargo use case
- */
-public class BookNewCargo extends Context
-{
-    // ROLES ---------------------------------------------------------------------
-
-    // Methodful Roles
-    private CargoFactoryRole cargoFactory;
-    private RoutingFacadeRole routingFacade;
-
-    // Methodless Roles
-    private Location origin;
-    private Location destination;
-    private LocalDate arrivalDeadline;
-    private Itinerary itinerary;
-
-    // CONTEXT CONSTRUCTORS ------------------------------------------------------
-
-    public BookNewCargo( Cargos cargos,
-                         Location origin,
-                         Location destination,
-                         LocalDate arrivalDeadline
-    )
-        throws Exception
-    {
-        cargoFactory = rolePlayer( CargoFactoryRole.class, cargos );
-        this.origin = origin;
-        this.destination = destination;
-        this.arrivalDeadline = arrivalDeadline;
-    }
-
-    public BookNewCargo( Cargo cargo )
-    {
-        routingFacade = rolePlayer( RoutingFacadeRole.class, cargo );
-    }
-
-    public BookNewCargo( Cargo cargo, Itinerary itinerary )
-    {
-        routingFacade = rolePlayer( RoutingFacadeRole.class, cargo );
-        this.itinerary = itinerary;
-    }
-
-    // Constructor proxies for communication layer
-
-    public BookNewCargo( String originId, String destinationId, LocalDate deadline )
-        throws Exception
-    {
-        this( loadEntity( Cargos.class, Cargos.CARGOS_ID ),
-              loadEntity( Location.class, originId ),
-              loadEntity( Location.class, destinationId ),
-              deadline );
-    }
-
-    public BookNewCargo( String trackingIdString )
-    {
-        this( loadEntity( Cargo.class, trackingIdString ) );
-    }
-
-    public BookNewCargo( String trackingIdString, Itinerary itinerary )
-    {
-        this( loadEntity( Cargo.class, trackingIdString ), itinerary );
-    }
-
-    // INTERACTIONS --------------------------------------------------------------
-
-    public TrackingId book()
-    {
-        return cargoFactory.createCargo( null );
-    }
-
-    public TrackingId createCargo( String trackingIdString )
-    {
-        return cargoFactory.createCargo( trackingIdString );
-    }
-
-    public void changeDestination( String destination )
-    {
-        routingFacade.changeDestination( loadEntity( Location.class, destination ) );
-    }
-
-    public List<Itinerary> routeCandidates()
-        throws FoundNoRoutesException
-    {
-        return routingFacade.routeCandidates();
-    }
-
-    public void assignCargoToRoute()
-    {
-        routingFacade.assignCargoToRoute();
-    }
-
-    // METHODFUL ROLE IMPLEMENTATIONS --------------------------------------------
-
-    @Mixins( CargoFactoryRole.Mixin.class )
-    public interface CargoFactoryRole
-    {
-        void setContext( BookNewCargo context );
-
-        TrackingId createCargo( @Optional String trackingIdString );
-
-        class Mixin
-            extends RoleMixin<BookNewCargo>
-            implements CargoFactoryRole
-        {
-            @This
-            Cargos cargos;
-
-            public TrackingId createCargo( String trackingIdString )
-            {
-                // New route specification
-                RouteSpecification routeSpec = context.buildRouteSpecification(
-                    vbf, context.origin, context.destination, context.arrivalDeadline );
-
-                // Build delivery snapshot from route specification
-                Delivery delivery = new BuildDeliverySnapshot( routeSpec ).get();
-
-                // Create cargo
-                Cargo cargo = cargos.createCargo( routeSpec, delivery, trackingIdString );
-
-                return cargo.trackingId().get();
-            }
-        }
-    }
-
-    @Mixins( RoutingFacadeRole.Mixin.class )
-    public interface RoutingFacadeRole
-    {
-        void setContext( BookNewCargo context );
-
-        List<Itinerary> routeCandidates()
-            throws FoundNoRoutesException;
-
-        void assignCargoToRoute();
-
-        void changeDestination( Location destination );
-
-        class Mixin
-            extends RoleMixin<BookNewCargo>
-            implements RoutingFacadeRole
-        {
-            @This
-            Cargo cargo;
-
-            @Service
-            RoutingService routingService;
-
-            // Use case step 3 - system calculates possible routes
-            public List<Itinerary> routeCandidates()
-                throws FoundNoRoutesException  // Deviation 3a
-            {
-                return routingService.fetchRoutesForSpecification( cargo.routeSpecification().get() );
-            }
-
-            public void assignCargoToRoute()
-            {
-                cargo.itinerary().set( context.itinerary );
-
-                if( cargo.delivery().get().lastHandlingEvent().get() != null )
-                {
-                    // We treat subsequent route assignments as reroutes of misdirected cargo
-                    cargo.delivery().get().lastHandlingEvent().get().wasUnexpected().set( true );
-                }
-
-                // Build delivery snapshot with updated itinerary
-                cargo.delivery().set( new BuildDeliverySnapshot( cargo ).get() );
-            }
-
-            public void changeDestination( Location newDestination )
-            {
-                Location currentOrigin = cargo.routeSpecification().get().origin().get();
-                LocalDate currentDeadline = cargo.routeSpecification().get().arrivalDeadline().get();
-
-                RouteSpecification newRouteSpecification =
-                    context.buildRouteSpecification( vbf, currentOrigin, newDestination, currentDeadline );
-
-                cargo.routeSpecification().set( newRouteSpecification );
-
-                // Build new delivery snapshot with updated route specification
-                cargo.delivery().set( new BuildDeliverySnapshot( cargo ).get() );
-            }
-        }
-    }
-
-    public RouteSpecification buildRouteSpecification(
-        ValueBuilderFactory vbf, Location origin, Location destination, LocalDate deadline
-    )
-    {
-        if( origin == destination )
-        {
-            throw new RouteException( "Origin location can't be same as destination location." );
-        }
-
-        if( deadline == null )
-        {
-            throw new RouteException( "Arrival deadline cannot be null." );
-        }
-
-        if( !deadline.isAfter( LocalDate.now() ) )
-        {
-            throw new RouteException( "Arrival deadline is in the past or Today." +
-                                      "\nDeadline           " + deadline +
-                                      "\nToday (midnight)   " + LocalDate.now().atStartOfDay().plusDays( 1 ) );
-        }
-
-        ValueBuilder<RouteSpecification> routeSpec = vbf.newValueBuilder( RouteSpecification.class );
-        routeSpec.prototype().origin().set( origin );
-        routeSpec.prototype().destination().set( destination );
-        routeSpec.prototype().arrivalDeadline().set( deadline );
-        return routeSpec.newInstance();
-    }
-}
\ No newline at end of file