/*
*
* Copyright 2013 Netflix, Inc.
*
* 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 com.netflix.ice.basic;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.netflix.ice.common.ProductService;
import com.netflix.ice.tag.Product;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
public class BasicProductService implements ProductService {
private static ConcurrentMap<String, Product> productsByAwsName = Maps.newConcurrentMap();
private static ConcurrentMap<String, Product> productsByName = Maps.newConcurrentMap();
public static final BasicProduct cloudfront = new BasicProduct(Product.cloudfront, "CloudFront");
public static final BasicProduct cloudhsm = new BasicProduct(Product.cloudhsm, "CloudHSM");
public static final BasicProduct cloudwatch = new BasicProduct(Product.cloudwatch, "CloudWatch");
public static final BasicProduct data_pipeline = new BasicProduct(Product.data_pipeline, "Data Pipeline");
public static final BasicProduct data_transfer = new BasicProduct(Product.data_transfer, "Data Transfer");
public static final BasicProduct direct_connect = new BasicProduct(Product.direct_connect, "Direct Connect");
public static final BasicProduct dynamodb = new BasicProduct(Product.dynamodb, "DynamoDB");
public static final BasicProduct ebs = new BasicProduct(Product.ebs, "ebs");
public static final BasicProduct ec2 = new BasicProduct(Product.ec2, "Elastic Compute Cloud");
public static final BasicProduct ec2_instance = new BasicProduct(Product.ec2_instance, "ec2_instance");
public static final BasicProduct eip = new BasicProduct(Product.eip, "eip");
public static final BasicProduct elasticache = new BasicProduct(Product.elasticache, "ElastiCache");
public static final BasicProduct emr = new BasicProduct(Product.emr, "Elastic MapReduce");
public static final BasicProduct glacier = new BasicProduct(Product.glacier, "Glacier");
public static final BasicProduct rds = new BasicProduct(Product.rds, "RDS Service");
public static final BasicProduct redshift = new BasicProduct(Product.redshift, "Redshift");
public static final BasicProduct route53 = new BasicProduct(Product.route53, "Route 53");
public static final BasicProduct s3 = new BasicProduct(Product.s3, "Simple Storage Service");
public static final BasicProduct simpledb = new BasicProduct(Product.simpledb, "SimpleDB");
public static final BasicProduct ses = new BasicProduct(Product.ses, "Simple Email Service");
public static final BasicProduct sns = new BasicProduct(Product.sns, "Simple Notification Service");
public static final BasicProduct sqs = new BasicProduct(Product.sqs, "Simple Queue Service");
public static final BasicProduct storage_gateway = new BasicProduct(Product.storage_gateway, "Storage Gateway");
public static final BasicProduct sws = new BasicProduct(Product.sws, "Simple Workflow Service");
public static final BasicProduct vpc = new BasicProduct(Product.vpc, "Virtual Private Cloud");
public static final BasicProduct monitor = new BasicProduct(Product.monitor, "monitor");
private static BasicProduct[] products = new BasicProduct[]{cloudfront, cloudhsm, cloudwatch, data_pipeline, data_transfer, direct_connect, dynamodb, ebs, ec2, ec2_instance, eip, elasticache, emr, glacier, rds, redshift, route53, s3, simpledb, ses, sns, sqs, storage_gateway, sws, vpc};
static {
for (BasicProduct product: products) {
productsByAwsName.put("AWS " + product.awsName, product.product);
productsByAwsName.put("Amazon " + product.awsName, product.product);
productsByName.put(product.product.name, product.product);
}
productsByAwsName.put(monitor.awsName, monitor.product);
productsByName.put(monitor.product.name, monitor.product);
}
public Product getProductByAwsName(String awsName) {
Product product = productsByAwsName.get(awsName);
if (product == null) {
product = new Product(awsName);
productsByAwsName.put(awsName, product);
productsByName.put(awsName, product);
}
return product;
}
public Product getProductByName(String name) {
Product product = productsByName.get(name);
if (product == null) {
product = new Product(name);
productsByAwsName.put(name, product);
productsByName.put(name, product);
}
return product;
}
public List<Product> getProducts(List<String> names) {
List<Product> result = Lists.newArrayList();
for (String name: names)
result.add(productsByName.get(name));
return result;
}
public Collection<Product> getProducts() {
return productsByName.values();
}
private static class BasicProduct {
private final String awsName;
private final Product product;
BasicProduct(Product product, String awsName) {
this.product = product;
this.awsName = awsName;
}
}
}