br.com.ingenieux.mojo.simpledb.cmd.DumpDomainCommand Maven / Gradle / Ivy
package br.com.ingenieux.mojo.simpledb.cmd;
/*
* 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.
*/
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.model.Attribute;
import com.amazonaws.services.simpledb.model.Item;
import com.amazonaws.services.simpledb.model.SelectRequest;
import com.amazonaws.services.simpledb.model.SelectResult;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.codehaus.plexus.util.IOUtil;
import java.io.FileWriter;
import java.io.Writer;
import java.util.*;
import static org.apache.commons.lang.StringUtils.isBlank;
public class DumpDomainCommand {
final ObjectMapper mapper = new ObjectMapper();
final AmazonSimpleDB service;
public DumpDomainCommand(AmazonSimpleDB service) {
super();
this.service = service;
}
public boolean execute(DumpDomainContext context) throws Exception {
SelectRequest selectRequest = new SelectRequest(String.format("SELECT * FROM %s", context.getDomain()));
SelectResult selectResult = service.select(selectRequest);
ArrayNode rootNode = mapper.createArrayNode();
while (!selectResult.getItems().isEmpty()) {
for (Item item : selectResult.getItems())
appendResult(rootNode, item);
if (isBlank(selectResult.getNextToken()))
break;
selectResult = service.select(selectRequest.withNextToken(selectResult.getNextToken()));
}
FileWriter writer = new FileWriter(context.getOutputFile());
writeData(rootNode, writer);
IOUtil.close(writer);
return false;
}
private void writeData(JsonNode rootNode, Writer fileWriter) throws Exception {
ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
writer.writeValue(fileWriter, rootNode);
}
private void appendResult(ArrayNode rootNode, Item item) {
ObjectNode rootObjectNode = mapper.createObjectNode();
rootObjectNode.put("name", item.getName());
Map> replaceAttributes = new TreeMap>();
/*
* Zips It
*/
for (Attribute a : item.getAttributes()) {
String key = a.getName();
String value = a.getValue();
if (replaceAttributes.containsKey(key)) {
replaceAttributes.get(key).add(value);
} else {
replaceAttributes.put(key, new ArrayList(Arrays.asList(value)));
}
}
/*
* Formats and dumps
*/
ObjectNode rootReplaceNode = mapper.createObjectNode();
for (String k : replaceAttributes.keySet()) {
List valueList = replaceAttributes.get(k);
if (1 == valueList.size()) {
rootReplaceNode.put(k, valueList.get(0));
} else {
ArrayNode valueArrayNode = mapper.createArrayNode();
for (String value : valueList)
valueArrayNode.add(value);
rootReplaceNode.put(k, valueArrayNode);
}
}
ArrayNode replaceNode = mapper.createArrayNode();
replaceNode.add(rootReplaceNode);
rootObjectNode.put("replace", replaceNode);
rootNode.add(rootObjectNode);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy