📄 deliveryprotocolhandler.java
字号:
private void handleSetStatusRequest(HttpServletRequest request,
ValueParser parser,
ValueGenerator generator)
{
try
{
HttpSession session = request.getSession(false);
if (session != null)
{
String courierName = (String)session.getAttribute("courierName");
if (courierName != null)
{
DeliveryOrder currentJob =
deliveryOrderDatabase.getExistingJob(courierName);
String currentId;
String currentStatus;
if (currentJob != null)
{
currentId = currentJob.getId();
currentStatus = currentJob.getStatus();
}
else
{
currentId = "";
currentStatus = "none";
}
String newId = getStringValue(parser);
String newStatus = getStringValue(parser);
String newNote = getStringValue(parser);
if (currentId.equals(newId))
{
if (currentStatus.equals(DeliveryOrder.OPENED))
{
if (newStatus.equals(DeliveryOrder.ASSIGNED) ||
newStatus.equals(DeliveryOrder.OPENED))
{
currentJob.setStatus(newStatus);
if (newNote != null)
{
currentJob.setNote(newNote);
}
setStatusOK(generator, currentId, newStatus);
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Invalid status change"
);
}
}
else if (currentStatus.equals(DeliveryOrder.ASSIGNED))
{
if (newStatus.equals(DeliveryOrder.OPENED) ||
newStatus.equals(DeliveryOrder.SENDERDOESNOTEXIST) ||
newStatus.equals(DeliveryOrder.PICKEDUP)
)
{
if (newStatus.equals(DeliveryOrder.OPENED))
{
// Courier rejected assigned job before
// picking up package. Un-assign job.
currentJob.setCourierName("");
}
else if (newNote != null)
{
currentJob.setNote(newNote);
}
currentJob.setStatus(newStatus);
setStatusOK(generator, currentId, newStatus);
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Invalid status change"
);
}
}
else if (currentStatus.equals(DeliveryOrder.PICKEDUP))
{
if (newStatus.equals(DeliveryOrder.COMPLETED) ||
newStatus.equals(DeliveryOrder.RETURNEDTOSENDER) ||
newStatus.equals(DeliveryOrder.COURIERCANCELLED))
{
currentJob.setStatus(newStatus);
if (newNote != null)
{
currentJob.setNote(newNote);
}
setStatusOK(generator, currentId, newStatus);
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Invalid status change"
);
}
}
else if (currentStatus.equals(DeliveryOrder.COURIERCANCELLED))
{
if (newStatus.equals(DeliveryOrder.RETURNEDTOSENDER) ||
newStatus.equals(DeliveryOrder.COURIERCANCELLED))
{
currentJob.setStatus(newStatus);
if (newNote != null)
{
currentJob.setNote(newNote);
}
setStatusOK(generator, currentId, newStatus);
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Invalid status change"
);
}
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Unknown status"
);
}
}
else
{
// Shared state between local servlet database
// and remote client is corrupted ?
generateErrorResponse(
generator,
"setStatus-error",
"invalid id"
);
}
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"Unknown courier - please login again"
);
}
}
else
{
generateErrorResponse(
generator,
"setStatus-error",
"invalid session"
);
}
}
catch (InvalidRequestException e)
{
generateErrorResponse(generator, "setStatus-error", e.getMessage());
}
}
private void setStatusOK(ValueGenerator generator, String id, String status)
{
generator.addValue("setStatus-OK");
generator.addValue(id);
generator.addValue(status);
}
private void handleLogoutRequest(HttpServletRequest request,
ValueParser parser,
ValueGenerator generator)
{
HttpSession session = request.getSession(false);
if (session != null)
{
generator.addValue("logout-OK");
session.invalidate(); // HTTP Session destroyed
}
else
{
generateErrorResponse(
generator,
"logout-error",
"invalid session"
);
}
}
private String getStringValue(ValueParser parser)
throws InvalidRequestException
{
String value = parser.getNextValue();
if (value == null)
{
throw new InvalidRequestException("Missing value");
}
return value;
}
private int getIntValue(ValueParser parser)
throws InvalidRequestException
{
String valueStr = getStringValue(parser);
int value;
try
{
value = Integer.parseInt(valueStr);
}
catch (NumberFormatException e)
{
throw new InvalidRequestException("Value \"" + valueStr +
"\" is not a valid integer");
}
return value;
}
private boolean getBooleanValue(ValueParser parser)
throws InvalidRequestException
{
String valueStr = getStringValue(parser);
boolean value = false;
if (valueStr.equals("true"))
{
value = true;
}
else if (valueStr.equals("false"))
{
value = false;
}
else
{
throw new InvalidRequestException("Value \"" + valueStr +
"\" is not a valid boolean");
}
return value;
}
private void addIntValue(ValueGenerator generator, int value)
{
generator.addValue(Integer.toString(value));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -