mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of https://github.com/bastiao/jclouds
* 'master' of https://github.com/bastiao/jclouds: Remove printfs and adding comments adding some test functions to putAttributes Adding simpledb demo to module of parent pom.xml, forget it adding a simpledb demo Revert properties to use https Adding Support to putAttributes and Select
This commit is contained in:
commit
e1fa18a6a6
|
@ -22,6 +22,8 @@ package org.jclouds.aws.simpledb;
|
||||||
import static org.jclouds.aws.simpledb.reference.SimpleDBParameters.ACTION;
|
import static org.jclouds.aws.simpledb.reference.SimpleDBParameters.ACTION;
|
||||||
import static org.jclouds.aws.simpledb.reference.SimpleDBParameters.VERSION;
|
import static org.jclouds.aws.simpledb.reference.SimpleDBParameters.VERSION;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.ws.rs.FormParam;
|
import javax.ws.rs.FormParam;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
|
@ -29,9 +31,14 @@ import javax.ws.rs.Path;
|
||||||
|
|
||||||
import org.jclouds.aws.filters.FormSigner;
|
import org.jclouds.aws.filters.FormSigner;
|
||||||
import org.jclouds.aws.functions.RegionToEndpoint;
|
import org.jclouds.aws.functions.RegionToEndpoint;
|
||||||
|
import org.jclouds.aws.simpledb.binders.BindAttributesToIndexedFormParams;
|
||||||
|
import org.jclouds.aws.simpledb.domain.Item;
|
||||||
|
import org.jclouds.aws.simpledb.domain.AttributePair;
|
||||||
import org.jclouds.aws.simpledb.domain.ListDomainsResponse;
|
import org.jclouds.aws.simpledb.domain.ListDomainsResponse;
|
||||||
import org.jclouds.aws.simpledb.options.ListDomainsOptions;
|
import org.jclouds.aws.simpledb.options.ListDomainsOptions;
|
||||||
|
import org.jclouds.aws.simpledb.xml.ItemsHandler;
|
||||||
import org.jclouds.aws.simpledb.xml.ListDomainsResponseHandler;
|
import org.jclouds.aws.simpledb.xml.ListDomainsResponseHandler;
|
||||||
|
import org.jclouds.rest.annotations.BinderParam;
|
||||||
import org.jclouds.rest.annotations.EndpointParam;
|
import org.jclouds.rest.annotations.EndpointParam;
|
||||||
import org.jclouds.rest.annotations.FormParams;
|
import org.jclouds.rest.annotations.FormParams;
|
||||||
import org.jclouds.rest.annotations.RequestFilters;
|
import org.jclouds.rest.annotations.RequestFilters;
|
||||||
|
@ -45,6 +52,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
@RequestFilters(FormSigner.class)
|
@RequestFilters(FormSigner.class)
|
||||||
@FormParams(keys = VERSION, values = SimpleDBAsyncClient.VERSION)
|
@FormParams(keys = VERSION, values = SimpleDBAsyncClient.VERSION)
|
||||||
|
@ -80,4 +88,28 @@ public interface SimpleDBAsyncClient {
|
||||||
ListenableFuture<Void> deleteDomainInRegion(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
ListenableFuture<Void> deleteDomainInRegion(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
||||||
@FormParam("DomainName") String domainName);
|
@FormParam("DomainName") String domainName);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see SimpleDBClient#putAttributes
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("/")
|
||||||
|
@FormParams(keys = ACTION, values = "PutAttributes")
|
||||||
|
ListenableFuture<Void> putAttributes(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
||||||
|
@FormParam("DomainName") String domainName,
|
||||||
|
@FormParam("ItemName") String itemName,
|
||||||
|
@BinderParam(BindAttributesToIndexedFormParams.class) Item attributes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see SimpleDBClient#putAttributes
|
||||||
|
*/
|
||||||
|
@POST
|
||||||
|
@Path("/")
|
||||||
|
@FormParams(keys = ACTION, values = "Select")
|
||||||
|
@XMLResponseParser(ItemsHandler.class)
|
||||||
|
ListenableFuture<? extends Map<String, Item>> select(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
||||||
|
@FormParam("SelectExpression") String selectExpression);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,19 +19,28 @@
|
||||||
|
|
||||||
package org.jclouds.aws.simpledb;
|
package org.jclouds.aws.simpledb;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import javax.ws.rs.FormParam;
|
||||||
|
|
||||||
|
import org.jclouds.aws.functions.RegionToEndpoint;
|
||||||
|
import org.jclouds.aws.simpledb.domain.Item;
|
||||||
|
import org.jclouds.aws.simpledb.domain.AttributePair;
|
||||||
import org.jclouds.aws.simpledb.domain.ListDomainsResponse;
|
import org.jclouds.aws.simpledb.domain.ListDomainsResponse;
|
||||||
import org.jclouds.aws.simpledb.options.ListDomainsOptions;
|
import org.jclouds.aws.simpledb.options.ListDomainsOptions;
|
||||||
import org.jclouds.concurrent.Timeout;
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
import org.jclouds.rest.annotations.EndpointParam;
|
||||||
|
|
||||||
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides access to SimpleDB via their REST API.
|
* Provides access to SimpleDB via their REST API.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 30, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface SimpleDBClient {
|
public interface SimpleDBClient {
|
||||||
|
@ -103,5 +112,6 @@ public interface SimpleDBClient {
|
||||||
* />
|
* />
|
||||||
*/
|
*/
|
||||||
void deleteDomainInRegion(String region, String domainName);
|
void deleteDomainInRegion(String region, String domainName);
|
||||||
|
void putAttributes(String region, String domain, String itemName, Item attributes);
|
||||||
|
Map<String, Item> select(String region, String selectionExpression);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import com.google.inject.Module;
|
||||||
* {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
|
* {@link JavaUrlHttpCommandExecutorServiceModule http transports} will be installed.
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
* @see SimpleDBContext
|
* @see SimpleDBContext
|
||||||
*/
|
*/
|
||||||
public class SimpleDBContextBuilder extends RestContextBuilder<SimpleDBClient, SimpleDBAsyncClient> {
|
public class SimpleDBContextBuilder extends RestContextBuilder<SimpleDBClient, SimpleDBAsyncClient> {
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package org.jclouds.aws.simpledb.binders;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
import static java.lang.String.format;
|
||||||
|
import static org.jclouds.http.HttpUtils.addFormParamTo;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.jclouds.aws.simpledb.domain.Item;
|
||||||
|
import org.jclouds.aws.simpledb.domain.AttributePair;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.rest.Binder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
|
*/
|
||||||
|
public class BindAttributesToIndexedFormParams implements Binder
|
||||||
|
{
|
||||||
|
|
||||||
|
private final String attributeName = "Attribute.%d.Name";
|
||||||
|
private final String attributeValue = "Attribute.%d.Value";
|
||||||
|
private final String attributeReplace = "Attribute.%d.Replace";
|
||||||
|
|
||||||
|
public void bindToRequest(HttpRequest request, Object input) {
|
||||||
|
checkArgument(checkNotNull(input, "input") instanceof Item,
|
||||||
|
"this binder is only valid for AttributeMap");
|
||||||
|
Item attributeMap = (Item) input;
|
||||||
|
|
||||||
|
int amazonOneBasedIndex = 1; // according to docs, counters must start with 1
|
||||||
|
for (String itemName : attributeMap.getAttributes().keySet())
|
||||||
|
{
|
||||||
|
|
||||||
|
Collection<AttributePair> c = attributeMap.getAttributes().get(itemName);
|
||||||
|
Iterator<AttributePair> it = c.iterator();
|
||||||
|
while(it.hasNext())
|
||||||
|
{
|
||||||
|
AttributePair attr = it.next();
|
||||||
|
// not null by contract
|
||||||
|
|
||||||
|
String value = attr.getValue();
|
||||||
|
|
||||||
|
if (value != null) {
|
||||||
|
addFormParamTo(request, format(attributeName, amazonOneBasedIndex), attr.getKey() );
|
||||||
|
addFormParamTo(request, format(attributeValue, amazonOneBasedIndex),
|
||||||
|
value);
|
||||||
|
addFormParamTo(request, format(attributeReplace, amazonOneBasedIndex), String
|
||||||
|
.valueOf(attr.isReplace()));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
amazonOneBasedIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -29,6 +29,7 @@ import org.jclouds.rest.ConfiguresRestClient;
|
||||||
* Configures the SimpleDB connection.
|
* Configures the SimpleDB connection.
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
@RequiresHttp
|
@RequiresHttp
|
||||||
@ConfiguresRestClient
|
@ConfiguresRestClient
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.jclouds.aws.simpledb.domain;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AttributePair is a class to support the attributes to put in the SimpleDB
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
|
*/
|
||||||
|
public class AttributePair
|
||||||
|
{
|
||||||
|
|
||||||
|
private String key;
|
||||||
|
private String value;
|
||||||
|
private boolean replace;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Default constructor to represent an attribute in a domain in SimpleDB
|
||||||
|
*
|
||||||
|
* <p/>
|
||||||
|
*
|
||||||
|
* @param key Name of Attribute
|
||||||
|
* @param value Value of Attribute
|
||||||
|
* @param replace Replace value if it already exists in domain
|
||||||
|
*/
|
||||||
|
public AttributePair(String key, String value, boolean replace)
|
||||||
|
{
|
||||||
|
this.key = key;
|
||||||
|
|
||||||
|
this.value = value ;
|
||||||
|
this.replace = replace;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value)
|
||||||
|
{
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isReplace() {
|
||||||
|
return replace;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -27,6 +27,7 @@ import java.util.Date;
|
||||||
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/index.html?SDB_API_CreateDomain.html"
|
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/index.html?SDB_API_CreateDomain.html"
|
||||||
* />
|
* />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
public class DomainMetadata {
|
public class DomainMetadata {
|
||||||
private final String region;
|
private final String region;
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.jclouds.aws.simpledb.domain;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the mapping of Items
|
||||||
|
*
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
|
*/
|
||||||
|
public class Item {
|
||||||
|
|
||||||
|
private final Multimap<String, AttributePair> attributes = LinkedHashMultimap
|
||||||
|
.create();
|
||||||
|
|
||||||
|
public Item() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a map of Attribute Pair
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Item(Multimap<String, AttributePair> attributes)
|
||||||
|
{
|
||||||
|
|
||||||
|
this.attributes.putAll(attributes);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Item addAttributePair(@Nullable String itemName,
|
||||||
|
AttributePair attrPair)
|
||||||
|
{
|
||||||
|
this.attributes.put(itemName, attrPair);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Multimap<String, AttributePair> getAttributes()
|
||||||
|
{
|
||||||
|
return ImmutableMultimap.<String, AttributePair> builder().putAll(
|
||||||
|
attributes).build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ import java.util.Set;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
* @see <a href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html" />
|
* @see <a href="http://docs.amazonwebservices.com/AmazonS3/2006-03-01/index.html" />
|
||||||
*/
|
*/
|
||||||
public interface ListDomainsResponse extends Set<String> {
|
public interface ListDomainsResponse extends Set<String> {
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.jclouds.http.options.BaseHttpRequestOptions;
|
||||||
* <code>
|
* <code>
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/SDB_API_ListDomains.html"
|
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/SDB_API_ListDomains.html"
|
||||||
* />
|
* />
|
||||||
|
|
|
@ -21,5 +21,6 @@
|
||||||
*
|
*
|
||||||
* @see <a href="http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/index.html"/>
|
* @see <a href="http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/index.html"/>
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
package org.jclouds.aws.simpledb;
|
package org.jclouds.aws.simpledb;
|
||||||
|
|
|
@ -25,6 +25,7 @@ package org.jclouds.aws.simpledb.reference;
|
||||||
* @see <a href="http://docs.amazonwebservices.com/AWSSimpleDomainService/2009-02-01/APIReference/Query_QueryParams.html"
|
* @see <a href="http://docs.amazonwebservices.com/AWSSimpleDomainService/2009-02-01/APIReference/Query_QueryParams.html"
|
||||||
* />
|
* />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
*/
|
*/
|
||||||
public interface SimpleDBParameters {
|
public interface SimpleDBParameters {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jclouds.aws.simpledb.xml;
|
||||||
|
|
||||||
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.jclouds.aws.simpledb.domain.AttributePair;
|
||||||
|
import org.jclouds.date.DateService;
|
||||||
|
import org.jclouds.http.functions.ParseSax;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.jclouds.aws.simpledb.domain.Item;
|
||||||
|
import org.xml.sax.Attributes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
|
*/
|
||||||
|
public class ItemsHandler extends
|
||||||
|
ParseSax.HandlerWithResult<Map<String, Item>> {
|
||||||
|
private StringBuilder currentText = new StringBuilder();
|
||||||
|
|
||||||
|
private Map<String, Item> items = Maps.newConcurrentMap();
|
||||||
|
private Multimap<String, AttributePair> attributes = LinkedHashMultimap.create();
|
||||||
|
private String attributeName;
|
||||||
|
private String attributeValue = "";
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
private boolean inside = false;
|
||||||
|
|
||||||
|
protected final DateService dateService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ItemsHandler(DateService dateService) {
|
||||||
|
this.dateService = dateService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Item> getResult() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startElement(String uri, String localName, String qName, Attributes attributes)
|
||||||
|
{
|
||||||
|
if (qName.equals("Attribute")) {
|
||||||
|
inside = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void endElement(String uri, String name, String qName)
|
||||||
|
{
|
||||||
|
if (qName.equals("Attribute"))
|
||||||
|
{
|
||||||
|
inside = false;
|
||||||
|
|
||||||
|
|
||||||
|
System.out.println("AttributeName: " + attributeName);
|
||||||
|
System.out.println("AttributeValue: " + attributeValue);
|
||||||
|
}
|
||||||
|
else if(qName.equals("Name")) {
|
||||||
|
if (inside)
|
||||||
|
attributeName = currentText.toString().trim();
|
||||||
|
else
|
||||||
|
itemName = currentText.toString().trim();
|
||||||
|
|
||||||
|
} else if (qName.equals("Value"))
|
||||||
|
{
|
||||||
|
attributeValue = currentText.toString().trim();
|
||||||
|
|
||||||
|
attributes.put(attributeName,new AttributePair(attributeName,
|
||||||
|
attributeValue, false));
|
||||||
|
}
|
||||||
|
else if (qName.equals("Item"))
|
||||||
|
{
|
||||||
|
System.out.println("ItemName: " + itemName);
|
||||||
|
|
||||||
|
Item item = new Item(attributes);
|
||||||
|
items.put(itemName, item);
|
||||||
|
attributes = LinkedHashMultimap.create();
|
||||||
|
this.attributeName = null;
|
||||||
|
this.attributeValue = null;
|
||||||
|
this.itemName = null;
|
||||||
|
inside = false;
|
||||||
|
}
|
||||||
|
currentText = new StringBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void characters(char ch[], int start, int length) {
|
||||||
|
currentText.append(ch, start, length);
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,6 +34,7 @@ import com.google.common.collect.Sets;
|
||||||
* ListDomainsResponse
|
* ListDomainsResponse
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
* @see <a href=
|
* @see <a href=
|
||||||
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/SDB_API_ListDomains.htm l"
|
* "http://docs.amazonwebservices.com/AmazonSimpleDB/2009-04-15/DeveloperGuide/SDB_API_ListDomains.htm l"
|
||||||
* />
|
* />
|
||||||
|
|
|
@ -23,6 +23,7 @@ import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
import org.jclouds.aws.domain.Region;
|
||||||
|
@ -96,12 +97,32 @@ public class SimpleDBAsyncClientTest extends RestClientTest<SimpleDBAsyncClient>
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAllRegions() throws SecurityException, NoSuchMethodException, IOException {
|
public void testAllRegions() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = SimpleDBAsyncClient.class.getMethod("createDomainInRegion", String.class, String.class);
|
Method method = SimpleDBAsyncClient.class.getMethod("putAttributes", String.class, String.class);
|
||||||
for (String region : Region.ALL_SIMPLEDB) {
|
for (String region : Region.ALL_SIMPLEDB) {
|
||||||
processor.createRequest(method, region, "domainName");
|
processor.createRequest(method, region, "domainName");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testPutAttributes() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = SimpleDBAsyncClient.class.getMethod("putAttributes", String.class, String.class, Map.class);
|
||||||
|
HttpRequest request = processor.createRequest(method, null, "domainName");
|
||||||
|
|
||||||
|
assertRequestLineEquals(request, "POST https://sdb.amazonaws.com/ HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(request, "Host: sdb.amazonaws.com\n");
|
||||||
|
assertPayloadEquals(request, "Version=2009-04-15&Action=PutAttributes&DomainName=domainName&ItemName=itemName" +
|
||||||
|
"&Attribute.1.Name=name" +
|
||||||
|
"&Attribute.1.Value=fuzzy" +
|
||||||
|
"&Attribute.1.Replace=true",
|
||||||
|
"application/x-www-form-urlencoded", false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, null);
|
||||||
|
assertExceptionParserClassEquals(method, null);
|
||||||
|
|
||||||
|
checkFilters(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void checkFilters(HttpRequest request) {
|
protected void checkFilters(HttpRequest request) {
|
||||||
assertEquals(request.getFilters().size(), 1);
|
assertEquals(request.getFilters().size(), 1);
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
<module>createlamp</module>
|
<module>createlamp</module>
|
||||||
<module>speedtest-sqs</module>
|
<module>speedtest-sqs</module>
|
||||||
<module>createandlistbuckets</module>
|
<module>createandlistbuckets</module>
|
||||||
|
<module>simpledb</module>
|
||||||
|
|
||||||
</modules>
|
</modules>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
====
|
||||||
|
|
||||||
|
Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
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.
|
||||||
|
====================================================================
|
||||||
|
====
|
||||||
|
|
||||||
|
#
|
||||||
|
# this is a simple example command line client to test usage of simpledb
|
||||||
|
# functions like putAttribute is tested and then it select and retrieve results.
|
||||||
|
# 1. execute 'mvn install' to build the sample
|
||||||
|
# 2. invoke the jar, passing your aws credentials and the bucket you wish to create
|
||||||
|
# ex.
|
||||||
|
# java -jar target/jclouds-aws-demo-simpledb-jar-with-dependencies.jar $AWS_USER $AWS_PWD simpledbtest
|
||||||
|
|
||||||
|
|
||||||
|
# Further information: Luís A. astião Silva bastiao@ua.pt>
|
|
@ -0,0 +1,75 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
|
||||||
|
Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
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.
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<artifactId>jclouds-aws-demos-project</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>jclouds-aws-demo-simpledb</artifactId>
|
||||||
|
<name>jclouds simpledb sample that putAttributes and select it</name>
|
||||||
|
<description>jclouds simpledb sample that putAttributes and select it</description>
|
||||||
|
<build>
|
||||||
|
<finalName>${project.artifactId}</finalName>
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>org.jclouds.aws.s3.samples.MainApp</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>org.jclouds.aws.simpledb.samples.MainApp</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>make-assembly</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.
|
||||||
|
* ====================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jclouds.aws.simpledb.samples;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import org.jclouds.aws.domain.Region;
|
||||||
|
import org.jclouds.aws.simpledb.SimpleDBAsyncClient;
|
||||||
|
import org.jclouds.aws.simpledb.SimpleDBClient;
|
||||||
|
import org.jclouds.aws.simpledb.domain.AttributePair;
|
||||||
|
import org.jclouds.aws.simpledb.domain.Item;
|
||||||
|
import org.jclouds.aws.simpledb.options.ListDomainsOptions;
|
||||||
|
import org.jclouds.rest.RestContext;
|
||||||
|
import org.jclouds.rest.RestContextFactory;
|
||||||
|
|
||||||
|
import com.google.common.collect.LinkedHashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This the Main class of an Application that demonstrates the use of the simpledb.
|
||||||
|
*
|
||||||
|
* Usage is: java MainApp \"accesskeyid\" \"secretkey\"
|
||||||
|
*
|
||||||
|
* @author Luís A. Bastião Silva <bastiao@ua.pt>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MainApp
|
||||||
|
{
|
||||||
|
|
||||||
|
public static int PARAMETERS = 3;
|
||||||
|
public static String INVALID_SYNTAX = "Invalid number of parameters. Syntax is: \"accesskeyid\" \"secretkey\" \"bucketName\" ";
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
|
||||||
|
|
||||||
|
// Args
|
||||||
|
String accesskeyid = args[0];
|
||||||
|
String secretkey = args[1];
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("simpledb.identity", accesskeyid);
|
||||||
|
properties.setProperty("simpledb.credential", secretkey);
|
||||||
|
|
||||||
|
|
||||||
|
RestContext<SimpleDBClient, SimpleDBAsyncClient> context = new RestContextFactory().createContext("simpledb", "AKIAJODKICBEKG7MM4XA", "FfqiNSiC88B6tJPDIOKUWUJGY68BQaQpkNz6Fsgq", new Properties());
|
||||||
|
AttributePair p = new AttributePair("AccessNumber", "1213123", true);
|
||||||
|
Multimap<String,AttributePair> m =LinkedHashMultimap.create();
|
||||||
|
m.put("AccessNumber", p);
|
||||||
|
Item attributes = new Item(m);
|
||||||
|
|
||||||
|
// Use Provider API
|
||||||
|
context.getApi().putAttributes(Region.EU_WEST_1, "tse", "AccessNumber", attributes );
|
||||||
|
//context.getApi().createDomainInRegion(Region.EU_WEST_1, "tse");
|
||||||
|
Map<String, Item> results = context.getApi().select(Region.EU_WEST_1, "select * from tse");
|
||||||
|
System.out.println(results);
|
||||||
|
ListDomainsOptions [] list = new ListDomainsOptions[100];
|
||||||
|
//context.getApi().listDomainsInRegion(Region.EU_WEST_1, list);
|
||||||
|
System.out.println(list[0]);
|
||||||
|
context.close();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue