in src/main/java/com/awsblog/queueing/sdk/QueueSdkClient.java [435:520]
public EnqueueResult enqueue(String id) {
EnqueueResult result = new EnqueueResult(id);
if (Utils.checkIfNullOrEmptyString(id)) {
System.out.printf("ID is not provided ... cannot proceed with the enqueue() operation!%n");
result.setReturnValue(ReturnStatusEnum.FAILED_ID_NOT_PROVIDED);
return result;
}
Map<String,AttributeValue> key = new HashMap<>();
key.put("id", new AttributeValue().withS(id));
Shipment retrievedShipment = this.get(id);
if (Utils.checkIfNullObject(retrievedShipment)) {
System.out.printf("Shipment with ID [%s] cannot be found!%n", id);
result.setReturnValue(ReturnStatusEnum.FAILED_ID_NOT_FOUND);
return result;
}
int version = retrievedShipment.getSystemInfo().getVersion();
StatusEnum status = retrievedShipment.getSystemInfo().getStatus();
DynamoDB ddb = new DynamoDB(this.dynamoDB);
Table table = ddb.getTable(this.actualTableName);
result.setStatus(status);
result.setVersion(version);
result.setLastUpdatedTimestamp(retrievedShipment.getSystemInfo().getLastUpdatedTimestamp());
if (status == StatusEnum.UNDER_CONSTRUCTION) {
result.setReturnValue(ReturnStatusEnum.FAILED_RECORD_NOT_CONSTRUCTED);
return result;
}
if (status != StatusEnum.READY_TO_SHIP) {
result.setReturnValue(ReturnStatusEnum.FAILED_ILLEGAL_STATE);
return result;
}
OffsetDateTime odt = OffsetDateTime.now(ZoneOffset.UTC);
try {
UpdateItemSpec updateItemSpec = new UpdateItemSpec().withPrimaryKey("id", id)
.withUpdateExpression("ADD #sys.#v :one "
+ "SET queued = :one, #sys.queued = :one, #sys.queue_selected = :false, "
+ "last_updated_timestamp = :lut, #sys.last_updated_timestamp = :lut, "
+ "#sys.queue_added_timestamp = :lut, #sys.#st = :st")
.withNameMap(new NameMap()
.with("#v", "version")
.with("#st", "status")
.with("#sys", "system_info"))
.withValueMap(
new ValueMap()
.withInt(":one", 1)
.withBoolean(":false", false)
.withInt(":v", version)
.withString(":st", StatusEnum.READY_TO_SHIP.toString())
.withString(":lut", odt.toString()))
.withConditionExpression("#sys.#v = :v")
.withReturnValues(ReturnValue.ALL_NEW);
UpdateItemOutcome outcome = table.updateItem(updateItemSpec);
Map<String, Object> sysMap = outcome.getItem().getRawMap("system_info");
result.setVersion(((BigDecimal)sysMap.get("version")).intValue());
result.setLastUpdatedTimestamp((String)sysMap.get("last_updated_timestamp"));
result.setStatus(StatusEnum.valueOf((String)sysMap.get("status")));
Shipment shipment = this.get(id);
result.setShipment(shipment);
}
catch (Exception e) {
System.err.println("enqueue() - failed to update multiple attributes in " + this.actualTableName);
System.err.println(e.getMessage());
result.setReturnValue(ReturnStatusEnum.FAILED_DYNAMO_ERROR);
return result;
}
result.setReturnValue(ReturnStatusEnum.SUCCESS);
return result;
}