Modified: 
jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DMUtils.java
URL: 
http://svn.apache.org/viewcvs/jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DMUtils.java?rev=231329&r1=231328&r2=231329&view=diff
==============================================================================
--- jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DMUtils.java 
(original)
+++ jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DMUtils.java 
Wed Aug 10 14:10:59 2005
@@ -44,242 +44,242 @@
  */
 public class DMUtils {
 
-       // ******************
-       // PRIVATE CONSTANTS
-       // ******************
-       private static final String NESTED_DATAMODEL_SEPARATOR = "|";
-       
-       private static final String FILLER = ".*";
-       private static final String ID_TOK = "\\$((\\w|_|\\" +
-               NESTED_DATAMODEL_SEPARATOR + ")+)";
-       private static final String START_EXPR = "\\#\\{";
-       private static final String FILLER_NO_END_EXPR = "[^\\}]*";
-       
-       private static final Pattern PATTERN_ID = 
-               Pattern.compile(FILLER + ID_TOK + FILLER);
-       private static final int ID_GROUP = 1;
-       private static final Pattern PATTERN_OPEN_EXPR = 
-               Pattern.compile(FILLER + START_EXPR + FILLER_NO_END_EXPR);
-       
-       // Error messages (to be i18n'zed)
-       private static final String ERR_NO_SUCH_MODEL = "No model for " +
-               "\"{0}\" found as child of \"{1}\"";
-       private static final String ERR_NULL_EXPR = "EL error, \"{0}\"" + 
-               "; JspContext or expression or return type is null";
-       private static final String ERR_BAD_EXPR = "EL error while " +
-               "evaluating expression: \"{0}\"";
-       
-       // Logging
-       private static Log log = LogFactory.getLog(DMUtils.class);
-
-       // ******************
-       // PUBLIC METHODS
-       // ******************                   
-       /** 
-        * Return true if the given component or container is done.
-        *
-        * @param BaseModel
-        */     
-       public static boolean isChildDone(BaseModel model) {
-               if (model instanceof GroupModel) {
-                       GroupModel grpModel = (GroupModel) model;
-                       if (grpModel.getGroupConfirm() != null) {
-                               if (grpModel.getState() == 
Constants.GRP_STATE_DONE) {
-                                       return true;
-                               }
-                       } else {
-                               if (grpModel.getActiveChildren().size() == 0) {
-                                       
grpModel.setState(Constants.GRP_STATE_DONE);
-                                       return true;
-                               }
-                       }
-                       return false;
-               } else if (model instanceof ComponentModel && 
-                                  model.getState() == Constants.FSM_DONE) {
-                       return true;
-               } else if (model instanceof BaseModel && 
-                               model.getState() == Constants.FSM_DONE) {
-                       return true;
-               }
-               return false;                   
-       }
-
-       // ******************
-       // PACKAGE METHODS
-       // ******************
-       /** 
-        * Activate child so it takes over the dialog from the next turn
-        */
-       static int invokeDormantChild(Map children, List activeChildren,
-               String id) {
-               if (id == null) {
-                       log.info("Null ID of identified target");
-                       return Constants.GRP_ALL_CHILDREN_DONE;
-               }
-               BaseModel model = (BaseModel) children.get(id);
-               if (model != null) {
-                       if (model.getState() == Constants.FSM_DORMANT) {
-                               activeChildren.add(id);
-                               if (model instanceof BaseModel) {
-                                       model.setState(Constants.FSM_INPUT);
-                               } else if (model instanceof GroupModel) {
-                                       
model.setState(Constants.GRP_STATE_RUNNING);
-                               } else if (model instanceof ComponentModel) {
-                                       model.setState(Constants.FSM_INPUT);
-                               }
-                       }
-                       return Constants.GRP_SOME_CHILD_RUNNING;
-               } else {
-                       log.info("ID \"" + id + "\" of target in group dialog " 
+
-                               "configuration is invalid");
-                       return Constants.GRP_ALL_CHILDREN_DONE;
-               }
-       }
-
-       /** 
-        * Two pass evaluation:
-        * 1) Substitute value-of RDCs
-        * 2) Evaluate using the EL evaluator
-        *
-        * @param String to be evaluated
-        */     
-       static Object proprietaryEval(GroupTag groupTag, GroupModel groupModel,
-               String expr, Class retClass, LinkedHashMap lruCache,
-               List tempVars) {
-                       
-               Matcher matcher = PATTERN_ID.matcher(expr);
-               while (matcher.matches()) {
-                       String matched = matcher.group(ID_GROUP);
-                       int start = expr.lastIndexOf(matched) - 1; // -1 for $
-                       int end = start + 1 + matched.length();
-                       String startStr = "", endStr = "";
-                       if (start > 0) {
-                               startStr = expr.substring(0, start);
-                       }
-                       if (end < expr.length()) {
-                               endStr = expr.substring(end);
-                       }
-                       Object[] exprData = null;
-                       Object rdcValue = null;
-                       String pageVar = null;
-                       if (lruCache != null && lruCache.containsKey(matched)) {
-                               exprData = (Object[])lruCache.get(matched);
-                               rdcValue = exprData[0];
-                               pageVar = (String)exprData[1];
-                       } 
-                       if (exprData == null) {
-                               rdcValue = valueOfIDExpr(groupModel, matched);
-                               pageVar = RDCUtils.getNextRDCVarName();
-                               tempVars.add(pageVar);
-                               addToCache(lruCache, matched, rdcValue, 
pageVar);
-                       }
-                       groupTag.getJspContext().setAttribute(pageVar, 
rdcValue);
-                       expr = wrapAsNeeded(startStr, pageVar, endStr);
-                       matcher = PATTERN_ID.matcher(expr);
-               }
-               return valueOfELExpr(groupTag.getJspContext(), expr, retClass);
-       }
-
-
-       // ******************
-       // PRIVATE METHODS
-       // ******************
-       /** 
-        * LRU Cache implementation using LinkedHashMap 
-        *
-        */
-       private static void addToCache(LinkedHashMap cache,
-               String key, Object value, String var) {
-               
-               final int MAX_CACHE_SIZE = 50;
-               if (cache.size() == MAX_CACHE_SIZE) {
-                       cache.remove(cache.keySet().iterator().next());
-               }
-               cache.put(key, new Object[] { value, var });
-       }
-
-       /** 
-        * Make sure the temporary page context variable gets evaluated in an
-        * EL expression
-        *
-        */
-       private static String wrapAsNeeded(String startStr, String pageVar,
-               String endStr) {
-               Matcher openExpr = PATTERN_OPEN_EXPR.matcher(startStr);
-               if (openExpr.matches()) {
-                       return startStr + pageVar + endStr;
-               }
-               return startStr + "#{" + pageVar + "}" + endStr;
-       }
-
-       /** 
-        * Obtain the value of the given ID with respect to the given 
GroupModel.
-        *
-        * @param GroupModel The group model which holds a child of the given ID
-        * @param String The ID whose value is required
-        */
-       private static Object valueOfIDExpr(GroupModel groupModel, String id) { 
-               Object value = null;
-               BaseModel iteratorModel = groupModel;
-               if (id == null) {
-                       return null;
-               }
-               StringTokenizer idTokenizer = new StringTokenizer(id, 
-                       NESTED_DATAMODEL_SEPARATOR);
-               BaseModel model = null;
-               while (idTokenizer.hasMoreTokens()) {
-                       String idTok = idTokenizer.nextToken();
-                       if (iteratorModel instanceof GroupModel) {
-                               model = (BaseModel) ((GroupModel)iteratorModel).
-                                       getLocalMap().get(idTok);
-                       } else if (iteratorModel instanceof ComponentModel) {
-                               model = (BaseModel) 
((ComponentModel)iteratorModel).
-                                       getLocalMap().get(idTok);               
        
-                       }
-                       if (model == null) {
-                               // Invalid child ID specified in XML navigation 
rules
-                               MessageFormat msgFormat = new 
MessageFormat(ERR_NO_SUCH_MODEL);
-                       log.warn(msgFormat.format(new Object[] {idTok, 
-                               iteratorModel.getId()}));
-                       return "$" + id;
-                       }
-                       iteratorModel = model;
-               }
-               value = model.getValue();
-               return value;
-       }
-
-       /** 
-        * Obtain the value of the given JSP 2.0 EL expression in the group
-        * tag's PageContext.
-        *
-        * @param JspContext The context in which the expression should be
-        *                   evaluated
-        * @param String The JSP 2.0  EL expression
-        * @param Class retType The expected return type
-        */             
-       private static Object valueOfELExpr(JspContext ctx, String expr_,
-               Class retType) {
-               
-               if (ctx == null || expr_ == null || retType == null) {
-                       MessageFormat msgFormat = new 
MessageFormat(ERR_NULL_EXPR);
-               log.warn(msgFormat.format(new Object[] {expr_}));
-                       return null;
-               }
-               String expr = expr_.replaceAll("\\#\\{", "\\$\\{");
-               Object value = null;
-               if (retType == null) {
-                       retType = java.lang.String.class;
-               }
-               ExpressionEvaluatorImpl exprEvaluator = new 
ExpressionEvaluatorImpl();
-               VariableResolver varResolver = ctx.getVariableResolver();
-               try {
-                       value = exprEvaluator.evaluate(expr, retType, 
varResolver, null);
-               } catch (javax.servlet.jsp.el.ELException e) {
-                       MessageFormat msgFormat = new 
MessageFormat(ERR_BAD_EXPR);
-               log.warn(msgFormat.format(new Object[] {e.getMessage()}), e);
-                       return null;
-               } // end of try-catch
-               return value;           
-       }
+    // ******************
+    // PRIVATE CONSTANTS
+    // ******************
+    private static final String NESTED_DATAMODEL_SEPARATOR = "|";
+    
+    private static final String FILLER = ".*";
+    private static final String ID_TOK = "\\$((\\w|_|\\" +
+        NESTED_DATAMODEL_SEPARATOR + ")+)";
+    private static final String START_EXPR = "\\#\\{";
+    private static final String FILLER_NO_END_EXPR = "[^\\}]*";
+    
+    private static final Pattern PATTERN_ID = 
+        Pattern.compile(FILLER + ID_TOK + FILLER);
+    private static final int ID_GROUP = 1;
+    private static final Pattern PATTERN_OPEN_EXPR = 
+        Pattern.compile(FILLER + START_EXPR + FILLER_NO_END_EXPR);
+    
+    // Error messages (to be i18n'zed)
+    private static final String ERR_NO_SUCH_MODEL = "No model for " +
+        "\"{0}\" found as child of \"{1}\"";
+    private static final String ERR_NULL_EXPR = "EL error, \"{0}\"" + 
+        "; JspContext or expression or return type is null";
+    private static final String ERR_BAD_EXPR = "EL error while " +
+        "evaluating expression: \"{0}\"";
+    
+    // Logging
+    private static Log log = LogFactory.getLog(DMUtils.class);
+
+    // ******************
+    // PUBLIC METHODS
+    // ******************            
+    /** 
+     * Return true if the given component or container is done.
+     *
+     * @param BaseModel
+     */    
+    public static boolean isChildDone(BaseModel model) {
+        if (model instanceof GroupModel) {
+            GroupModel grpModel = (GroupModel) model;
+            if (grpModel.getGroupConfirm() != null) {
+                if (grpModel.getState() == Constants.GRP_STATE_DONE) {
+                    return true;
+                }
+            } else {
+                if (grpModel.getActiveChildren().size() == 0) {
+                    grpModel.setState(Constants.GRP_STATE_DONE);
+                    return true;
+                }
+            }
+            return false;
+        } else if (model instanceof ComponentModel && 
+                   model.getState() == Constants.FSM_DONE) {
+            return true;
+        } else if (model instanceof BaseModel && 
+                model.getState() == Constants.FSM_DONE) {
+            return true;
+        }
+        return false;            
+    }
+
+    // ******************
+    // PACKAGE METHODS
+    // ******************
+    /** 
+     * Activate child so it takes over the dialog from the next turn
+     */
+    static int invokeDormantChild(Map children, List activeChildren,
+        String id) {
+        if (id == null) {
+            log.info("Null ID of identified target");
+            return Constants.GRP_ALL_CHILDREN_DONE;
+        }
+        BaseModel model = (BaseModel) children.get(id);
+        if (model != null) {
+            if (model.getState() == Constants.FSM_DORMANT) {
+                activeChildren.add(id);
+                if (model instanceof BaseModel) {
+                    model.setState(Constants.FSM_INPUT);
+                } else if (model instanceof GroupModel) {
+                    model.setState(Constants.GRP_STATE_RUNNING);
+                } else if (model instanceof ComponentModel) {
+                    model.setState(Constants.FSM_INPUT);
+                }
+            }
+            return Constants.GRP_SOME_CHILD_RUNNING;
+        } else {
+            log.info("ID \"" + id + "\" of target in group dialog " +
+                "configuration is invalid");
+            return Constants.GRP_ALL_CHILDREN_DONE;
+        }
+    }
+
+    /** 
+     * Two pass evaluation:
+     * 1) Substitute value-of RDCs
+     * 2) Evaluate using the EL evaluator
+     *
+     * @param String to be evaluated
+     */    
+    static Object proprietaryEval(GroupTag groupTag, GroupModel groupModel,
+        String expr, Class retClass, LinkedHashMap lruCache,
+        List tempVars) {
+            
+        Matcher matcher = PATTERN_ID.matcher(expr);
+        while (matcher.matches()) {
+            String matched = matcher.group(ID_GROUP);
+            int start = expr.lastIndexOf(matched) - 1; // -1 for $
+            int end = start + 1 + matched.length();
+            String startStr = "", endStr = "";
+            if (start > 0) {
+                startStr = expr.substring(0, start);
+            }
+            if (end < expr.length()) {
+                endStr = expr.substring(end);
+            }
+            Object[] exprData = null;
+            Object rdcValue = null;
+            String pageVar = null;
+            if (lruCache != null && lruCache.containsKey(matched)) {
+                exprData = (Object[])lruCache.get(matched);
+                rdcValue = exprData[0];
+                pageVar = (String)exprData[1];
+            } 
+            if (exprData == null) {
+                rdcValue = valueOfIDExpr(groupModel, matched);
+                pageVar = RDCUtils.getNextRDCVarName();
+                tempVars.add(pageVar);
+                addToCache(lruCache, matched, rdcValue, pageVar);
+            }
+            groupTag.getJspContext().setAttribute(pageVar, rdcValue);
+            expr = wrapAsNeeded(startStr, pageVar, endStr);
+            matcher = PATTERN_ID.matcher(expr);
+        }
+        return valueOfELExpr(groupTag.getJspContext(), expr, retClass);
+    }
+
+
+    // ******************
+    // PRIVATE METHODS
+    // ******************
+    /** 
+     * LRU Cache implementation using LinkedHashMap 
+     *
+     */
+    private static void addToCache(LinkedHashMap cache,
+        String key, Object value, String var) {
+        
+        final int MAX_CACHE_SIZE = 50;
+        if (cache.size() == MAX_CACHE_SIZE) {
+            cache.remove(cache.keySet().iterator().next());
+        }
+        cache.put(key, new Object[] { value, var });
+    }
+
+    /** 
+     * Make sure the temporary page context variable gets evaluated in an
+     * EL expression
+     *
+     */
+    private static String wrapAsNeeded(String startStr, String pageVar,
+        String endStr) {
+        Matcher openExpr = PATTERN_OPEN_EXPR.matcher(startStr);
+        if (openExpr.matches()) {
+            return startStr + pageVar + endStr;
+        }
+        return startStr + "#{" + pageVar + "}" + endStr;
+    }
+
+    /** 
+     * Obtain the value of the given ID with respect to the given GroupModel.
+     *
+     * @param GroupModel The group model which holds a child of the given ID
+     * @param String The ID whose value is required
+     */
+    private static Object valueOfIDExpr(GroupModel groupModel, String id) {    
+        Object value = null;
+        BaseModel iteratorModel = groupModel;
+        if (id == null) {
+            return null;
+        }
+        StringTokenizer idTokenizer = new StringTokenizer(id, 
+            NESTED_DATAMODEL_SEPARATOR);
+        BaseModel model = null;
+        while (idTokenizer.hasMoreTokens()) {
+            String idTok = idTokenizer.nextToken();
+            if (iteratorModel instanceof GroupModel) {
+                model = (BaseModel) ((GroupModel)iteratorModel).
+                    getLocalMap().get(idTok);
+            } else if (iteratorModel instanceof ComponentModel) {
+                model = (BaseModel) ((ComponentModel)iteratorModel).
+                    getLocalMap().get(idTok);            
+            }
+            if (model == null) {
+                // Invalid child ID specified in XML navigation rules
+                MessageFormat msgFormat = new MessageFormat(ERR_NO_SUCH_MODEL);
+                log.warn(msgFormat.format(new Object[] {idTok, 
+                    iteratorModel.getId()}));
+                return "$" + id;
+            }
+            iteratorModel = model;
+        }
+        value = model.getValue();
+        return value;
+    }
+
+    /** 
+     * Obtain the value of the given JSP 2.0 EL expression in the group
+     * tag's PageContext.
+     *
+     * @param JspContext The context in which the expression should be
+     *                   evaluated
+     * @param String The JSP 2.0  EL expression
+     * @param Class retType The expected return type
+     */        
+    private static Object valueOfELExpr(JspContext ctx, String expr_,
+        Class retType) {
+        
+        if (ctx == null || expr_ == null || retType == null) {
+            MessageFormat msgFormat = new MessageFormat(ERR_NULL_EXPR);
+            log.warn(msgFormat.format(new Object[] {expr_}));
+            return null;
+        }
+        String expr = expr_.replaceAll("\\#\\{", "\\$\\{");
+        Object value = null;
+        if (retType == null) {
+            retType = java.lang.String.class;
+        }
+        ExpressionEvaluatorImpl exprEvaluator = new ExpressionEvaluatorImpl();
+        VariableResolver varResolver = ctx.getVariableResolver();
+        try {
+            value = exprEvaluator.evaluate(expr, retType, varResolver, null);
+        } catch (javax.servlet.jsp.el.ELException e) {
+            MessageFormat msgFormat = new MessageFormat(ERR_BAD_EXPR);
+            log.warn(msgFormat.format(new Object[] {e.getMessage()}), e);
+            return null;
+        } // end of try-catch
+        return value;        
+    }
 }

