/*
* Copyright 2010-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 com.amazonaws.geo;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
public class GeoDataManagerConfiguration {
// Public constants
public static final long MERGE_THRESHOLD = 2;
// Default values
private static final String DEFAULT_HASHKEY_ATTRIBUTE_NAME = "hashKey";
private static final String DEFAULT_RANGEKEY_ATTRIBUTE_NAME = "rangeKey";
private static final String DEFAULT_GEOHASH_ATTRIBUTE_NAME = "geohash";
private static final String DEFAULT_GEOJSON_ATTRIBUTE_NAME = "geoJson";
private static final String DEFAULT_GEOHASH_INDEX_ATTRIBUTE_NAME = "geohash-index";
private static final int DEFAULT_HASHKEY_LENGTH = 6;
private static final int DEFAULT_THREAD_POOL_SIZE = 10;
// Configuration properties
private String tableName;
private String hashKeyAttributeName;
private String rangeKeyAttributeName;
private String geohashAttributeName;
private String geoJsonAttributeName;
private String geohashIndexName;
private int hashKeyLength;
private AmazonDynamoDBClient dynamoDBClient;
private ExecutorService executorService;
public GeoDataManagerConfiguration(AmazonDynamoDBClient dynamoDBClient, String tableName) {
hashKeyAttributeName = DEFAULT_HASHKEY_ATTRIBUTE_NAME;
rangeKeyAttributeName = DEFAULT_RANGEKEY_ATTRIBUTE_NAME;
geohashAttributeName = DEFAULT_GEOHASH_ATTRIBUTE_NAME;
geoJsonAttributeName = DEFAULT_GEOJSON_ATTRIBUTE_NAME;
geohashIndexName = DEFAULT_GEOHASH_INDEX_ATTRIBUTE_NAME;
hashKeyLength = DEFAULT_HASHKEY_LENGTH;
this.dynamoDBClient = dynamoDBClient;
this.tableName = tableName;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getHashKeyAttributeName() {
return hashKeyAttributeName;
}
public void setHashKeyAttributeName(String hashKeyAttributeName) {
this.hashKeyAttributeName = hashKeyAttributeName;
}
public GeoDataManagerConfiguration withHashKeyAttributeName(String hashKeyAttributeName) {
setHashKeyAttributeName(hashKeyAttributeName);
return this;
}
public String getRangeKeyAttributeName() {
return rangeKeyAttributeName;
}
public void setRangeKeyAttributeName(String rangeKeyAttributeName) {
this.rangeKeyAttributeName = rangeKeyAttributeName;
}
public GeoDataManagerConfiguration withRangeKeyAttributeName(String rangeKeyAttributeName) {
setRangeKeyAttributeName(rangeKeyAttributeName);
return this;
}
public String getGeohashAttributeName() {
return geohashAttributeName;
}
public void setGeohashAttributeName(String geohashAttributeName) {
this.geohashAttributeName = geohashAttributeName;
}
public GeoDataManagerConfiguration withGeohashAttributeName(String geohashAttributeName) {
setGeohashAttributeName(geohashAttributeName);
return this;
}
public String getGeoJsonAttributeName() {
return geoJsonAttributeName;
}
public void setGeoJsonAttributeName(String geoJsonAttributeName) {
this.geoJsonAttributeName = geoJsonAttributeName;
}
public GeoDataManagerConfiguration withGeoJsonAttributeName(String geoJsonAttributeName) {
setGeoJsonAttributeName(geoJsonAttributeName);
return this;
}
public String getGeohashIndexName() {
return geohashIndexName;
}
public void setGeohashIndexName(String geohashIndexName) {
this.geohashIndexName = geohashIndexName;
}
public GeoDataManagerConfiguration withGeohashIndexName(String geohashIndexName) {
setGeohashIndexName(geohashIndexName);
return this;
}
public int getHashKeyLength() {
return hashKeyLength;
}
public void setHashKeyLength(int hashKeyLength) {
this.hashKeyLength = hashKeyLength;
}
public GeoDataManagerConfiguration withHashKeyLength(int hashKeyLength) {
setHashKeyLength(hashKeyLength);
return this;
}
public AmazonDynamoDBClient getDynamoDBClient() {
return dynamoDBClient;
}
public void setDynamoDBClient(AmazonDynamoDBClient dynamoDBClient) {
this.dynamoDBClient = dynamoDBClient;
}
public ExecutorService getExecutorService() {
synchronized (this) {
if (executorService == null) {
executorService = Executors.newFixedThreadPool(DEFAULT_THREAD_POOL_SIZE);
}
}
return executorService;
}
public void setExecutorService(ExecutorService executorService) {
synchronized (this) {
this.executorService = executorService;
}
}
}