Sfoglia il codice sorgente

Lots of minor fixes to booking ui, added interface for reporting voyage delay (only stubbed at the backend right now), using jQuery instead of YUI.

peter_backlund 16 anni fa
parent
commit
2e4661ab01
52 ha cambiato i file con 5474 aggiunte e 665 eliminazioni
  1. 6
    0
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/BookingServiceFacade.java
  2. 22
    0
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/CarrierMovementDTO.java
  3. 22
    0
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/VoyageDTO.java
  4. 22
    0
      dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/VoyageDelayDTO.java
  5. 0
    15
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/BookingDispatcherServlet.java
  6. 84
    16
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoAdminController.java
  7. 1
    4
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoBookingCommand.java
  8. 24
    0
      dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/VoyageDelayCommand.java
  9. 1
    0
      dddsample/tracking/bookingui/src/main/resources/context-backend.xml
  10. 11
    2
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/booking-servlet.xml
  11. 1
    4
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/decorators.xml
  12. 0
    94
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/registrationForm.jsp
  13. 0
    34
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/adminDecorator.jsp
  14. 11
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/backend_error.jsp
  15. 60
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/cargoBookingForm.jsp
  16. 34
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/decorator.jsp
  17. 1
    2
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/list.jsp
  18. 0
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/pickNewDestination.jsp
  19. 0
    64
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/pub/track.jsp
  20. 0
    26
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/publicDecorator.jsp
  21. 0
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/selectItinerary.jsp
  22. 0
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/show.jsp
  23. 57
    0
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/voyageDelayedForm.jsp
  24. 0
    26
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/tracking-servlet.xml
  25. 1
    1
      dddsample/tracking/bookingui/src/main/webapp/WEB-INF/web.xml
  26. 0
    82
      dddsample/tracking/bookingui/src/main/webapp/calendar.css
  27. 2
    6
      dddsample/tracking/bookingui/src/main/webapp/css/admin.css
  28. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_flat_0_aaaaaa_40x100.png
  29. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_flat_75_ffffff_40x100.png
  30. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_55_fbf9ee_1x400.png
  31. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_65_ffffff_1x400.png
  32. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_75_dadada_1x400.png
  33. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_75_e6e6e6_1x400.png
  34. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_95_fef1ec_1x400.png
  35. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_highlight-soft_75_cccccc_1x100.png
  36. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_222222_256x240.png
  37. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_2e83ff_256x240.png
  38. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_454545_256x240.png
  39. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_888888_256x240.png
  40. BIN
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_cd0a0a_256x240.png
  41. 406
    0
      dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/jquery-ui-1.7.2.custom.css
  42. BIN
      dddsample/tracking/bookingui/src/main/webapp/images/calendarTrigger.gif
  43. BIN
      dddsample/tracking/bookingui/src/main/webapp/images/dddsample.png
  44. BIN
      dddsample/tracking/bookingui/src/main/webapp/images/dddsample_logotype.png
  45. BIN
      dddsample/tracking/bookingui/src/main/webapp/images/dddsample_logotype_small.png
  46. BIN
      dddsample/tracking/bookingui/src/main/webapp/images/shade.png
  47. 0
    3
      dddsample/tracking/bookingui/src/main/webapp/index.jsp
  48. 4376
    0
      dddsample/tracking/bookingui/src/main/webapp/js/jquery-1.3.2.js
  49. 298
    0
      dddsample/tracking/bookingui/src/main/webapp/js/jquery-ui-1.7.2.custom.min.js
  50. 0
    279
      dddsample/tracking/bookingui/src/main/webapp/style.css
  51. 1
    2
      dddsample/tracking/bookingui/src/test/java/se/citerus/dddsample/tracking/bookingui/CargoAdminControllerTest.java
  52. 33
    5
      dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/BookingServiceFacadeImpl.java

+ 6
- 0
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/BookingServiceFacade.java Vedi File

@@ -25,4 +25,10 @@ public interface BookingServiceFacade extends Remote {
25 25
 
26 26
   List<CargoRoutingDTO> listAllCargos() throws RemoteException;
27 27
 
28
+  List<VoyageDTO> listAllVoyages() throws RemoteException;
29
+
30
+  void departureDelayed(VoyageDelayDTO delay) throws RemoteException;
31
+
32
+  void arrivalDelayed(VoyageDelayDTO delay) throws RemoteException;
33
+  
28 34
 }

+ 22
- 0
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/CarrierMovementDTO.java Vedi File

@@ -0,0 +1,22 @@
1
+package se.citerus.dddsample.tracking.booking.api;
2
+
3
+import java.io.Serializable;
4
+
5
+public class CarrierMovementDTO implements Serializable {
6
+
7
+  private final LocationDTO departureLocation;
8
+  private final LocationDTO arrivalLocation;
9
+
10
+  public CarrierMovementDTO(LocationDTO departureLocation, LocationDTO arrivalLocation) {
11
+    this.departureLocation = departureLocation;
12
+    this.arrivalLocation = arrivalLocation;
13
+  }
14
+
15
+  public LocationDTO getDepartureLocation() {
16
+    return departureLocation;
17
+  }
18
+
19
+  public LocationDTO getArrivalLocation() {
20
+    return arrivalLocation;
21
+  }
22
+}

+ 22
- 0
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/VoyageDTO.java Vedi File

@@ -0,0 +1,22 @@
1
+package se.citerus.dddsample.tracking.booking.api;
2
+
3
+import java.io.Serializable;
4
+import java.util.List;
5
+
6
+public class VoyageDTO implements Serializable {
7
+  private final String voyageNumber;
8
+  private final List<CarrierMovementDTO> movements;
9
+
10
+  public VoyageDTO(String voyageNumber, List<CarrierMovementDTO> movements) {
11
+    this.voyageNumber = voyageNumber;
12
+    this.movements = movements;
13
+  }
14
+
15
+  public String getVoyageNumber() {
16
+    return voyageNumber;
17
+  }
18
+
19
+  public List<CarrierMovementDTO> getMovements() {
20
+    return movements;
21
+  }
22
+}

+ 22
- 0
dddsample/tracking/booking-api/src/main/java/se/citerus/dddsample/tracking/booking/api/VoyageDelayDTO.java Vedi File

@@ -0,0 +1,22 @@
1
+package se.citerus.dddsample.tracking.booking.api;
2
+
3
+import java.io.Serializable;
4
+
5
+public class VoyageDelayDTO implements Serializable {
6
+
7
+  private final String voyageNumber;
8
+  private final int minutesOfDelay;
9
+
10
+  public VoyageDelayDTO(String voyageNumber, int minutesOfDelay) {
11
+    this.voyageNumber = voyageNumber;
12
+    this.minutesOfDelay = minutesOfDelay;
13
+  }
14
+
15
+  public String getVoyageNumber() {
16
+    return voyageNumber;
17
+  }
18
+
19
+  public int getMinutesOfDelay() {
20
+    return minutesOfDelay;
21
+  }
22
+}

+ 0
- 15
dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/BookingDispatcherServlet.java Vedi File

@@ -1,15 +0,0 @@
1
-package se.citerus.dddsample.tracking.bookingui.web;
2
-
3
-import org.springframework.web.context.WebApplicationContext;
4
-import org.springframework.web.servlet.DispatcherServlet;
5
-
6
-public class BookingDispatcherServlet extends DispatcherServlet {
7
-
8
-  @Override
9
-  protected WebApplicationContext findWebApplicationContext() {
10
-    // The booking web application should be standalone,
11
-    // and not use the main application context as parent.
12
-    return null;
13
-  }
14
-
15
-}

+ 84
- 16
dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoAdminController.java Vedi File

@@ -1,5 +1,8 @@
1 1
 package se.citerus.dddsample.tracking.bookingui.web;
2 2
 
