package org.ebayopensource.turmeric.policyservice.provider.utils;
import java.util.ArrayList;
import java.util.List;
import org.ebayopensource.turmeric.policyservice.model.Condition;
import org.ebayopensource.turmeric.policyservice.model.Expression;
import org.ebayopensource.turmeric.policyservice.model.PrimitiveValue;
import org.ebayopensource.turmeric.policyservice.model.Rule;
import org.ebayopensource.turmeric.policyservice.model.SupportedPrimitive;
import org.ebayopensource.turmeric.policyservice.model.EffectType;
import org.ebayopensource.turmeric.security.v1.services.KeyValuePair;
/**
* The Class RuleHelper.
*/
public class RuleHelper {
private RuleHelper() {}
/**
* Convert.
*
* @param jpaRules
* the jpa rules
* @return the list
*/
public static List<org.ebayopensource.turmeric.security.v1.services.Rule> convert(List<Rule> jpaRules){
List<org.ebayopensource.turmeric.security.v1.services.Rule> rules = new ArrayList<org.ebayopensource.turmeric.security.v1.services.Rule>();
if(jpaRules!=null){
for(Rule jpaRule : jpaRules){
org.ebayopensource.turmeric.security.v1.services.Rule converted =
convert(jpaRule);
if (converted != null) {
rules.add(converted);
}
//just one rule can be created from UI
break;
}
}
return rules;
}
/**
* Convert.
*
* @param jpaRule
* the jpa rule
* @return the org.ebayopensource.turmeric.security.v1.services. rule
*/
public static org.ebayopensource.turmeric.security.v1.services.Rule convert(Rule jpaRule){
// for now check all
if(jpaRule==null || jpaRule.getCondition()==null || jpaRule.getCondition().getExpression()==null || jpaRule.getCondition().getExpression().getPrimitiveValue()==null){
return null;
}
org.ebayopensource.turmeric.security.v1.services.Rule rule = new org.ebayopensource.turmeric.security.v1.services.Rule();
rule.setEffect(org.ebayopensource.turmeric.security.v1.services.EffectType.
fromValue(jpaRule.getEffect().value()));
rule.setEffectDuration(jpaRule.getEffectDuration());
rule.setRolloverPeriod(jpaRule.getRolloverPeriod());
rule.setRuleId(jpaRule.getId());
rule.setPriority(jpaRule.getPriority());
rule.setRuleName(jpaRule.getRuleName());
KeyValuePair kvpEmails = new KeyValuePair();
kvpEmails.setKey("NotifyEmails");
kvpEmails.setValue(jpaRule.getNotifyEmails());
rule.getAttribute().add(kvpEmails);
KeyValuePair kvpActive = new KeyValuePair();
kvpActive.setKey("NotifyActive");
kvpActive.setValue(Boolean.toString(jpaRule.isNotifyActive()));
rule.getAttribute().add(kvpActive);
// FIXME WHERE to get version
// rule.setVersion();
rule.setCondition(convert(jpaRule.getCondition()));
return rule;
}
private static org.ebayopensource.turmeric.security.v1.services.Condition convert(Condition jpaCondition){
if(jpaCondition==null){
return null;
}
org.ebayopensource.turmeric.security.v1.services.Condition condition = new org.ebayopensource.turmeric.security.v1.services.Condition();
condition.setExpression(convert(jpaCondition.getExpression()));
return condition;
}
private static org.ebayopensource.turmeric.security.v1.services.Expression convert(Expression jpaExpression){
if(jpaExpression==null){
return null;
}
org.ebayopensource.turmeric.security.v1.services.Expression expression = new org.ebayopensource.turmeric.security.v1.services.Expression();
expression.setPrimitiveValue(convert(jpaExpression.getPrimitiveValue()));
expression.setComment(jpaExpression.getComment());
expression.setName(jpaExpression.getName());
return expression;
}
private static org.ebayopensource.turmeric.security.v1.services.PrimitiveValue convert(PrimitiveValue jpaPrimitiveValue){
if( jpaPrimitiveValue== null ){
return null;
}
org.ebayopensource.turmeric.security.v1.services.PrimitiveValue primitiveValue = new org.ebayopensource.turmeric.security.v1.services.PrimitiveValue();
primitiveValue.setType(convert(jpaPrimitiveValue.getType()));
primitiveValue.setValue(jpaPrimitiveValue.getValue());
return primitiveValue;
}
private static org.ebayopensource.turmeric.security.v1.services.SupportedPrimitive convert( SupportedPrimitive primitive){
org.ebayopensource.turmeric.security.v1.services.SupportedPrimitive supportedPrimitive=null;
if(SupportedPrimitive.BOOLEAN.equals(primitive)){
supportedPrimitive = org.ebayopensource.turmeric.security.v1.services.SupportedPrimitive.BOOLEAN;
} else if(SupportedPrimitive.STRING.equals(primitive)){
supportedPrimitive = org.ebayopensource.turmeric.security.v1.services.SupportedPrimitive.STRING;
}
return supportedPrimitive;
}
/**
* Convert.
*
* @param rule
* the rule
* @return the rule
*/
public static Rule convert(final org.ebayopensource.turmeric.security.v1.services.Rule rule) {
if(rule==null || rule.getCondition()==null || rule.getCondition().getExpression()==null || rule.getCondition().getExpression().getPrimitiveValue()==null){
return null;
}
String notifyEmails = null;
boolean notifyActive = false;
if(rule.getAttribute()!= null && rule.getAttribute().size() >0 ){
for (int i = 0; i < rule.getAttribute().size(); i++) {
org.ebayopensource.turmeric.security.v1.services.KeyValuePair keyValuePair = rule.getAttribute().get(i);
if("NotifyEmails".equalsIgnoreCase(keyValuePair.getKey())){
notifyEmails = keyValuePair.getValue();
}
if("NotifyActive".equalsIgnoreCase(keyValuePair.getKey())){
notifyActive = Boolean.parseBoolean(keyValuePair.getValue());
}
}
}
return new Rule(rule.getRuleName(), rule.getDescription(), rule.getEffectDuration(),
rule.getRolloverPeriod(), rule.getPriority(), convert(rule.getEffect()),
convert(rule.getCondition()), notifyEmails, notifyActive);
}
/**
* Convert.
*
* @param condition
* the condition
* @return the condition
*/
public static Condition convert(final org.ebayopensource.turmeric.security.v1.services.Condition condition) {
org.ebayopensource.turmeric.policyservice.model.Condition conditionResult = null;
if(null != condition){
conditionResult = new org.ebayopensource.turmeric.policyservice.model.Condition(
convert(condition.getExpression()));
}
return conditionResult ;
}
/**
* Convert.
*
* @param expression
* the expression
* @return the expression
*/
public static Expression convert(final org.ebayopensource.turmeric.security.v1.services.Expression expression) {
return new org.ebayopensource.turmeric.policyservice.model.Expression(
convert(expression.getPrimitiveValue()), expression.getComment(), expression.getName());
}
/**
* Convert.
*
* @param pv
* the pv
* @return the primitive value
*/
public static PrimitiveValue convert(final org.ebayopensource.turmeric.security.v1.services.PrimitiveValue pv) {
return new org.ebayopensource.turmeric.policyservice.model.PrimitiveValue(
pv.getValue(), (pv.getType()==null?SupportedPrimitive.STRING:org.ebayopensource.turmeric.policyservice.model.SupportedPrimitive.fromValue(pv.getType().value())));
}
/**
* Convert.
*
* @param effectType
* the effect type
* @return the effect type
*/
public static EffectType convert(final org.ebayopensource.turmeric.security.v1.services.EffectType effectType) {
return EffectType.valueOf(effectType.name());
}
}