/*
* OpenClinica is distributed under the
* GNU Lesser General Public License (GNU LGPL).
* For details see: http://www.openclinica.org/license
*
* Copyright 2003-2008 Akaza Research
*/
package org.akaza.openclinica.domain.rule;
import org.akaza.openclinica.domain.rule.action.RuleActionComparator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
public class RulesPostImportContainer {
private ArrayList<RuleSetBean> ruleSets;
private ArrayList<RuleBean> ruleDefs;
private ArrayList<AuditableBeanWrapper<RuleBean>> validRuleDefs = new ArrayList<AuditableBeanWrapper<RuleBean>>();
private ArrayList<AuditableBeanWrapper<RuleBean>> duplicateRuleDefs = new ArrayList<AuditableBeanWrapper<RuleBean>>();
private ArrayList<AuditableBeanWrapper<RuleBean>> inValidRuleDefs = new ArrayList<AuditableBeanWrapper<RuleBean>>();
// Utility lists to help with Rule Import
private HashMap<String, AuditableBeanWrapper<RuleBean>> validRules = new HashMap<String, AuditableBeanWrapper<RuleBean>>();
private HashMap<String, AuditableBeanWrapper<RuleBean>> inValidRules = new HashMap<String, AuditableBeanWrapper<RuleBean>>();
private ArrayList<AuditableBeanWrapper<RuleSetBean>> validRuleSetDefs = new ArrayList<AuditableBeanWrapper<RuleSetBean>>();
private ArrayList<AuditableBeanWrapper<RuleSetBean>> duplicateRuleSetDefs = new ArrayList<AuditableBeanWrapper<RuleSetBean>>();
private ArrayList<AuditableBeanWrapper<RuleSetBean>> inValidRuleSetDefs = new ArrayList<AuditableBeanWrapper<RuleSetBean>>();
private ArrayList<String> validRuleSetExpressionValues = new ArrayList<String>();
/**
*
* Take the given a list of Rule Set Rules and populate ruleSets & ruleDefs so that this object could be marshalled.
*
* @param ruleSetRules
*/
public void populate(List<RuleSetRuleBean> ruleSetRules) {
HashMap<Integer, RuleSetBean> ruleSets = new HashMap<Integer, RuleSetBean>();
HashSet<RuleBean> rules = new HashSet<RuleBean>();
for (RuleSetRuleBean rsr : ruleSetRules) {
if (rsr.getActions().size() > 0) {
Collections.sort(rsr.getActions(), new RuleActionComparator());
}
Integer key = rsr.getRuleSetBean().getId();
if (ruleSets.containsKey(key)) {
RuleSetBean rs = ruleSets.get(key);
rs.setTarget(rsr.getRuleSetBean().getTarget());
if (rsr.getRuleSetBean().isRunSchedule())
rs.setRunOnSchedule(new RunOnSchedule(rsr.getRuleSetBean().getRunTime()));
rs.addRuleSetRuleForDisplay(rsr);
} else {
RuleSetBean rs = new RuleSetBean();
rs.setTarget(rsr.getRuleSetBean().getTarget());
if (rsr.getRuleSetBean().isRunSchedule())
rs.setRunOnSchedule(new RunOnSchedule(rsr.getRuleSetBean().getRunTime()));
rs.addRuleSetRuleForDisplay(rsr);
ruleSets.put(key, rs);
}
rules.add(rsr.getRuleBean());
}
for (Map.Entry<Integer, RuleSetBean> entry : ruleSets.entrySet()) {
this.addRuleSet(entry.getValue());
}
for (RuleBean theRule : rules) {
this.addRuleDef(theRule);
}
}
// GETTERS & SETTERS
public ArrayList<String> getValidRuleSetExpressionValues() {
return validRuleSetExpressionValues;
}
public void setValidRuleSetExpressionValues(ArrayList<String> validRuleSetExpressionValues) {
this.validRuleSetExpressionValues = validRuleSetExpressionValues;
}
public ArrayList<RuleBean> getRuleDefs() {
return ruleDefs;
}
public void setRuleDefs(ArrayList<RuleBean> ruleDefs) {
this.ruleDefs = ruleDefs;
}
public void addRuleSet(RuleSetBean ruleSetBean) {
if (ruleSets == null) {
ruleSets = new ArrayList<RuleSetBean>();
}
getRuleSets().add(ruleSetBean);
}
public void addRuleDef(RuleBean ruleBean) {
if (ruleDefs == null) {
ruleDefs = new ArrayList<RuleBean>();
}
getRuleDefs().add(ruleBean);
}
public void initializeRuleDef() {
if (ruleDefs == null) {
ruleDefs = new ArrayList<RuleBean>();
}
}
public ArrayList<RuleSetBean> getRuleSets() {
return ruleSets;
}
public void setRuleSets(ArrayList<RuleSetBean> ruleSets) {
this.ruleSets = ruleSets;
}
public ArrayList<AuditableBeanWrapper<RuleBean>> getValidRuleDefs() {
return validRuleDefs;
}
public void setValidRuleDefs(ArrayList<AuditableBeanWrapper<RuleBean>> validruleDefs) {
this.validRuleDefs = validruleDefs;
}
public ArrayList<AuditableBeanWrapper<RuleBean>> getDuplicateRuleDefs() {
return duplicateRuleDefs;
}
public void setDuplicateRuleDefs(ArrayList<AuditableBeanWrapper<RuleBean>> duplicateRuleDefs) {
this.duplicateRuleDefs = duplicateRuleDefs;
}
public ArrayList<AuditableBeanWrapper<RuleBean>> getInValidRuleDefs() {
return inValidRuleDefs;
}
public void setInValidRuleDefs(ArrayList<AuditableBeanWrapper<RuleBean>> inValidRuleDefs) {
this.inValidRuleDefs = inValidRuleDefs;
}
/**
* @return the validRules
*/
public HashMap<String, AuditableBeanWrapper<RuleBean>> getValidRules() {
return validRules;
}
/**
* @param validRules
* the validRules to set
*/
public void setValidRules(HashMap<String, AuditableBeanWrapper<RuleBean>> validRules) {
this.validRules = validRules;
}
/**
* @return the inValidRules
*/
public HashMap<String, AuditableBeanWrapper<RuleBean>> getInValidRules() {
return inValidRules;
}
/**
* @param inValidRules
* the inValidRules to set
*/
public void setInValidRules(HashMap<String, AuditableBeanWrapper<RuleBean>> inValidRules) {
this.inValidRules = inValidRules;
}
/**
* @return the validRuleSetDefs
*/
public ArrayList<AuditableBeanWrapper<RuleSetBean>> getValidRuleSetDefs() {
return validRuleSetDefs;
}
/**
* @param validRuleSetDefs
* the validRuleSetDefs to set
*/
public void setValidRuleSetDefs(ArrayList<AuditableBeanWrapper<RuleSetBean>> validRuleSetDefs) {
this.validRuleSetDefs = validRuleSetDefs;
}
/**
* @return the duplicateRuleSetDefs
*/
public ArrayList<AuditableBeanWrapper<RuleSetBean>> getDuplicateRuleSetDefs() {
return duplicateRuleSetDefs;
}
/**
* @param duplicateRuleSetDefs
* the duplicateRuleSetDefs to set
*/
public void setDuplicateRuleSetDefs(ArrayList<AuditableBeanWrapper<RuleSetBean>> duplicateRuleSetDefs) {
this.duplicateRuleSetDefs = duplicateRuleSetDefs;
}
/**
* @return the inValidRuleSetDefs
*/
public ArrayList<AuditableBeanWrapper<RuleSetBean>> getInValidRuleSetDefs() {
return inValidRuleSetDefs;
}
/**
* @param inValidRuleSetDefs
* the inValidRuleSetDefs to set
*/
public void setInValidRuleSetDefs(ArrayList<AuditableBeanWrapper<RuleSetBean>> inValidRuleSetDefs) {
this.inValidRuleSetDefs = inValidRuleSetDefs;
}
}