3
+import org.codehaus.jettison.AbstractXMLStreamWriter;
4
+import org.codehaus.jettison.mapped.MappedNamespaceConvention;
5
+import org.codehaus.jettison.mapped.MappedXMLStreamWriter;
3 6
 import org.springframework.beans.propertyeditors.CustomDateEditor;
4 7
 import org.springframework.web.bind.ServletRequestDataBinder;
5 8
 import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
@@ -7,6 +10,8 @@ import se.citerus.dddsample.tracking.booking.api.*;
7 10
 
8 11
 import javax.servlet.http.HttpServletRequest;
9 12
 import javax.servlet.http.HttpServletResponse;
13
+import javax.xml.stream.XMLStreamException;
14
+import java.io.StringWriter;
10 15
 import java.text.SimpleDateFormat;
11 16
 import java.util.*;
12 17
 
@@ -19,35 +24,35 @@ import java.util.*;
19 24
  * this approach is generally preferred to the one taken in the tracking controller. However,
20 25
  * there is never any one perfect solution for all situations, so we've chosen to demonstrate
21 26
  * two polarized ways to build user interfaces.
22
- *
23 27
  */
24 28
 public final class CargoAdminController extends MultiActionController {
25 29
 
26 30
   private BookingServiceFacade bookingServiceFacade;
31
+  private static final CustomDateEditor DATE_EDITOR = new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm"), false);
32
+  private static final UnLocodeComparator UN_LOCODE_COMPARATOR = new UnLocodeComparator();
33
+
34
+  public CargoAdminController(BookingServiceFacade bookingServiceFacade) {
35
+    this.bookingServiceFacade = bookingServiceFacade;
36
+  }
27 37
 
28 38
   @Override
29 39
   protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
30 40
     super.initBinder(request, binder);
31
-    binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm"), false));
41
+    binder.registerCustomEditor(Date.class, DATE_EDITOR);
32 42
   }
33 43
 
34
-  public Map registrationForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
44
+  public Map cargoBookingForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
35 45
     Map<String, Object> map = new HashMap<String, Object>();
36
-    List<LocationDTO> dtoList = bookingServiceFacade.listShippingLocations();
37 46
 
38
-    List<String> unLocodeStrings = new ArrayList<String>();
39
-
40
-    for (LocationDTO dto : dtoList) {
41
-      unLocodeStrings.add(dto.getUnLocode());
42
-    }
43
-
44
-    map.put("unlocodes", unLocodeStrings);
47
+    List<LocationDTO> dtoList = bookingServiceFacade.listShippingLocations();
48
+    Collections.sort(dtoList, UN_LOCODE_COMPARATOR);
49
+    
45 50
     map.put("locations", dtoList);
46 51
     return map;
47 52
   }
48 53
 
