package edu.ualberta.med.biobank.common.wrappers.loggers;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import edu.ualberta.med.biobank.common.util.DispatchState;
import edu.ualberta.med.biobank.common.util.StringUtil;
import edu.ualberta.med.biobank.model.Dispatch;
import edu.ualberta.med.biobank.model.Log;
import edu.ualberta.med.biobank.model.ShipmentInfo;
public class DispatchLogProvider implements WrapperLogProvider<Dispatch> {
private static final long serialVersionUID = 1L;
public static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(
"yyyy-MM-dd HH:mm"); //$NON-NLS-1$
@Override
public Log getLog(Dispatch dispatch) {
Log log = new Log();
Integer state = dispatch.getState();
DispatchState dispatchState = DispatchState.getState(state);
if (dispatchState != null) {
if (dispatchState.equals(DispatchState.CREATION)
|| dispatchState.equals(DispatchState.IN_TRANSIT)) {
log.setCenter(dispatch.getSenderCenter().getNameShort());
} else {
log.setCenter(dispatch.getReceiverCenter().getNameShort());
}
}
List<String> detailsList = new ArrayList<String>();
if (dispatchState != null) {
detailsList.add(new StringBuilder("state: ").append( //$NON-NLS-1$
dispatchState.getLabel()).toString());
if (dispatchState.equals(DispatchState.CREATION)
|| dispatchState.equals(DispatchState.IN_TRANSIT)
|| dispatchState.equals(DispatchState.LOST)) {
ShipmentInfo shipmentInfo = dispatch.getShipmentInfo();
if (shipmentInfo != null && shipmentInfo.getPackedAt() != null) {
String packedAt = DATE_FORMATTER.format(shipmentInfo
.getPackedAt());
detailsList.add(new StringBuilder("packed at: ").append( //$NON-NLS-1$
packedAt).toString());
}
}
}
ShipmentInfo shipmentInfo = dispatch.getShipmentInfo();
if (shipmentInfo != null) {
Date receivedAt = shipmentInfo.getReceivedAt();
if (receivedAt != null) {
String receivedAtString = DATE_FORMATTER.format(receivedAt);
detailsList.add(new StringBuilder("received at: ").append( //$NON-NLS-1$
receivedAtString).toString());
}
String waybill = shipmentInfo.getWaybill();
if (waybill != null) {
detailsList.add(new StringBuilder(", waybill: ") //$NON-NLS-1$
.append(waybill).toString());
}
}
log.setDetails(StringUtil.join(detailsList, ", ")); //$NON-NLS-1$
return log;
}
@Override
public Log getObjectLog(Object model) {
return getLog((Dispatch) model);
}
}