package net.java.cargotracker.interfaces.booking.web;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import net.java.cargotracker.interfaces.booking.facade.BookingServiceFacade;
import net.java.cargotracker.interfaces.booking.facade.dto.Location;
/**
* Handles registering cargo. Operates against a dedicated service facade, and
* could easily be rewritten as a thick Swing client. Completely separated from
* the domain layer, unlike the tracking user interface.
* <p/>
* In order to successfully keep the domain model shielded from user interface
* considerations, this approach is generally preferred to the one taken in the
* tracking controller. However, there is never any one perfect solution for all
* situations, so we've chosen to demonstrate two polarized ways to build user
* interfaces.
*/
@Named
@ViewScoped
public class Registration implements Serializable {
private static final long serialVersionUID = 1L;
private static final String FORMAT = "yyyy-MM-dd";
List<Location> locations;
private String arrivalDeadline;
private String originUnlocode;
private String destinationUnlocode;
@Inject
private BookingServiceFacade bookingServiceFacade;
public List<Location> getLocations() {
return locations;
}
public String getArrivalDeadline() {
return arrivalDeadline;
}
public void setArrivalDeadline(String arrivalDeadline) {
this.arrivalDeadline = arrivalDeadline;
}
public String getOriginUnlocode() {
return originUnlocode;
}
public void setOriginUnlocode(String originUnlocode) {
this.originUnlocode = originUnlocode;
}
public String getDestinationUnlocode() {
return destinationUnlocode;
}
public void setDestinationUnlocode(String destinationUnlocode) {
this.destinationUnlocode = destinationUnlocode;
}
@PostConstruct
public void init() {
locations = bookingServiceFacade.listShippingLocations();
}
public String register() {
String trackingId = "";
try {
trackingId = bookingServiceFacade.bookNewCargo(originUnlocode,
destinationUnlocode,
new SimpleDateFormat(FORMAT).parse(arrivalDeadline));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "show.xhtml?faces-redirect=true&trackingId=" + trackingId;
}
}