49
-  public void register(HttpServletRequest request, HttpServletResponse response,
50
-                       RegistrationCommand command) throws Exception {
54
+  public void bookCargo(HttpServletRequest request, HttpServletResponse response,
55
+                        CargoBookingCommand command) throws Exception {
51 56
     Date arrivalDeadline = new SimpleDateFormat("M/dd/yyyy").parse(command.getArrivalDeadline());
52 57
     String trackingId = bookingServiceFacade.bookNewCargo(
53 58
       command.getOriginUnlocode(), command.getDestinationUnlocode(), arrivalDeadline
@@ -101,7 +106,6 @@ public final class CargoAdminController extends MultiActionController {
101 106
     bookingServiceFacade.assignCargoToRoute(command.getTrackingId(), selectedRoute);
102 107
 
103 108
     response.sendRedirect("show.html?trackingId=" + command.getTrackingId());
104
-    //response.sendRedirect("list.html");
105 109
   }
106 110
 
107 111
   public Map pickNewDestination(HttpServletRequest request, HttpServletResponse response) throws Exception {
@@ -124,7 +128,71 @@ public final class CargoAdminController extends MultiActionController {
124 128
     response.sendRedirect("show.html?trackingId=" + trackingId);
125 129
   }
126 130
 
127
-  public void setBookingServiceFacade(BookingServiceFacade bookingServiceFacade) {
128
-    this.bookingServiceFacade = bookingServiceFacade;
131
+  public Map voyageDelayedForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
132
+    Map<String, List<String>> departures = new HashMap<String, List<String>>();
133
+    Map<String, List<String>> arrivals = new HashMap<String, List<String>>();
134
+
135
+    List<VoyageDTO> voyages = bookingServiceFacade.listAllVoyages();
136
+
137
+    for (VoyageDTO voyage : voyages) {
138
+      List<String> departureLocations = getLocationsList(departures, voyage);
139
+      List<String> arrivalLocations = getLocationsList(arrivals, voyage);
140
+      for (CarrierMovementDTO dto : voyage.getMovements()) {
141
+        departureLocations.add(dto.getDepartureLocation().getUnLocode());
142
+        arrivalLocations.add(dto.getArrivalLocation().getUnLocode());
143
+      }
144
+    }
145
+
146
+    Map<String, Object> model = new HashMap<String, Object>();
147
+
148
+    model.put("departures", toJSON(departures));
149
+    model.put("arrivals", toJSON(arrivals));
150
+    model.put("voyages", voyages);
151
+
152
+    return model;
153
+  }
154
+
155
+  public void voyageDelayed(HttpServletRequest request, HttpServletResponse response, VoyageDelayCommand command) throws Exception {
156
+    if (command.getType() == VoyageDelayCommand.DelayType.DEPT) {
157
+      bookingServiceFacade.departureDelayed(new VoyageDelayDTO(command.getVoyageNumber(), command.getHours() * 60));
158
+    } else if (command.getType() == VoyageDelayCommand.DelayType.ARR) {
159
+      bookingServiceFacade.arrivalDelayed(new VoyageDelayDTO(command.getVoyageNumber(), command.getHours() * 60));
160
+    }
161
+
162
+    response.sendRedirect("list.html");
163
+  }
164
+
165
+  private String toJSON(Map<String, List<String>> locationMap) throws XMLStreamException {
166
+    StringWriter stringWriter = new StringWriter();
167
+    MappedNamespaceConvention con = new MappedNamespaceConvention();
168
+    AbstractXMLStreamWriter w = new MappedXMLStreamWriter(con, stringWriter);
169
+
170
+    w.writeStartDocument();
171
+    for (Map.Entry<String, List<String>> e : locationMap.entrySet()) {
172
+      for (String location : e.getValue()) {
173
+        w.writeStartElement(e.getKey());
174
+        w.writeCharacters(location);
175
+        w.writeEndElement();
176
+      }
177
+    }
178
+    w.writeEndDocument();
179
+
180
+    return stringWriter.toString();
181
+  }
182
+
183
+  private List<String> getLocationsList(Map<String, List<String>> map, VoyageDTO voyage) {
184
+    List<String> locations = map.get(voyage.getVoyageNumber());
185
+    if (locations == null) {
186
+      locations = new ArrayList<String>();
187
+      map.put(voyage.getVoyageNumber(), locations);
188
+    }
189
+    return locations;
190
+  }
191
+
192
+  private static class UnLocodeComparator implements Comparator<LocationDTO> {
193
+    @Override
194
+    public int compare(LocationDTO o1, LocationDTO o2) {
195
+      return o1.getUnLocode().compareTo(o2.getUnLocode());
196
+    }
129 197
   }
130 198
 }

dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/RegistrationCommand.java → dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/CargoBookingCommand.java Vedi File

@@ -1,9 +1,6 @@
1 1
 package se.citerus.dddsample.tracking.bookingui.web;
2 2
 
3
-/**
4
- *
5
- */
6
-public final class RegistrationCommand {
3
+public final class CargoBookingCommand {
7 4
 
8 5
   private String originUnlocode;
9 6
   private String destinationUnlocode;

+ 24
- 0
dddsample/tracking/bookingui/src/main/java/se/citerus/dddsample/tracking/bookingui/web/VoyageDelayCommand.java Vedi File

@@ -0,0 +1,24 @@
1
+package se.citerus.dddsample.tracking.bookingui.web;
2
+
3
+public class VoyageDelayCommand {
4
+
5
+  private DelayType type;
6
+  private String voyageNumber;
7
+  private int hours;
8
+
9
+  public DelayType getType() {
10
+    return type;
11
+  }
12
+
13
+  public String getVoyageNumber() {
14
+    return voyageNumber;
15
+  }
16
+
17
+  public int getHours() {
18
+    return hours;
19
+  }
20
+
21
+  public static enum DelayType {
22
+    DEPT, ARR
23
+  }
24
+}

+ 1
- 0
dddsample/tracking/bookingui/src/main/resources/context-backend.xml Vedi File

@@ -4,6 +4,7 @@
4 4
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
5 5
 
6 6
   <bean id="remoteBookingService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
7
+    <property name="lookupStubOnStartup" value="false"/>
7 8
     <property name="serviceUrl" value="rmi://localhost:1099/BookingService"/>
8 9
     <property name="serviceInterface" value="se.citerus.dddsample.tracking.booking.api.BookingServiceFacade"/>
9 10
   </bean>

+ 11
- 2
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/booking-servlet.xml Vedi File

@@ -5,14 +5,23 @@
5 5
 
6 6
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
7 7
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
8
-    <property name="prefix" value="/WEB-INF/jsp/admin/"/>
8
+    <property name="prefix" value="/WEB-INF/jsp/"/>
9 9
     <property name="suffix" value=".jsp"/>
10 10
     <property name="requestContextAttribute" value="rc"/>
11 11
     <property name="cache" value="false"/>
12 12
   </bean>
13 13
 
14
+  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
15
+    <property name="exceptionMappings">
16
+      <map>
17
+        <entry key="java.rmi.RemoteException" value="backend_error"/>
18
+        <entry key="org.springframework.remoting.RemoteAccessException" value="backend_error"/>
19
+      </map>
20
+    </property>
21
+  </bean>
22
+
14 23
   <bean name="/*" class="se.citerus.dddsample.tracking.bookingui.web.CargoAdminController">
15
-    <property name="bookingServiceFacade" ref="remoteBookingService"/>
24
+    <constructor-arg ref="remoteBookingService"/>
16 25
   </bean>
17 26
 
18 27
 </beans>

+ 1
- 4
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/decorators.xml Vedi File

@@ -1,8 +1,5 @@
1 1
 <decorators defaultdir="/WEB-INF/jsp">
2
-  <decorator name="admin" page="adminDecorator.jsp">
2
+  <decorator name="admin" page="decorator.jsp">
3 3
     <pattern>/admin</pattern>
4 4
   </decorator>
5
-  <decorator name="main" page="publicDecorator.jsp">
6
-    <pattern>/public</pattern>
7
-  </decorator>
8 5
 </decorators>

+ 0
- 94
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/registrationForm.jsp Vedi File

@@ -1,94 +0,0 @@
1
-<html>
2
-<head>
3
-  <title>Cargo Administration</title>
4
-    <!--CSS file (default YUI Sam Skin) -->
5
-	<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.7.0/build/calendar/assets/skins/sam/calendar.css"/>
6
-
7
-	<!-- Dependencies -->
8
-	<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/yahoo-dom-event/yahoo-dom-event.js"></script>
9
-
10
-	<!-- Source file -->
11
-	<script type="text/javascript" src="http://yui.yahooapis.com/2.7.0/build/calendar/calendar-min.js"></script>
12
-    <script type="text/javascript">
13
-
14
-        var cal
15
-        function pickDate() {
16
-        }
17
-
18
-        function datePicked(type,args,obj) {
19
-            var dates = args[0];
20
-            var date = dates[0];
21
-            var year = date[0], month = date[1], day = date[2];
22
-
23
-            var arrivalDeadline = document.getElementById("arrivalDeadline");
24
-            arrivalDeadline.value = month + "/" + day + "/" + year;
25
-
26
-            cal.dispose();
27
-        }
28
-    </script>
29
-    <style type="text/css">
30
-        td {
31
-          align: left;
32
-        }
33
-        .yui-calcontainer {
34
-            font-size: 9pt;
35
-        }
36
-    </style>
37
-</head>
38
-<body>
39
-<div id="container">
40
-  <form action="<c:url value="/admin/register.html"/>" method="post">
41
-  <table>
42
-    <caption>Book new cargo</caption>
43
-    <tbody>
44
-      <tr>
45
-        <td>Origin</td>
46
-        <td>
47
-          <select name="originUnlocode">
48
-            <c:forEach items="${unlocodes}" var="u">
49
-            <option value="${u}">${u}</option>
50
-            </c:forEach>
51
-          </select>
52
-        </td>
53
-      </tr>
54
-      <tr>
55
-        <td>Destination</td>
56
-        <td>
57
-          <select name="destinationUnlocode">
58
-            <c:forEach items="${unlocodes}" var="u">
59
-            <option value="${u}">${u}</option>
60
-            </c:forEach>
61
-          </select>
62
-        </td>
63
-      </tr>
64
-        <tr>
65
-          <td>Arrival deadline:</td>
66
-          <td>
67
-            <input name="arrivalDeadline" type="text" size="10" id="arrivalDeadline" value="${param.arrivalDeadline}"/>&nbsp;
68
-          </td>
69
-        </tr>
70
-        <tr>
71
-            <td></td>
72
-            <td class="yui-skin-sam">
73
-                <div id="cal1Container"></div>
74
-            </td>
75
-        </tr>
76
-    </tbody>
77
-    <tfoot>
78
-      <tr>
79
-        <td> </td>
80
-        <td>
81
-          <input type="submit" value="Book"/>
82
-        </td>
83
-      </tr>
84
-    </tfoot>
85
-  </table>
86
-  </form>
87
-</div>
88
-<script type="text/javascript">
89
-    cal = new YAHOO.widget.Calendar('cal1Container');
90
-    cal.render();
91
-    cal.selectEvent.subscribe(datePicked)
92
-</script>
93
-</body>
94
-</html>

+ 0
- 34
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/adminDecorator.jsp Vedi File

@@ -1,34 +0,0 @@
1
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
-
3
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
-<head>
5
-  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
6
-  <title><decorator:title/></title>
7
-  <script type="text/javascript" charset="UTF-8"></script>
8
-  <style type="text/css" title="style" media="screen">
9
-    @import "${rc.contextPath}/admin.css";
10
-  </style>
11
-  <decorator:head/>
12
-</head>
13
-<body>
14
-  <div id="outer">
15
-    <img id="logotype" src="<c:url value="/images/dddsample_logotype_small.png"/>" alt=""/>
16
-    <h1>Cargo Booking and Routing</h1>
17
-    <ul id="menu">
18
-      <li>
19
-        <a href="${rc.contextPath}/admin/list.html">
20
-          List all cargos
21
-        </a>
22
-      </li>
23
-      <li>
24
-        <a href="${rc.contextPath}/admin/registrationForm.html">
25
-          Book new cargo
26
-        </a>
27
-      </li>
28
-    </ul>
29
-    <div id="body">
30
-      <decorator:body/>
31
-    </div>
32
-  </div>
33
-</body>
34
-</html>

+ 11
- 0
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/backend_error.jsp Vedi File

@@ -0,0 +1,11 @@
1
+<html>
2
+<head>
3
+  <title>Backend error</title>
4
+</head>
5
+<body>
6
+<div id="container">
7
+  <p>There's a problem communicating with the backend system. Please try again later.</p>
8
+  <p><em>${exception.message}</em></p>
9
+</div>
10
+</body>
11
+</html>

+ 60
- 0
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/cargoBookingForm.jsp Vedi File

@@ -0,0 +1,60 @@
1
+<html>
2
+<head>
3
+  <title>Book new cargo</title>
4
+</head>
5
+<body>
6
+<div id="container">
7
+  <form action="<c:url value="/admin/bookCargo.html"/>" method="post">
8
+  <table>
9
+    <tbody>
10
+      <tr>
11
+        <td>Origin</td>
12
+        <td>
13
+          <select name="originUnlocode">
14
+            <c:forEach items="${locations}" var="u">
15
+            <option value="${u.unLocode}">${u.unLocode} (${u.name})</option>
16
+            </c:forEach>
17
+          </select>
18
+        </td>
19
+      </tr>
20
+      <tr>
21
+        <td>Destination</td>
22
+        <td>
23
+          <select name="destinationUnlocode">
24
+            <c:forEach items="${locations}" var="u">
25
+            <option value="${u.unLocode}">${u.unLocode} (${u.name})</option>
26
+            </c:forEach>
27
+          </select>
28
+        </td>
29
+      </tr>
30
+        <tr>
31
+          <td>Arrival deadline:</td>
32
+          <td>
33
+            <input name="arrivalDeadline" type="text" size="10" id="arrivalDeadline" value="${param.arrivalDeadline}"/>
34
+          </td>
35
+        </tr>
36
+        <tr>
37
+            <td></td>
38
+            <td>
39
+                <div id="datepicker"></div>
40
+            </td>
41
+        </tr>
42
+    </tbody>
43
+    <tfoot>
44
+      <tr>
45
+        <td>
46
+          <input type="submit" value="Book"/>
47
+        </td>
48
+        <td></td>
49
+      </tr>
50
+    </tfoot>
51
+  </table>
52
+  </form>
53
+</div>
54
+<script type="text/javascript">
55
+  $(function() {
56
+    $("#arrivalDeadline").datepicker();
57
+  });
58
+</script>
59
+</body>
60
+</html>

+ 34
- 0
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/decorator.jsp Vedi File

@@ -0,0 +1,34 @@
1
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+
3
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+<head>
5
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
6
+  <title><decorator:title/></title>
7
+  <script type="text/javascript" src="${rc.contextPath}/js/jquery-1.3.2.js"></script>
8
+  <script type="text/javascript" src="${rc.contextPath}/js/jquery-ui-1.7.2.custom.min.js"></script>
9
+  <link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/jqueryui/jquery-ui-1.7.2.custom.css"/>
10
+  <link rel="stylesheet" type="text/css" href="${rc.contextPath}/css/admin.css"/>
11
+  <decorator:head/>
12
+</head>
13
+<body>
14
+  <div id="outer">
15
+    <img id="logotype" src="<c:url value="/images/dddsample.png"/>" alt=""/>
16
+    <h1>Cargo Booking and Routing</h1>
17
+    <ul id="menu">
18
+      <li>
19
+        <a href="${rc.contextPath}/admin/list.html">List all cargos</a>
20
+      </li>
21
+      <li>
22
+        <a href="${rc.contextPath}/admin/cargoBookingForm.html">Book new cargo</a>
23
+      </li>
24
+      <li>
25
+        <a href="${rc.contextPath}/admin/voyageDelayedForm.html">Report delay</a>
26
+      </li>
27
+    </ul>
28
+    <div id="body">
29
+      <h4><decorator:title/></h4>
30
+      <decorator:body/>
31
+    </div>
32
+  </div>
33
+</body>
34
+</html>

dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/list.jsp → dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/list.jsp Vedi File

@@ -1,10 +1,9 @@
1 1
 <html>
2 2
 <head>
3
-  <title>Cargo Administration</title>
3
+  <title>List all cargos</title>
4 4
 </head>
5 5
 <body>
6 6
   <table border="1" width="600">
7
-    <caption>All cargos</caption>
8 7
     <thead>
9 8
       <tr>
10 9
         <td>Tracking ID</td>

dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/pickNewDestination.jsp → dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/pickNewDestination.jsp Vedi File


+ 0
- 64
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/pub/track.jsp Vedi File

@@ -1,64 +0,0 @@
1
-<html>
2
-<head>
3
-  <title>Tracking cargo</title>
4
-</head>
5
-<body>
6
-<div id="container">
7
-  <div id="search">
8
-  <form:form method="post" commandName="trackCommand">
9
-    <table>
10
-      <tr>
11
-        <td>
12
-          Enter your tracking id:
13
-        </td>
14
-        <td>
15
-          <form:input path="trackingId" id="idInput"/>
16
-        </td>
17
-        <td>
18
-          <input type="submit" value="Track!">
19
-        </td>
20
-      </tr>
21
-      <tr>
22
-        <td></td>
23
-        <td>
24
-          <form:errors path="trackingId" cssClass="error"/>
25
-        </td>
26
-        <td></td>
27
-      </tr>
28
-    </table>
29
-  </form:form>
30
-  </div>
31
-  <c:if test="${cargo == null}">
32
-    <p><em>Hint: try tracking "ABC123" or "JKL567".</em></p>
33
-  </c:if>
34
-
35
-  <c:if test="${cargo != null}">
36
-    <div id="result">
37
-    <h2>Cargo ${cargo.trackingId} is now: ${cargo.statusText}</h2>
38
-    <p>Estimated time of arrival in ${cargo.destination}: ${cargo.eta}</p>
39
-    <p>${cargo.nextExpectedActivity}</p>
40
-    <c:if test="${cargo.misdirected}">
41
-      <p class="notify"><img src="${rc.contextPath}/images/error.png" alt="" />Cargo is misdirected</p>
42
-    </c:if>
43
-    <c:if test="${not empty cargo.events}">
44
-      <h3>Handling History</h3>
45
-        <ul style="list-style-type: none;">
46
-            <c:forEach items="${cargo.events}" var="leg">
47
-            <li>
48
-                <p><img style="vertical-align: top;" src="${rc.contextPath}/images/${leg.expected ? "tick" : "cross"}.png" alt=""/>
49
-                &nbsp;${leg.description}</p>
50
-            </li>
51
-            </c:forEach>
52
-        </ul>
53
-    </c:if>
54
-  </div>
55
-  </c:if>
56
-
57
-</div>
58
-<script type="text/javascript" charset="UTF-8">
59
-  try {
60
-    document.getElementById('idInput').focus()
61
-  } catch (e) {}
62
-</script>
63
-</body>
64
-</html>

+ 0
- 26
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/publicDecorator.jsp Vedi File

@@ -1,26 +0,0 @@
1
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
-
3
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
-<head>
5
-  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
6
-  <title><decorator:title/></title>
7
-  <script type="text/javascript" charset="UTF-8"></script>
8
-  <style type="text/css" title="style" media="screen">
9
-    @import "${rc.contextPath}/style.css";
10
-  </style>
11
-  <decorator:head/>
12
-</head>
13
-<body>
14
-  <div id="outer">
15
-    <div id="apptitle">
16
-      <img src="${rc.contextPath}/images/dddsample_logotype.png" alt="Domain Driven Delivery"/>
17
-    </div>
18
-    <div id="body">
19
-      <decorator:body/>
20
-    </div>
21
-    <div id="footer">
22
-      This application is written by <a href="http://www.citerus.se" target="_blank">Citerus</a>
23
-      and <a href="http://www.domainlanguage.com" target="_blank">Domain Language</a></div>
24
-  </div>
25
-</body>
26
-</html>

dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/selectItinerary.jsp → dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/selectItinerary.jsp Vedi File


dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/admin/show.jsp → dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/show.jsp Vedi File


+ 57
- 0
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/jsp/voyageDelayedForm.jsp Vedi File

@@ -0,0 +1,57 @@
1
+<html>
2
+<head>
3
+  <title>Report delay</title>
4
+  <script type="text/javascript">
5
+    var arrivals = ${arrivals};
6
+    var departures = ${departures};
7
+
8
+    function fill_locations() {
9
+      var t = $("#type_select").val();
10
+      var v = $("#voyage_select").val();
11
+      var locs;
12
+      if (v && (t == "ARR")) {
13
+        locs = arrivals[v];
14
+      } else if (v && (t == "DEPT")) {
15
+        locs = departures[v];
16
+      } else {
17
+        locs = [];
18
+      }
19
+
20
+      var sel = $("#location_select");
21
+      sel.empty();
22
+      $.each(locs, function(i, val) {
23
+        var option = "<option value=\"" + val + "\">" + val + "</option>";
24
+        sel.append(option);
25
+      });
26
+    }
27
+  </script>
28
+</head>
29
+<body>
30
+<div id="container">
31
+  <form action="<c:url value="/admin/voyageDelayed.html"/>" method="post">
32
+    <p>
33
+      Voyage
34
+      <select name="voyageNumber" id="voyage_select" onchange="fill_locations()">
35
+        <option value="">-- Select --</option>
36
+        <c:forEach items="${voyages}" var="v">
37
+        <option value="${v.voyageNumber}">${v.voyageNumber}</option>
38
+        </c:forEach>
39
+      </select>
40
+      : 
41
+      <select name="type" id="type_select">
42
+        <option value="ARR">arrival to</option>
43
+        <option value="DEPT">departure from</option>
44
+      </select>
45
+      <select name="unLocode" id="location_select">
46
+      </select>
47
+      is delayed by
48
+      <input name="hours" type="text" size="4" maxlength="4">
49
+      hours
50
+    </p>
51
+    <p>
52
+      <input type="submit"/>
53
+    </p>
54
+  </form>
55
+</div>
56
+</body>
57
+</html>

+ 0
- 26
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/tracking-servlet.xml Vedi File

@@ -1,26 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<beans xmlns="http://www.springframework.org/schema/beans"
3
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
5
-
6
-  <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
7
-    <property name="interceptors">
8
-      <list>
9
-        <ref bean="openSessionInViewInterceptor"/>
10
-      </list>
11
-    </property>
12
-  </bean>
13
-
14
-  <bean name="/track" class="se.citerus.dddsample.tracking.core.interfaces.tracking.CargoTrackingController">
15
-    <property name="sessionForm" value="true"/>
16
-    <property name="commandName" value="trackCommand"/>
17
-    <property name="formView" value="track"/>
18
-    <property name="successView" value="start"/>
19
-    <property name="validator" ref="trackCommandValidator"/>
20
-    <property name="cargoRepository" ref="cargoRepository"/>
21
-    <property name="handlingEventRepository" ref="handlingEventRepository"/>
22
-  </bean>
23
-
24
-  <bean id="trackCommandValidator" class="se.citerus.dddsample.tracking.core.interfaces.tracking.TrackCommandValidator"/>
25
-
26
-</beans>

+ 1
- 1
dddsample/tracking/bookingui/src/main/webapp/WEB-INF/web.xml Vedi File

@@ -31,7 +31,7 @@
31 31
 
32 32
   <servlet>
33 33
     <servlet-name>booking</servlet-name>
34
-    <servlet-class>se.citerus.dddsample.tracking.bookingui.web.BookingDispatcherServlet</servlet-class>
34
+    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
35 35
   </servlet>
36 36
 
37 37
   <servlet-mapping>

+ 0
- 82
dddsample/tracking/bookingui/src/main/webapp/calendar.css Vedi File

@@ -1,82 +0,0 @@
1
-.calendarTrigger {
2
-	width: 16px;
3
-	height: 16px;
4
-	cursor: pointer;
5
-	vertical-align: top;
6
-	margin-top: 1px;
7
-}
8
-
9
-.calendar {
10
-	position: absolute;
11
-	display: inherit;
12
-	
13
-	font-family: tahoma, verdana, arial, helvetica, sans-serif;
14
-	border: 1px solid blue;
15
-	background-color: white;
16
-}
17
-
18
-
19
-.calendar table {
20
-	border: 4px solid lightblue;
21
-	margin: 0px;
22
-	padding: 0px;
23
-	border-spacing: 2px;
24
-	border-collapse: separate;
25
-}
26
-
27
-.calendar table .goPrevious,
28
-.calendar table .goNext {
29
-	width: 12px;
30
-	background-repeat: no-repeat;
31
-	cursor: pointer;
32
-}
33
-
34
-.calendar table .goPrevious {
35
-	background-image: url( 'navigate_left.gif' );
36
-	background-position: left center;
37
-}
38
-
39
-.calendar table .goNext {
40
-	background-image: url( 'navigate_right.gif' );
41
-	background-position: right center;
42
-}
43
-
44
-.calendar table thead tr:first-child td {
45
-	font-weight: bold;
46
-}
47
-
48
-.calendar table td {
49
-	width: 15px;
50
-	height: 15px;
51
-	font-family: tahoma, verdana, arial, helvetica, sans-serif;
52
-	font-size: 8pt;
53
-	text-align: center;
54
-	padding: 0px 0px 0px 1px;
55
-	border: 0px;
56
-	vertical-align: middle;
57
-}
58
-.calendar table tbody td {
59
-	border: 1px solid gray;
60
-	cursor: pointer;
61
-}
62
-.calendar .disabled {
63
-	background-color: #BBBBBB;
64
-	color: #555555;
65
-}
66
-.calendar .past {
67
-	color: #AAAAAA;
68
-}
69
-.calendar .future {
70
-}
71
-.calendar .today {
72
-	background-color: pink;
73
-}
74
-.calendar .active {
75
-	background-color: #FFAA00;
76
-	border: 1px solid black;
77
-}
78
-
79
-.calendar table tbody td:hover {
80
-	border: 1px solid blue;
81
-	background-color: lightblue;
82
-}

dddsample/tracking/bookingui/src/main/webapp/admin.css → dddsample/tracking/bookingui/src/main/webapp/css/admin.css Vedi File

@@ -1,9 +1,5 @@
1
-html, body {
2
-  height: 100%;
3
-}
4
-
5 1
 body {
6
-  font: Verdana, Arial, sans-serif;
2
+  font-family: Helvetica, Arial, sans-serif;
7 3
   color: black;
8 4
   padding: 10px;
9 5
 }
@@ -51,4 +47,4 @@ table caption {
51 47
 
52 48
 img#logotype {
53 49
   float: right;
54
-}
50
+}

BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_flat_0_aaaaaa_40x100.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_flat_75_ffffff_40x100.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_55_fbf9ee_1x400.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_65_ffffff_1x400.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_75_dadada_1x400.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_75_e6e6e6_1x400.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_glass_95_fef1ec_1x400.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-bg_highlight-soft_75_cccccc_1x100.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_222222_256x240.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_2e83ff_256x240.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_454545_256x240.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_888888_256x240.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/images/ui-icons_cd0a0a_256x240.png Vedi File


+ 406
- 0
dddsample/tracking/bookingui/src/main/webapp/css/jqueryui/jquery-ui-1.7.2.custom.css Vedi File

@@ -0,0 +1,406 @@
1
+/*
2
+* jQuery UI CSS Framework
3
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
4
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
5
+*/
6
+
7
+/* Layout helpers
8
+----------------------------------*/
9
+.ui-helper-hidden { display: none; }
10
+.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
11
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
12
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
13
+.ui-helper-clearfix { display: inline-block; }
14
+/* required comment for clearfix to work in Opera \*/
15
+* html .ui-helper-clearfix { height:1%; }
16
+.ui-helper-clearfix { display:block; }
17
+/* end clearfix */
18
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
+
20
+
21
+/* Interaction Cues
22
+----------------------------------*/
23
+.ui-state-disabled { cursor: default !important; }
24
+
25
+
26
+/* Icons
27
+----------------------------------*/
28
+
29
+/* states and images */
30
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
31
+
32
+
33
+/* Misc visuals
34
+----------------------------------*/
35
+
36
+/* Overlays */
37
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
38
+
39
+
40
+
41
+/*
42
+* jQuery UI CSS Framework
43
+* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
44
+* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
45
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
46
+*/
47
+
48
+
49
+/* Component containers
50
+----------------------------------*/
51
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
52
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
53
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
54
+.ui-widget-content a { color: #222222; }
55
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
56
+.ui-widget-header a { color: #222222; }
57
+
58
+/* Interaction states
59
+----------------------------------*/
60
+.ui-state-default, .ui-widget-content .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; outline: none; }
61
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; outline: none; }
62
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
63
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; outline: none; }
64
+.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; outline: none; }
65
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; outline: none; text-decoration: none; }
66
+
67
+/* Interaction Cues
68
+----------------------------------*/
69
+.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
70
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636; }
71
+.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
72
+.ui-state-error a, .ui-widget-content .ui-state-error a { color: #cd0a0a; }
73
+.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a; }
74
+.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
75
+.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; }
76
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
77
+
78
+/* Icons
79
+----------------------------------*/
80
+
81
+/* states and images */
82
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
83
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
84
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
85
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
86
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
87
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
88
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
89
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
90
+
91
+/* positioning */
92
+.ui-icon-carat-1-n { background-position: 0 0; }
93
+.ui-icon-carat-1-ne { background-position: -16px 0; }
94
+.ui-icon-carat-1-e { background-position: -32px 0; }
95
+.ui-icon-carat-1-se { background-position: -48px 0; }
96
+.ui-icon-carat-1-s { background-position: -64px 0; }
97
+.ui-icon-carat-1-sw { background-position: -80px 0; }
98
+.ui-icon-carat-1-w { background-position: -96px 0; }
99
+.ui-icon-carat-1-nw { background-position: -112px 0; }
100
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
101
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
102
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
103
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
104
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
105
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
106
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
107
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
108
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
109
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
110
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
111
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
112
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
113
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
114
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
115
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
116
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
117
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
118
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
119
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
120
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
121
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
122
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
123
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
124
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
125
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
126
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
127
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
128
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
129
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
130
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
131
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
132
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
133
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
134
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
135
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
136
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
137
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
138
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
139
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
140
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
141
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
142
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
143
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
144
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
145
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
146
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
147
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
148
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
149
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
150
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
151
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
152
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
153
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
154
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
155
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
156
+.ui-icon-arrow-4 { background-position: 0 -80px; }
157
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
158
+.ui-icon-extlink { background-position: -32px -80px; }
159
+.ui-icon-newwin { background-position: -48px -80px; }
160
+.ui-icon-refresh { background-position: -64px -80px; }
161
+.ui-icon-shuffle { background-position: -80px -80px; }
162
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
163
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
164
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
165
+.ui-icon-folder-open { background-position: -16px -96px; }
166
+.ui-icon-document { background-position: -32px -96px; }
167
+.ui-icon-document-b { background-position: -48px -96px; }
168
+.ui-icon-note { background-position: -64px -96px; }
169
+.ui-icon-mail-closed { background-position: -80px -96px; }
170
+.ui-icon-mail-open { background-position: -96px -96px; }
171
+.ui-icon-suitcase { background-position: -112px -96px; }
172
+.ui-icon-comment { background-position: -128px -96px; }
173
+.ui-icon-person { background-position: -144px -96px; }
174
+.ui-icon-print { background-position: -160px -96px; }
175
+.ui-icon-trash { background-position: -176px -96px; }
176
+.ui-icon-locked { background-position: -192px -96px; }
177
+.ui-icon-unlocked { background-position: -208px -96px; }
178
+.ui-icon-bookmark { background-position: -224px -96px; }
179
+.ui-icon-tag { background-position: -240px -96px; }
180
+.ui-icon-home { background-position: 0 -112px; }
181
+.ui-icon-flag { background-position: -16px -112px; }
182
+.ui-icon-calendar { background-position: -32px -112px; }
183
+.ui-icon-cart { background-position: -48px -112px; }
184
+.ui-icon-pencil { background-position: -64px -112px; }
185
+.ui-icon-clock { background-position: -80px -112px; }
186
+.ui-icon-disk { background-position: -96px -112px; }
187
+.ui-icon-calculator { background-position: -112px -112px; }
188
+.ui-icon-zoomin { background-position: -128px -112px; }
189
+.ui-icon-zoomout { background-position: -144px -112px; }
190
+.ui-icon-search { background-position: -160px -112px; }
191
+.ui-icon-wrench { background-position: -176px -112px; }
192
+.ui-icon-gear { background-position: -192px -112px; }
193
+.ui-icon-heart { background-position: -208px -112px; }
194
+.ui-icon-star { background-position: -224px -112px; }
195
+.ui-icon-link { background-position: -240px -112px; }
196
+.ui-icon-cancel { background-position: 0 -128px; }
197
+.ui-icon-plus { background-position: -16px -128px; }
198
+.ui-icon-plusthick { background-position: -32px -128px; }
199
+.ui-icon-minus { background-position: -48px -128px; }
200
+.ui-icon-minusthick { background-position: -64px -128px; }
201
+.ui-icon-close { background-position: -80px -128px; }
202
+.ui-icon-closethick { background-position: -96px -128px; }
203
+.ui-icon-key { background-position: -112px -128px; }
204
+.ui-icon-lightbulb { background-position: -128px -128px; }
205
+.ui-icon-scissors { background-position: -144px -128px; }
206
+.ui-icon-clipboard { background-position: -160px -128px; }
207
+.ui-icon-copy { background-position: -176px -128px; }
208
+.ui-icon-contact { background-position: -192px -128px; }
209
+.ui-icon-image { background-position: -208px -128px; }
210
+.ui-icon-video { background-position: -224px -128px; }
211
+.ui-icon-script { background-position: -240px -128px; }
212
+.ui-icon-alert { background-position: 0 -144px; }
213
+.ui-icon-info { background-position: -16px -144px; }
214
+.ui-icon-notice { background-position: -32px -144px; }
215
+.ui-icon-help { background-position: -48px -144px; }
216
+.ui-icon-check { background-position: -64px -144px; }
217
+.ui-icon-bullet { background-position: -80px -144px; }
218
+.ui-icon-radio-off { background-position: -96px -144px; }
219
+.ui-icon-radio-on { background-position: -112px -144px; }
220
+.ui-icon-pin-w { background-position: -128px -144px; }
221
+.ui-icon-pin-s { background-position: -144px -144px; }
222
+.ui-icon-play { background-position: 0 -160px; }
223
+.ui-icon-pause { background-position: -16px -160px; }
224
+.ui-icon-seek-next { background-position: -32px -160px; }
225
+.ui-icon-seek-prev { background-position: -48px -160px; }
226
+.ui-icon-seek-end { background-position: -64px -160px; }
227
+.ui-icon-seek-first { background-position: -80px -160px; }
228
+.ui-icon-stop { background-position: -96px -160px; }
229
+.ui-icon-eject { background-position: -112px -160px; }
230
+.ui-icon-volume-off { background-position: -128px -160px; }
231
+.ui-icon-volume-on { background-position: -144px -160px; }
232
+.ui-icon-power { background-position: 0 -176px; }
233
+.ui-icon-signal-diag { background-position: -16px -176px; }
234
+.ui-icon-signal { background-position: -32px -176px; }
235
+.ui-icon-battery-0 { background-position: -48px -176px; }
236
+.ui-icon-battery-1 { background-position: -64px -176px; }
237
+.ui-icon-battery-2 { background-position: -80px -176px; }
238
+.ui-icon-battery-3 { background-position: -96px -176px; }
239
+.ui-icon-circle-plus { background-position: 0 -192px; }
240
+.ui-icon-circle-minus { background-position: -16px -192px; }
241
+.ui-icon-circle-close { background-position: -32px -192px; }
242
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
243
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
244
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
245
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
246
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
247
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
248
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
249
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
250
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
251
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
252
+.ui-icon-circle-check { background-position: -208px -192px; }
253
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
254
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
255
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
256
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
257
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
258
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
259
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
260
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
261
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
262
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
263
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
264
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
265
+
266
+
267
+/* Misc visuals
268
+----------------------------------*/
269
+
270
+/* Corner radius */
271
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; }
272
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
273
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
274
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
275
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; }
276
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
277
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; }
278
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; }
279
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; }
280
+
281
+/* Overlays */
282
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
283
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; }/* Accordion
284
+----------------------------------*/
285
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
286
+.ui-accordion .ui-accordion-li-fix { display: inline; }
287
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
288
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; }
289
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
290
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; }
291
+.ui-accordion .ui-accordion-content-active { display: block; }/* Datepicker
292
+----------------------------------*/
293
+.ui-datepicker { width: 17em; padding: .2em .2em 0; }
294
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
295
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
296
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
297
+.ui-datepicker .ui-datepicker-prev { left:2px; }
298
+.ui-datepicker .ui-datepicker-next { right:2px; }
299
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
300
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
301
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
302
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
303
+.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; }
304
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
305
+.ui-datepicker select.ui-datepicker-month, 
306
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
307
+.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; }
308
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
309
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
310
+.ui-datepicker td { border: 0; padding: 1px; }
311
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
312
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
313
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
314
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
315
+
316
+/* with multiple calendars */
317
+.ui-datepicker.ui-datepicker-multi { width:auto; }
318
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
319
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
320
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
321
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
322
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
323
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
324
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
325
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
326
+.ui-datepicker-row-break { clear:both; width:100%; }
327
+
328
+/* RTL support */
329
+.ui-datepicker-rtl { direction: rtl; }
330
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
331
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
332
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
333
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
334
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
335
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
336
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
337
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
338
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
339
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
340
+
341
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
342
+.ui-datepicker-cover {
343
+    display: none; /*sorry for IE5*/
344
+    display/**/: block; /*sorry for IE5*/
345
+    position: absolute; /*must have*/
346
+    z-index: -1; /*must have*/
347
+    filter: mask(); /*must have*/
348
+    top: -4px; /*must have*/
349
+    left: -4px; /*must have*/
350
+    width: 200px; /*must have*/
351
+    height: 200px; /*must have*/
352
+}/* Dialog
353
+----------------------------------*/
354
+.ui-dialog { position: relative; padding: .2em; width: 300px; }
355
+.ui-dialog .ui-dialog-titlebar { padding: .5em .3em .3em 1em; position: relative;  }
356
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; } 
357
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
358
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
359
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
360
+.ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
361
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
362
+.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; }
363
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
364
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
365
+/* Progressbar
366
+----------------------------------*/
367
+.ui-progressbar { height:2em; text-align: left; }
368
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable
369
+----------------------------------*/
370
+.ui-resizable { position: relative;}
371
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
372
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
373
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; }
374
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; }
375
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; }
376
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; }
377
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
378
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
379
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
380
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider
381
+----------------------------------*/
382
+.ui-slider { position: relative; text-align: left; }
383
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
384
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; }
385
+
386
+.ui-slider-horizontal { height: .8em; }
387
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
388
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
389
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
390
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
391
+
392
+.ui-slider-vertical { width: .8em; height: 100px; }
393
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
394
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
395
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
396
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs
397
+----------------------------------*/
398
+.ui-tabs { padding: .2em; zoom: 1; }
399
+.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; }
400
+.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; }
401
+.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; }
402
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; }
403
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
404
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
405
+.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; }
406
+.ui-tabs .ui-tabs-hide { display: none !important; }

