Package org.springframework.data.simpledb.core

Source Code of org.springframework.data.simpledb.core.SimpleDbRequestBuilder

package org.springframework.data.simpledb.core;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.springframework.data.simpledb.util.MapUtils;

import com.amazonaws.services.simpledb.model.PutAttributesRequest;
import com.amazonaws.services.simpledb.model.ReplaceableAttribute;

/**
* Taking into account SimpleDb limitations, constructs requests that comply.
*/
public final class SimpleDbRequestBuilder {

  private SimpleDbRequestBuilder() {
    // utility class
  }

  private static final int MAX_NUMBER_OF_ATTRIBUTES_PER_SIMPLE_DB_REQUEST = 256;

  public static List<PutAttributesRequest> createPutAttributesRequests(String domain, String itemName,
      Map<String, List<String>> rawAttributes) {
    List<PutAttributesRequest> putAttributesRequests = new LinkedList<PutAttributesRequest>();

    List<Map<String, List<String>>> attributeChunks = MapUtils.splitToChunksOfSize(rawAttributes,
        MAX_NUMBER_OF_ATTRIBUTES_PER_SIMPLE_DB_REQUEST);

    for(Map<String, List<String>> chunk : attributeChunks) {
      PutAttributesRequest request = createPutAttributesRequest(domain, itemName, chunk);
      putAttributesRequests.add(request);
    }

    return putAttributesRequests;
  }

  private static PutAttributesRequest createPutAttributesRequest(String domain, String itemName,
      Map<String, List<String>> chunk) {
    final PutAttributesRequest putRequest = new PutAttributesRequest();
    putRequest.setDomainName(domain);
    putRequest.setItemName(itemName);

    List<ReplaceableAttribute> simpleDbAttributes = toReplaceableAttributeList(chunk);
    putRequest.setAttributes(simpleDbAttributes);
    return putRequest;
  }

  private static List<ReplaceableAttribute> toReplaceableAttributeList(Map<String, List<String>> attributes) {
    boolean replace = true;
    final List<ReplaceableAttribute> result = new ArrayList<ReplaceableAttribute>();
   
    for(final Map.Entry<String, List<String>> entry : attributes.entrySet()) {
      replace = true;
      for (final String value : entry.getValue()) {
        result.add(new ReplaceableAttribute(entry.getKey(), value, replace));
        replace = false;
      }
    }

    return result;
  }

}
TOP

Related Classes of org.springframework.data.simpledb.core.SimpleDbRequestBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.