package edu.ualberta.med.biobank.common.action.dispatch; import edu.ualberta.med.biobank.common.action.Action; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.IdResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.action.info.ShipmentInfoSaveInfo; import edu.ualberta.med.biobank.common.permission.dispatch.DispatchChangeStatePermission; import edu.ualberta.med.biobank.common.util.DispatchState; import edu.ualberta.med.biobank.model.Dispatch; import edu.ualberta.med.biobank.model.ShipmentInfo; import edu.ualberta.med.biobank.model.ShippingMethod; public class DispatchChangeStateAction implements Action<IdResult> { /** * */ private static final long serialVersionUID = 1L; private Integer id; private DispatchState newState; private ShipmentInfoSaveInfo shipInfo; public DispatchChangeStateAction(Integer id, DispatchState state, ShipmentInfoSaveInfo shipInfo) { this.id = id; this.newState = state; this.shipInfo = shipInfo; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return new DispatchChangeStatePermission(id).isAllowed(context); } @Override public IdResult run(ActionContext context) throws ActionException { Dispatch disp = context.load(Dispatch.class, id); disp.setState(newState.getId()); if (shipInfo == null) disp.setShipmentInfo(null); else { ShipmentInfo si = context .get(ShipmentInfo.class, shipInfo.siId, new ShipmentInfo()); si.setBoxNumber(shipInfo.boxNumber); si.setPackedAt(shipInfo.packedAt); si.setReceivedAt(shipInfo.receivedAt); si.setWaybill(shipInfo.waybill); ShippingMethod sm = context.load(ShippingMethod.class, shipInfo.shippingMethodId); si.setShippingMethod(sm); disp.setShipmentInfo(si); } context.getSession().saveOrUpdate(disp); context.getSession().flush(); return new IdResult(disp.getId()); } }