/* * Copyright 2011 Cloud.com, 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.cloud.bridge.service.core.s3; import java.util.HashMap; import java.util.Map; public class S3ConditionFactory { public enum PolicyConditions { UnknownCondition, StringEquals, StringNotEquals, StringEqualsIgnoreCase, StringNotEqualsIgnoreCase, StringLike, StringNotLike, NumericEquals, NumericNotEquals, NumericLessThan, NumericLessThanEquals, NumericGreaterThan, NumericGreaterThanEquals, DateEquals, DateNotEquals, DateLessThan, DateLessThanEquals, DateGreaterThan, DateGreaterThanEquals, Bool, IpAddress, NotIpAddres, ArnEquals, ArnNotEquals, ArnLike, ArnNotLike } // -> map a string name into a policy condition constant private Map<String,PolicyConditions> conditionNames = new HashMap<String,PolicyConditions>(); public S3ConditionFactory() { conditionNames.put("StringEquals", PolicyConditions.StringEquals); conditionNames.put("streq", PolicyConditions.StringEquals); conditionNames.put("StringNotEquals", PolicyConditions.StringNotEquals); conditionNames.put("strneq", PolicyConditions.StringNotEquals); conditionNames.put("StringEqualsIgnoreCase", PolicyConditions.StringEqualsIgnoreCase); conditionNames.put("streqi", PolicyConditions.StringEqualsIgnoreCase); conditionNames.put("StringNotEqualsIgnoreCase", PolicyConditions.StringNotEqualsIgnoreCase); conditionNames.put("strneqi", PolicyConditions.StringNotEqualsIgnoreCase); conditionNames.put("StringLike", PolicyConditions.StringLike); conditionNames.put("strl", PolicyConditions.StringLike); conditionNames.put("StringNotLike", PolicyConditions.StringNotLike); conditionNames.put("strnl", PolicyConditions.StringNotLike); conditionNames.put("NumericEquals", PolicyConditions.NumericEquals); conditionNames.put("numeq", PolicyConditions.NumericEquals); conditionNames.put("NumericNotEquals", PolicyConditions.NumericNotEquals); conditionNames.put("numneq", PolicyConditions.NumericNotEquals); conditionNames.put("NumericLessThan", PolicyConditions.NumericLessThan); conditionNames.put("numlt", PolicyConditions.NumericLessThan); conditionNames.put("NumericLessThanEquals", PolicyConditions.NumericLessThanEquals); conditionNames.put("numlteq", PolicyConditions.NumericLessThanEquals); conditionNames.put("NumericGreaterThan", PolicyConditions.NumericGreaterThan); conditionNames.put("numgt", PolicyConditions.NumericGreaterThan); conditionNames.put("NumericGreaterThanEquals", PolicyConditions.NumericGreaterThanEquals); conditionNames.put("numgteq", PolicyConditions.NumericGreaterThanEquals); conditionNames.put("DateEquals", PolicyConditions.DateEquals); conditionNames.put("dateeq", PolicyConditions.DateEquals); conditionNames.put("DateNotEquals", PolicyConditions.DateNotEquals); conditionNames.put("dateneq", PolicyConditions.DateNotEquals); conditionNames.put("DateLessThan", PolicyConditions.DateLessThan); conditionNames.put("datelt", PolicyConditions.DateLessThan); conditionNames.put("DateLessThanEquals", PolicyConditions.DateLessThanEquals); conditionNames.put("datelteq", PolicyConditions.DateLessThanEquals); conditionNames.put("DateGreaterThan", PolicyConditions.DateGreaterThan); conditionNames.put("dategt", PolicyConditions.DateGreaterThan); conditionNames.put("DateGreaterThanEquals", PolicyConditions.DateGreaterThanEquals); conditionNames.put("dategteq", PolicyConditions.DateGreaterThanEquals); conditionNames.put("Bool", PolicyConditions.Bool); conditionNames.put("IpAddress", PolicyConditions.IpAddress); conditionNames.put("NotIpAddres", PolicyConditions.NotIpAddres); conditionNames.put("ArnEquals", PolicyConditions.ArnEquals); conditionNames.put("arneq", PolicyConditions.ArnEquals); conditionNames.put("ArnNotEquals", PolicyConditions.ArnNotEquals); conditionNames.put("arnneq", PolicyConditions.ArnNotEquals); conditionNames.put("ArnLike", PolicyConditions.ArnLike); conditionNames.put("arnl", PolicyConditions.ArnLike); conditionNames.put("ArnNotLike", PolicyConditions.ArnNotLike); conditionNames.put("arnnl", PolicyConditions.ArnNotLike); } public S3PolicyCondition createCondition(String param) { PolicyConditions type = toPolicyConditions( param ); S3PolicyCondition result = null; switch( type ) { case DateEquals: case DateNotEquals: case DateLessThan: case DateLessThanEquals: case DateGreaterThan: case DateGreaterThanEquals: result = new S3PolicyDateCondition(); result.setCondition( type ); break; case StringEquals: case StringNotEquals: case StringEqualsIgnoreCase: case StringNotEqualsIgnoreCase: case StringLike: case StringNotLike: result = new S3PolicyStringCondition(); result.setCondition( type ); break; case NumericEquals: case NumericNotEquals: case NumericLessThan: case NumericLessThanEquals: case NumericGreaterThan: case NumericGreaterThanEquals: result = new S3PolicyNumericCondition(); result.setCondition( type ); break; case Bool: result = new S3PolicyBoolCondition(); result.setCondition( type ); break; case IpAddress: case NotIpAddres: result = new S3PolicyIPAddressCondition(); result.setCondition( type ); break; case ArnEquals: case ArnNotEquals: case ArnLike: case ArnNotLike: result = new S3PolicyArnCondition(); result.setCondition( type ); break; case UnknownCondition: default: return null; } return result; } private PolicyConditions toPolicyConditions(String operation) { Object value = conditionNames.get( operation ); if ( null == value ) return PolicyConditions.UnknownCondition; else return (PolicyConditions)value; } }