package org.xmlsh.aws;
import java.io.IOException;
import java.util.List;
import javax.xml.stream.XMLStreamException;
import org.xmlsh.aws.util.AWSDDBCommand;
import org.xmlsh.aws.util.DDBTypes.IKeyAttrValueMap;
import org.xmlsh.core.CoreException;
import org.xmlsh.core.Options;
import org.xmlsh.core.UnexpectedException;
import org.xmlsh.core.XValue;
import org.xmlsh.util.Util;
import com.amazonaws.AmazonClientException;
import com.amazonaws.services.dynamodbv2.model.UpdateItemRequest;
import com.amazonaws.services.dynamodbv2.model.UpdateItemResult;
import net.sf.saxon.s9api.SaxonApiException;
public class ddbUpdateItem extends AWSDDBCommand {
/**
* @param args
* @throws IOException
*/
@Override
public int run(List<XValue> args) throws Exception {
Options opts = getOptions(sTABLE_OPTIONS, sATTR_EXPR_OPTIONS, sKEY_OPTIONS,
sCONDITION_OPTIONS, sRETURN_OPTIONS, "update:");
// Options opts = getOptions("expected:+,q=quiet");
parseOptions(opts, args);
setSerializeOpts(this.getSerializeOpts(opts));
try {
getDDBClient(opts);
} catch (UnexpectedException e) {
usage(e.getLocalizedMessage());
return 1;
}
int ret = -1;
ret = update(opts);
return ret;
}
private int update(Options opts) throws IOException,
XMLStreamException, SaxonApiException, CoreException {
String condition = opts.getOptString("condition", null);
String returnValues = opts.getOptString("return-values", null);
String tableName = opts.getOptStringRequired("table");
IKeyAttrValueMap key = parseKeyOptions(opts);
String updateExpr = opts.getOptString("update", null);
List<XValue> args = opts.getRemainingArgs();
if(!args.isEmpty()) {
if(updateExpr == null)
updateExpr = args.remove(0).toString();
else
usage("Unexpected arguments");
}
if(!args.isEmpty() || Util.isBlank(updateExpr)) {
usage("Update expression required");
return 1;
}
UpdateItemRequest updateItemRequest = new UpdateItemRequest()
.withTableName(tableName).withKey(key)
.withUpdateExpression(updateExpr)
.withExpressionAttributeNames(parseAttrNameExprs(opts))
.withExpressionAttributeValues(parseAttrValueExprs(opts));
if(condition != null)
updateItemRequest.setConditionExpression(condition);
if(returnValues != null)
updateItemRequest.setReturnValues(returnValues);
traceCall("updateItem");
UpdateItemResult result;
try {
result = getAWSClient().updateItem(updateItemRequest);
} catch (AmazonClientException e) {
return handleException(e);
}
if(!bQuiet) {
startResult();
if(result.getAttributes() != null) {
writeItem(result.getAttributes());
}
writeMetric(new RequestMetrics(result.getConsumedCapacity(),
result.getItemCollectionMetrics()));
endResult();
}
return 0;
}
}