br.com.ingenieux.mojo.simpledb.cmd.PutAttributesCommand Maven / Gradle / Ivy
package br.com.ingenieux.mojo.simpledb.cmd;
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.model.CreateDomainRequest;
import com.amazonaws.services.simpledb.model.PutAttributesRequest;
import com.amazonaws.services.simpledb.model.ReplaceableAttribute;
import com.amazonaws.services.simpledb.model.UpdateCondition;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.*;
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public class PutAttributesCommand {
final AmazonSimpleDB service;
public PutAttributesCommand(AmazonSimpleDB service) {
this.service = service;
}
public void execute(PutAttributesContext ctx) throws Exception {
if (ctx.isCreateDomainIfNeeded())
createIfNeeded(ctx);
ArrayNode attributesArray = (ArrayNode) new ObjectMapper().readTree(ctx.getSource());
for (int i = 0; i < attributesArray.size(); i++) {
ObjectNode putAttributeNode = (ObjectNode) attributesArray.get(i);
putAttribute(ctx, putAttributeNode);
}
}
private void createIfNeeded(PutAttributesContext ctx) {
Set domainSet = new TreeSet(service.listDomains().getDomainNames());
if (!domainSet.contains(ctx.getDomain()))
service.createDomain(new CreateDomainRequest(ctx.domain));
}
private void putAttribute(PutAttributesContext ctx, ObjectNode objectNode) {
PutAttributesRequest request = new PutAttributesRequest();
request.setDomainName(ctx.getDomain());
Iterator itFieldName = objectNode.fieldNames();
while (itFieldName.hasNext()) {
String key = itFieldName.next();
if ("name".equals(key)) {
String value = objectNode.get("name").textValue();
request.setItemName(value);
} else if ("append".equals(key) || "replace".equals(key)) {
boolean replaceP = "replace".equals(key);
ArrayNode attributesNode = (ArrayNode) objectNode.get(key);
Collection value = getAttributesFrom(attributesNode, replaceP);
request.getAttributes().addAll(value);
} else if ("expect".equals(key)) {
ObjectNode expectNode = (ObjectNode) objectNode.get("expect");
request.setExpected(getUpdateCondition(expectNode));
}
}
service.putAttributes(request);
}
private UpdateCondition getUpdateCondition(ObjectNode expectNode) {
String nameParameter = expectNode.get("name").asText();
String valueParameter = null;
Boolean existsParameter = null;
if (null != expectNode.get("value"))
valueParameter = expectNode.get("value").asText();
if (null != expectNode.get("exists"))
existsParameter = Boolean.valueOf("" + expectNode.get("exists"));
return new UpdateCondition(nameParameter, valueParameter, existsParameter);
}
private Collection getAttributesFrom(ArrayNode attributesNode, boolean replaceP) {
List attributeList = new ArrayList();
for (int i = 0; i < attributesNode.size(); i++) {
ObjectNode objectNode = (ObjectNode) attributesNode.get(i);
Iterator itFieldName = objectNode.fieldNames();
while (itFieldName.hasNext()) {
String key = itFieldName.next();
JsonNode valueNode = objectNode.get(key);
if (valueNode.isValueNode()) {
attributeList.add(new ReplaceableAttribute(key, valueNode.asText(), replaceP));
} else if (valueNode.isArray()) {
for (int j = 0; j < valueNode.size(); j++) {
JsonNode scalarValueNode = valueNode.get(j);
attributeList.add(new ReplaceableAttribute(key, scalarValueNode.asText(), replaceP));
}
}
}
}
return attributeList;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy