public EnqueueResult enqueue()

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;
	}