BIN
dddsample/tracking/bookingui/src/main/webapp/images/calendarTrigger.gif Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/images/dddsample.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/images/dddsample_logotype.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/images/dddsample_logotype_small.png Vedi File


BIN
dddsample/tracking/bookingui/src/main/webapp/images/shade.png Vedi File


+ 0
- 3
dddsample/tracking/bookingui/src/main/webapp/index.jsp Vedi File

@@ -1,6 +1,3 @@
1
-<%
2
-    //response.sendRedirect("public/track");
3
-%>
4 1
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 2
 
6 3
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

+ 4376
- 0
dddsample/tracking/bookingui/src/main/webapp/js/jquery-1.3.2.js
File diff suppressed because it is too large
Vedi File


+ 298
- 0
dddsample/tracking/bookingui/src/main/webapp/js/jquery-ui-1.7.2.custom.min.js
File diff suppressed because it is too large
Vedi File


+ 0
- 279
dddsample/tracking/bookingui/src/main/webapp/style.css Vedi File

@@ -1,279 +0,0 @@
1
-html,body {
2
-  height: 100%;
3
-}
4
-
5
-body {
6
-  margin: auto;
7
-  font: 400 0.7em verdana, arial, sans-serif;
8
-  line-height: 170%;
9
-  color: #555;
10
-  background-color: #8599f7;
11
-  background-image: url("images/shade.png");
12
-  background-repeat: repeat-x;
13
-}
14
-
15
-/* Headers */
16
-h1, h2, h3, h4, h5, h6 {
17
-  margin: 0 0 10px 0;
18
-  padding: 0;
19
-}
20
-
21
-
22
-h1 {
23
-  padding-bottom: 0.2em;
24
-
25
-  font: 400 1.6em arial, sans-serif;
26
-  color: #536C71;
27
-}
28
-
29
-h2 {
30
-  font-size: 1.2em;
31
-  color: #586B7A;
32
-}
33
-
34
-h3 {
35
-  text-transform: uppercase;
36
-  font-size: 0.9em;
37
-  color: #5D6F73;
38
-}
39
-
40
-h4 {
41
-  font-size: 0.85em;
42
-}
43
-
44
-h5 {
45
-  font-size: 0.8em;
46
-}
47
-
48
-
49
-/* Links */
50
-a {
51
-  text-decoration: none;
52
-  color: blue;
53
-}
54
-
55
-a:hover {
56
-  color: darkblue;
57
-}
58
-
59
-a img {
60
-  border: 0;
61
-}
62
-
63
-a img.border {  
64
-  border: 1px solid #000;
65
-}
66
-
67
-a:hover img.border {  
68
-  /* Fixes IE bug - IE doesn't correctly apply the style on a:hover so need to mask it */
69
-  border: 1px solid #668FA3 !important;
70
-  border: 1px solid #FC3307;
71
-}
72
-
73
-
74
-
75
-/* Images */
76
-img.floatRight {
77
-  margin: 5px 0 10px 10px;
78
-}
79
-
80
-img.floatLeft {
81
-  margin: 5px 10px 10px 0;
82
-}
83
-
84
-
85
-
86
-/* Lists */
87
-ul li {
88
-}
89
-
90
-ol li {
91
-  font-weight: bold;
92
-  color: #668FA3;
93
-}
94
-
95
-ol li span {
96
-  font-weight: normal;
97
-  color: #444;
98
-}
99
-
100
-
101
-
102
-/* Blockquote */
103
-blockquote {
104
-  margin: 0;
105
-  padding: 0 20px;
106
-  background: #eee;
107
-  border-top: 1px solid #ccc;
108
-  border-bottom: 1px solid #ccc;
109
-}
110
-
111
-
112
-
113
-/**************************************************************
114
-   Form Elements
115
- **************************************************************/
116
-
117
-form {
118
-  padding: 0;
119
-  margin: 0;
120
-  text-align: center;
121
-}
122
-
123
-/* If you're finding the input elements get pushed down, increase the width */
124
-label {
125
-  float: left;
126
-  width: 25%;
127
-  vertical-align: top;
128
-}
129
-
130
-input,
131
-textarea,
132
-select {
133
-  padding: 1px;
134
-  font: 400 1em verdana, sans-serif;
135
-  color: black;
136
-  background: #EEE;
137
-  border: 1px solid #555;
138
-}
139
-
140
-input:focus,
141
-input:hover,
142
-textarea:focus,
143
-textarea:hover,
144
-select:focus,
145
-select:hover {
146
-  color: #000;
147
-  background: #E7F1F3;
148
-  border: 1px solid #888;
149
-}
150
-
151
-input.noBorder,
152
-input:focus.noBorder,
153
-input:hover.noBorder {
154
-  padding: 0;
155
-  border: 0;
156
-}
157
-
158
-input.button {
159
-  padding: 2px 5px;
160
-
161
-  font: 400 0.9em verdana, serif;
162
-  cursor: pointer;
163
-
164
-  color: #fff;
165
-  background: #ccc;
166
-  border-width: 1px;
167
-  border-style: solid;
168
-  border-color: #888 #888 #8880 #888;
169
-}
170
-
171
-input.radio {
172
-  background: none;
173
-  border: 0px;
174
-}
175
-
176
-table {
177
-  width: 100%;
178
-}
179
-
180
-table caption {
181
-  font-weight: bold;
182
-  text-align: left;
183
-  margin: 5px 0;
184
-}
185
-
186
-
187
-/**************************************************************
188
-   Custom div and span
189
- **************************************************************/
190
-
191
-div#outer {
192
-  margin: auto;
193
-  padding: 0 20px;
194
-  width: 600px;
195
-  height: 100%;
196
-  text-align: center;
197
-  background-color: white;
198
-  border-left: 2px solid #4223de;
199
-  border-right: 2px solid #4223de;
200
-}
201
-
202
-
203
-#apptitle {
204
-  padding-top: 20px;
205
-  padding-bottom: 10px;
206
-  margin-bottom: 20px;
207
-  border-bottom: 2px solid #555;
208
-}
209
-
210
-#footer {
211
-  border-top: 2px solid #555;
212
-  margin-top: 30px;
213
-  padding-top: 10px;
214
-  background-color: white;
215
-}
216
-
217
-#container {
218
-  text-align: left;
219
-  background-color: white;
220
-}
221
-
222
-#search {
223
-  font-size: 1.0em;
224
-  padding: 10px 0;
225
-  text-align: center;
226
-}
227
-
228
-#search table {
229
-  width: 320px;
230
-  margin: 0 auto;
231
-}
232
-
233
-#search td {
234
-  white-space: nowrap;
235
-}
236
-
237
-#result {
238
-  font-size: 1.0em;
239
-}
240
-
241
-#result thead {
242
-  font-size: 1.2em;
243
-  font-weight: bold;	
244
-}
245
-
246
-#result tr {
247
-  line-height: 120%;
248
-}
249
-
250
-.error {
251
-  color: #CC0033;
252
-}
253
-
254
-.event-type-LOAD {
255
-  background: #CCFFFF;
256
-}
257
-
258
-.event-type-UNLOAD {
259
-  background: #FFCCFF;
260
-}
261
-
262
-.event-type-RECEIVE {
263
-  background: #FFFF99;
264
-}
265
-
266
-.event-type-CLAIM {
267
-  background: #66FF99;
268
-}
269
-
270
-.notify {
271
-  border: 1px solid red;
272
-  padding: 4px;
273
-  font-weight: bold;
274
-}
275
-
276
-.notify img {
277
-  margin-right: 6px;
278
-  vertical-align: middle;
279
-}