Modified: 
jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DialogManagerImpl.java
URL: 
http://svn.apache.org/viewcvs/jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DialogManagerImpl.java?rev=231329&r1=231328&r2=231329&view=diff
==============================================================================
--- 
jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DialogManagerImpl.java
 (original)
+++ 
jakarta/taglibs/proper/rdc/trunk/src/org/apache/taglibs/rdc/dm/DialogManagerImpl.java
 Wed Aug 10 14:10:59 2005
@@ -47,258 +47,258 @@
  */
 public abstract class DialogManagerImpl implements DialogManager {
 
-       // Error messages (to be i18n'zed)
-       private static final String ERR_SET_PROPERTY = "Error while setting " +
-               "\"{0}\" property on model with ID \"{1}\"; received error 
message: " +
-               "\"{2}\"\n";
-       
-       // Logging
-       private static Log log = LogFactory.getLog(DialogManagerImpl.class);
-       
-       // The RDC stack
-       protected Stack stack;
-       // The private data Model of Group
-       protected LinkedHashMap stateMap;
-       // The GroupTag object whose dialog we are managing
-       protected GroupTag groupTag;
-       // The state of the group implementation
-       protected int groupState;
-
-       /* Constructor */
-       public DialogManagerImpl() {
-       }       
-       
-       public void setGroupTag(GroupTag groupTag) {
-               this.groupTag = groupTag;
-       }
-
-       /**
-        * Initialiaze this doTag() invocation
-        *
-        *
-        */     
-       public boolean initialize(JspContext ctx, JspFragment bodyFragment) 
-       throws JspException, IOException {
-               
-               //Get the stateMap from the rdcStack to store the GroupModel
-               stack = (Stack) ctx.getAttribute(Constants.STR_RDC_STACK,
-                               PageContext.REQUEST_SCOPE);
-               if (stack != null) {
-                       stateMap = (LinkedHashMap) stack.peek();
-               } else {
-                       throw new JspException(Constants.ERR_NO_RDC_STACK);
-               }
-               if (stateMap == null) {
-                       throw new JspException(Constants.ERR_EMPTY_RDC_STACK);
-               }
-
-               // Get the GroupModel from the stateMap or create one if it 
does not 
-               // exist and put it in stateMap         
-               GroupModel groupModel = (GroupModel) 
stateMap.get(groupTag.getId());
-               if (groupModel == null) {
-                       groupModel = new GroupModel();
-                       groupModel.setId(groupTag.getId());
-                       groupModel.setSubmit(groupTag.getSubmit());
-                       if (groupModel.getLocalMap() == null) {
-                               groupModel.setLocalMap(new LinkedHashMap());
-                       }
-                       if (groupModel.getGroupConfirm() == null && 
-                               groupTag.getConfirm().booleanValue()) {
-                               groupModel.setGroupConfirm(new 
GroupConfirm((PageContext)
-                                       ctx, groupModel, groupTag.getId()));
-                       }
-                       
groupModel.getLocalMap().put(Constants.STR_INIT_ONLY_FLAG, Boolean.TRUE);
-                       stateMap.put(groupTag.getId(), groupModel);
-               }
-
-               /*
-                * Return now, if:
-                * 1) Caller is in initOnly mode, just return as we already 
registered
-                * or
-                * 2) In dormant state then turn for execution has not yet 
come. 
-                * Check for null value as this may be called directly from JSP 
page
-                */
-               if (((Boolean) stateMap.get(Constants.STR_INIT_ONLY_FLAG) == 
Boolean.TRUE)
-                       || (groupModel.getState() == Constants.FSM_DORMANT)) {
-                       return false;
-               }
-
-               Map modelMap = groupModel.getLocalMap();
-               stack.push(modelMap);
-
-               if (modelMap.get(Constants.STR_INIT_ONLY_FLAG) == Boolean.TRUE) 
{
-                       // Ask children to register if in registration phase 
-                       if (bodyFragment != null) {
-                               bodyFragment.invoke(null);
-                       }
-                       // Push the submit down to the children
-                       if (groupTag.getSubmit() != null) {
-                               setPropertyChildren(modelMap, "submit", 
groupTag.getSubmit());
-                       } else {
-                               throw new NullPointerException("Group " + 
groupTag.getId() +
-                                       " has no specified submit URI");
-                       }
-               }
-               return true;
-       }
-
-       /**
-        * Collect the required information from the user
-        *
-        *
-        */             
-       public abstract void collect(JspContext ctx, JspFragment bodyFragment) 
-       throws JspException, IOException;
-       
-       /**
-        * Confirm the collected information from the user
-        *
-        *
-        */             
-       public void confirm() {
-               
-               GroupModel groupModel = (GroupModel) 
stateMap.get(groupTag.getId());
-               Map modelMap = groupModel.getLocalMap();
-               
-               if (groupModel.getState() == Constants.GRP_STATE_RUNNING) {
-                       if (groupState == Constants.GRP_ALL_CHILDREN_DONE) {
-                               if (groupTag.getConfirm().booleanValue()) {
-                                       if 
(groupModel.getGroupConfirm().doGroupConfirmation() == 
-                                               Constants.CONF_STATE_DONE) {
-                                                       
groupModel.setState(Constants.GRP_STATE_DONE);
-                                       }
-                               } else {
-                                       
groupModel.setState(Constants.GRP_STATE_DONE);
-                               }
-                       }
-               } 
-       }
-
-       /**
-        * Finish up this doTag() invocation
-        *
-        *
-        */     
-       public void finish(JspContext ctx) throws JspException, IOException {
-               
-               GroupModel groupModel = (GroupModel) 
stateMap.get(groupTag.getId());
-               Map modelMap = groupModel.getLocalMap();
-       
-               // Populate the return value HashMap and provide the JSP 
scripting var
-               if (groupModel.getState() == Constants.GRP_STATE_DONE) {
-                       Map retValMap = createReturnValueMap(modelMap);
-                       groupModel.setValue(retValMap);
-                       ctx.setAttribute(groupTag.getId(), retValMap);
-               }
-       
-               stack.pop();
-       }
-
-       /** 
-        * Creates the Map for the retVal of the group tag where the keys
-        * are the id's of the children and the value is the BaseModel.value
-        * object of each child
-        *
-        * @param children Map that holds the id's and child data models
-        */
-       private Map createReturnValueMap(Map children) {
-
-               if (children == null) {
-                       return null;
-               }
-
-               Map retValMap = new HashMap();
-               Iterator iter = children.keySet().iterator();
-               String current = null;
-
-               // Loop for all the children in the list, get their values
-               // fill the valuemap with {Id, Value} pair for all children RDCs
-               while (iter.hasNext()) {
-                       current = (String) iter.next();
-                       if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
-                               continue;
-                       }
-                       retValMap.put(current, 
-                               ((BaseModel) children.get(current)).getValue());
-               } // end while() loop over all the children     
-
-               return retValMap;
-       } // end createReturnValueMap()
-       
-       
-       /** 
-        * Set the state of the children
-        *
-        * @param children Map 
-        * @param state the new state for the children
-        * 
-        */
-       protected void setStateChildren(Map children, int state) {
-               if (children == null) {
-                       return;
-               }
-
-               Iterator iter = children.keySet().iterator();
-               String current;
-               BaseModel model = null;
-
-               //Loop while there are elements in the list
-               while (iter.hasNext()) {
-                       current = (String) iter.next();
-                       if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
-                               continue;
-                       }
-
-                       model = (BaseModel) children.get(current);
-                       if (model != null) {
-                               model.setState(state);
-                       }
-               }
-       }
-       
-       /**
-        * Sets property for all children to value
-        * 
-        *
-        */
-       protected void setPropertyChildren(Map children, String propertyName, 
-               Object value) {
-                       
-               if (children == null || propertyName == null ||
-                       propertyName.length() == 0) {
-                       return;
-               }
-
-               Iterator iter = children.keySet().iterator();
-               String current;
-               BaseModel model = null;
-               String setterName = "set" + 
propertyName.substring(0,1).toUpperCase() +
-                       ((propertyName.length() > 1) ? 
propertyName.substring(1) : 
-                       Constants.STR_EMPTY);
-               Class[] argClasses = { value.getClass() };
-               Object[] args = { value };
-
-               //Loop while there are elements in the list
-               while (iter.hasNext()) {
-                       current = (String) iter.next();
-                       if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
-                               continue;
-                       }
-
-                       model = (BaseModel) children.get(current);
-                       if (model != null) {
-                               Class modelClass = model.getClass();
-                               try {   
-                                       Method setter = 
modelClass.getMethod(setterName, 
-                                               argClasses);
-                                       setter.invoke((Object)model, args);
-                               } catch (Exception e) {
-                                       MessageFormat msgFormat = 
-                                               new 
MessageFormat(ERR_SET_PROPERTY);
-                               log.error(msgFormat.format(new Object[] 
{propertyName,
-                                       model.getId(), e.getMessage()}), e);
-                               }
-                       }
-               }
-       }
+    // Error messages (to be i18n'zed)
+    private static final String ERR_SET_PROPERTY = "Error while setting " +
+        "\"{0}\" property on model with ID \"{1}\"; received error message: " +
+        "\"{2}\"\n";
+    
+    // Logging
+    private static Log log = LogFactory.getLog(DialogManagerImpl.class);
+    
+    // The RDC stack
+    protected Stack stack;
+    // The private data Model of Group
+    protected LinkedHashMap stateMap;
+    // The GroupTag object whose dialog we are managing
+    protected GroupTag groupTag;
+    // The state of the group implementation
+    protected int groupState;
+
+    /* Constructor */
+    public DialogManagerImpl() {
+    }    
+    
+    public void setGroupTag(GroupTag groupTag) {
+        this.groupTag = groupTag;
+    }
+
+    /**
+     * Initialiaze this doTag() invocation
+     *
+     *
+     */    
+    public boolean initialize(JspContext ctx, JspFragment bodyFragment) 
+    throws JspException, IOException {
+        
+        //Get the stateMap from the rdcStack to store the GroupModel
+        stack = (Stack) ctx.getAttribute(Constants.STR_RDC_STACK,
+                PageContext.REQUEST_SCOPE);
+        if (stack != null) {
+            stateMap = (LinkedHashMap) stack.peek();
+        } else {
+            throw new JspException(Constants.ERR_NO_RDC_STACK);
+        }
+        if (stateMap == null) {
+            throw new JspException(Constants.ERR_EMPTY_RDC_STACK);
+        }
+
+        // Get the GroupModel from the stateMap or create one if it does not 
+        // exist and put it in stateMap     
+        GroupModel groupModel = (GroupModel) stateMap.get(groupTag.getId());
+        if (groupModel == null) {
+            groupModel = new GroupModel();
+            groupModel.setId(groupTag.getId());
+            groupModel.setSubmit(groupTag.getSubmit());
+            if (groupModel.getLocalMap() == null) {
+                groupModel.setLocalMap(new LinkedHashMap());
+            }
+            if (groupModel.getGroupConfirm() == null && 
+                groupTag.getConfirm().booleanValue()) {
+                groupModel.setGroupConfirm(new GroupConfirm((PageContext)
+                    ctx, groupModel, groupTag.getId()));
+            }
+            groupModel.getLocalMap().put(Constants.STR_INIT_ONLY_FLAG, 
Boolean.TRUE);
+            stateMap.put(groupTag.getId(), groupModel);
+        }
+
+        /*
+         * Return now, if:
+         * 1) Caller is in initOnly mode, just return as we already registered
+         * or
+         * 2) In dormant state then turn for execution has not yet come. 
+         * Check for null value as this may be called directly from JSP page
+         */
+        if (((Boolean) stateMap.get(Constants.STR_INIT_ONLY_FLAG) == 
Boolean.TRUE)
+            || (groupModel.getState() == Constants.FSM_DORMANT)) {
+            return false;
+        }
+
+        Map modelMap = groupModel.getLocalMap();
+        stack.push(modelMap);
+
+        if (modelMap.get(Constants.STR_INIT_ONLY_FLAG) == Boolean.TRUE) {
+            // Ask children to register if in registration phase 
+            if (bodyFragment != null) {
+                bodyFragment.invoke(null);
+            }
+            // Push the submit down to the children
+            if (groupTag.getSubmit() != null) {
+                setPropertyChildren(modelMap, "submit", groupTag.getSubmit());
+            } else {
+                throw new NullPointerException("Group " + groupTag.getId() +
+                    " has no specified submit URI");
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Collect the required information from the user
+     *
+     *
+     */        
+    public abstract void collect(JspContext ctx, JspFragment bodyFragment) 
+    throws JspException, IOException;
+    
+    /**
+     * Confirm the collected information from the user
+     *
+     *
+     */        
+    public void confirm() {
+        
+        GroupModel groupModel = (GroupModel) stateMap.get(groupTag.getId());
+        Map modelMap = groupModel.getLocalMap();
+        
+        if (groupModel.getState() == Constants.GRP_STATE_RUNNING) {
+            if (groupState == Constants.GRP_ALL_CHILDREN_DONE) {
+                if (groupTag.getConfirm().booleanValue()) {
+                    if (groupModel.getGroupConfirm().doGroupConfirmation() == 
+                        Constants.CONF_STATE_DONE) {
+                            groupModel.setState(Constants.GRP_STATE_DONE);
+                    }
+                } else {
+                    groupModel.setState(Constants.GRP_STATE_DONE);
+                }
+            }
+        } 
+    }
+
+    /**
+     * Finish up this doTag() invocation
+     *
+     *
+     */    
+    public void finish(JspContext ctx) throws JspException, IOException {
+        
+        GroupModel groupModel = (GroupModel) stateMap.get(groupTag.getId());
+        Map modelMap = groupModel.getLocalMap();
+    
+        // Populate the return value HashMap and provide the JSP scripting var
+        if (groupModel.getState() == Constants.GRP_STATE_DONE) {
+            Map retValMap = createReturnValueMap(modelMap);
+            groupModel.setValue(retValMap);
+            ctx.setAttribute(groupTag.getId(), retValMap);
+        }
+    
+        stack.pop();
+    }
+
+    /** 
+     * Creates the Map for the retVal of the group tag where the keys
+     * are the id's of the children and the value is the BaseModel.value
+     * object of each child
+     *
+     * @param children Map that holds the id's and child data models
+     */
+    private Map createReturnValueMap(Map children) {
+
+        if (children == null) {
+            return null;
+        }
+
+        Map retValMap = new HashMap();
+        Iterator iter = children.keySet().iterator();
+        String current = null;
+
+        // Loop for all the children in the list, get their values
+        // fill the valuemap with {Id, Value} pair for all children RDCs
+        while (iter.hasNext()) {
+            current = (String) iter.next();
+            if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
+                continue;
+            }
+            retValMap.put(current, 
+                ((BaseModel) children.get(current)).getValue());
+        } // end while() loop over all the children    
+
+        return retValMap;
+    } // end createReturnValueMap()
+    
+    
+    /** 
+     * Set the state of the children
+     *
+     * @param children Map 
+     * @param state the new state for the children
+     * 
+     */
+    protected void setStateChildren(Map children, int state) {
+        if (children == null) {
+            return;
+        }
+
+        Iterator iter = children.keySet().iterator();
+        String current;
+        BaseModel model = null;
+
+        //Loop while there are elements in the list
+        while (iter.hasNext()) {
+            current = (String) iter.next();
+            if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
+                continue;
+            }
+
+            model = (BaseModel) children.get(current);
+            if (model != null) {
+                model.setState(state);
+            }
+        }
+    }
+    
+    /**
+     * Sets property for all children to value
+     * 
+     *
+     */
+    protected void setPropertyChildren(Map children, String propertyName, 
+        Object value) {
+            
+        if (children == null || propertyName == null ||
+            propertyName.length() == 0) {
+            return;
+        }
+
+        Iterator iter = children.keySet().iterator();
+        String current;
+        BaseModel model = null;
+        String setterName = "set" + propertyName.substring(0,1).toUpperCase() +
+            ((propertyName.length() > 1) ? propertyName.substring(1) : 
+            Constants.STR_EMPTY);
+        Class[] argClasses = { value.getClass() };
+        Object[] args = { value };
+
+        //Loop while there are elements in the list
+        while (iter.hasNext()) {
+            current = (String) iter.next();
+            if (current.equals(Constants.STR_INIT_ONLY_FLAG)) {
+                continue;
+            }
+
+            model = (BaseModel) children.get(current);
+            if (model != null) {
+                Class modelClass = model.getClass();
+                try {    
+                    Method setter = modelClass.getMethod(setterName, 
+                        argClasses);
+                    setter.invoke((Object)model, args);
+                } catch (Exception e) {
+                    MessageFormat msgFormat = 
+                        new MessageFormat(ERR_SET_PROPERTY);
+                    log.error(msgFormat.format(new Object[] {propertyName,
+                        model.getId(), e.getMessage()}), e);
+                }
+            }
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to