1 package org.mr.core.util.patterns.flow; 2 3 import org.w3c.dom.Element ; 4 import org.mr.core.util.exceptions.CreationException; 5 6 import java.util.ArrayList ; 7 import java.util.HashMap ; 8 import java.util.List ; 9 import java.util.Map ; 10 11 56 57 65 public class DefaultFlow implements Flow{ 66 67 69 protected List m_entryDeclarations = null; 71 72 HashMap m_steps = null; 74 75 public DefaultFlow() { 76 m_steps = new HashMap (); 77 m_entryDeclarations = new ArrayList (); 78 } 79 80 public void addStep(String i_id, Declaration i_from, Declaration i_to, Condition i_conditions){ 81 if(i_from == null){ 83 i_from = new EntryPointDeclaration(); 84 m_entryDeclarations.add(i_from); 85 } 86 87 List steps = (List )m_steps.get(i_from); 88 if(steps == null){ 89 steps = new ArrayList (); 90 } 91 Step step = new Step(i_id, i_from,i_to); 93 step.addConditions(i_conditions); 95 steps.add(step); 96 m_steps.put(i_from, steps); 97 } 98 99 public boolean hasMoreSteps(Declaration i_current, Map i_parameters){ 100 List steps = (List )m_steps.get(i_current); 101 if(steps != null && !steps.isEmpty()) 102 return true; 103 return false; 104 } 105 106 public Declaration getNextStep(Declaration i_current, Map i_parameters){ 107 if(i_current == null){ 109 for(int i = 0 ; i < m_entryDeclarations.size() ; i++){ 110 Declaration declaration = search((Declaration)m_entryDeclarations.get(i),i_parameters); 111 if(declaration != null) 112 return declaration; 113 } 114 return null; 115 }else{ 116 return search(i_current, i_parameters); 118 } 119 120 } 121 122 128 private Declaration search(Declaration i_declaration, Map i_parameters){ 129 List steps = (List )m_steps.get(i_declaration); 130 if(steps == null) 131 return null; 132 for(int i = 0; i < steps.size() ; i++){ 133 Step step = (Step)steps.get(i); 134 if(step.isMetStepCondition(i_parameters)) 135 return step.getNextStep(); 136 } 137 return null; 138 } 139 140 143 private class Step{ 144 private Declaration m_to; 145 private Condition m_conditions = null; 146 147 public Step(String i_id, Declaration i_from, Declaration i_to) { 148 m_to = i_to; 149 m_conditions = null; 150 } 151 152 public void addConditions(Condition i_conditions) { 153 m_conditions = i_conditions; 154 } 155 156 public Declaration getNextStep() { 157 return m_to; 158 } 159 160 public boolean isMetStepCondition(Map i_params){ 161 167 return m_conditions.metCondition(i_params); 168 } 169 } 170 171 174 private class EntryPointDeclaration implements Declaration{ 175 176 public Map execute(Map i_params) { 177 return i_params; 178 } 179 180 public void configure(Element i_element) throws CreationException { 181 } 182 } 183 } 184 | Popular Tags |