+ 1
- 2
dddsample/tracking/bookingui/src/test/java/se/citerus/dddsample/tracking/bookingui/CargoAdminControllerTest.java Vedi File

@@ -15,9 +15,8 @@ public class CargoAdminControllerTest extends TestCase {
15 15
   MockHttpServletResponse response;
16 16
 
17 17
   public CargoAdminControllerTest() {
18
-    controller = new CargoAdminController();
19 18
     bookingServiceFacade = EasyMock.createMock(BookingServiceFacade.class);
20
-    controller.setBookingServiceFacade(bookingServiceFacade);
19
+    controller = new CargoAdminController(bookingServiceFacade);
21 20
   }
22 21
 
23 22
   public void testAssignItinerary() throws Exception {

+ 33
- 5
dddsample/tracking/core/src/main/java/se/citerus/dddsample/tracking/core/interfaces/booking/facade/BookingServiceFacadeImpl.java Vedi File

@@ -2,10 +2,7 @@ package se.citerus.dddsample.tracking.core.interfaces.booking.facade;
2 2
 
3 3
 import org.springframework.beans.factory.annotation.Autowired;
4 4
 import org.springframework.stereotype.Service;
5
-import se.citerus.dddsample.tracking.booking.api.BookingServiceFacade;
6
-import se.citerus.dddsample.tracking.booking.api.CargoRoutingDTO;
7
-import se.citerus.dddsample.tracking.booking.api.LocationDTO;
8
-import se.citerus.dddsample.tracking.booking.api.RouteCandidateDTO;
5
+import se.citerus.dddsample.tracking.booking.api.*;
9 6
 import se.citerus.dddsample.tracking.core.application.booking.BookingService;
10 7
 import se.citerus.dddsample.tracking.core.domain.model.cargo.Cargo;
11 8
 import se.citerus.dddsample.tracking.core.domain.model.cargo.CargoRepository;
@@ -15,13 +12,15 @@ import se.citerus.dddsample.tracking.core.domain.model.location.Location;
15 12
 import se.citerus.dddsample.tracking.core.domain.model.location.LocationRepository;
16 13
 import se.citerus.dddsample.tracking.core.domain.model.location.UnLocode;
17 14
 import se.citerus.dddsample.tracking.core.domain.model.voyage.VoyageRepository;
18
-import static se.citerus.dddsample.tracking.core.interfaces.booking.facade.DTOAssembler.*;
19 15
 
20 16
 import java.rmi.RemoteException;
21 17
 import java.util.ArrayList;
18
+import java.util.Arrays;
22 19
 import java.util.Date;
23 20
 import java.util.List;
24 21
 
22
+import static se.citerus.dddsample.tracking.core.interfaces.booking.facade.DTOAssembler.*;
23
+
25 24
 
26 25
 /**
27 26
  * This implementation has additional support from the infrastructure, for exposing as an RMI
@@ -102,4 +101,33 @@ public class BookingServiceFacadeImpl implements BookingServiceFacade {
102 101
     return routeCandidates;
103 102
   }
104 103
 
104
+  @Override
105
+  public List<VoyageDTO> listAllVoyages() {
106
+    // TODO
107
+    List<VoyageDTO> voyages = new ArrayList<VoyageDTO>();
108
+
109
+    voyages.add(new VoyageDTO("V0100", Arrays.asList(
110
+      new CarrierMovementDTO(new LocationDTO("CNHKG", "Hongkong"), new LocationDTO("USLBG", "Long Beach")),
111
+      new CarrierMovementDTO(new LocationDTO("USLBG", "Long Beach"), new LocationDTO("USDAL", "Dallas")),
112
+      new CarrierMovementDTO(new LocationDTO("USDAL", "Dallas"), new LocationDTO("CAOTT", "Ottawa"))
113
+    )));
114
+    voyages.add(new VoyageDTO("V0200", Arrays.asList(
115
+      new CarrierMovementDTO(new LocationDTO("USLBG", "Long Beach"), new LocationDTO("USDAL", "Dallas")),
116
+      new CarrierMovementDTO(new LocationDTO("CNHKG", "Hongkong"), new LocationDTO("USLBG", "Long Beach")),
117
+      new CarrierMovementDTO(new LocationDTO("USDAL", "Dallas"), new LocationDTO("CAOTT", "Ottawa"))
118
+    )));
119
+
120
+    return voyages;
121
+  }
122
+
123
+  @Override
124
+  public void departureDelayed(VoyageDelayDTO delay) {
125
+    // TODO
126
+  }
127
+
128
+  @Override
129
+  public void arrivalDelayed(VoyageDelayDTO delay) {
130
+    // TODO
131
+  }
132
+
105 133
 }