package com.softwaremill.common.backup; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.xerox.amazonws.simpledb.Domain; import com.xerox.amazonws.simpledb.Item; import com.xerox.amazonws.simpledb.SDBException; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author Adam Warski (adam at warski dot org) */ public class DomainRestore { private final Domain domain; private final BufferedReader reader; private final Gson gson; private final List<Item> itemsQueue; public DomainRestore(Domain domain, BufferedReader reader) { this.domain = domain; this.reader = reader; gson = new GsonBuilder().create(); itemsQueue = new ArrayList<Item>(); } public void restore() throws IOException, SDBException { String line; while ((line = reader.readLine()) != null) { addItemFromLine(line); } flushItemsQueue(); } private void addItemFromLine(String line) throws SDBException { JSONItem jsonItem = gson.fromJson(line, JSONItem.class); itemsQueue.add(jsonItemToSimpleDBItem(jsonItem)); // Batch put can have up to 25 items if (itemsQueue.size() > 24) { flushItemsQueue(); } } private void flushItemsQueue() throws SDBException { if (itemsQueue.size() > 0) { domain.batchPutAttributes(itemsQueue); itemsQueue.clear(); } } private Item jsonItemToSimpleDBItem(JSONItem jsonItem) { Item item = domain.createItem(jsonItem.getIdentifier()); for (JSONAttribute jsonAttribute : jsonItem.getAttributes()) { item.getAttributes().put(jsonAttribute.getName(), jsonAttribute.getValues()); } return item; } }