View Javadoc

1   package org.weda.workflow.impl;
2   
3   import java.text.MessageFormat;
4   import java.util.ArrayList;
5   import java.util.HashMap;
6   import java.util.List;
7   import java.util.Map;
8   import java.util.Stack;
9   import org.apache.commons.beanutils.BeanUtils;
10  import org.apache.commons.lang.ObjectUtils;
11  import org.weda.action.ActionDescriptor;
12  import org.weda.workflow.EntryContainer;
13  import org.weda.workflow.EntryException;
14  import org.weda.workflow.Path;
15  
16  /**
17   *
18   * @author tim
19   */
20  public class ResultValueEntry extends AbstractEntry {
21      private List<Path> pathsToPush = new ArrayList<Path>();
22      private Map<Path, MessageFormat> formatters = 
23              new HashMap<Path, MessageFormat>();
24      
25      public void init() throws EntryException{
26          super.init();
27          if (pathsToPush!=null && pathsToPush.size()>0){
28              MessageFormat fmt=null;
29              for (Path path: pathsToPush){
30                  fmt=new MessageFormat(path.getPath());
31                  if (fmt.getFormatsByArgumentIndex().length!=0)
32                      formatters.put(path, fmt);
33              }
34          }        
35      }
36      
37      public boolean operate(Stack<String> expressions) 
38          throws EntryException 
39      {
40          boolean res=super.operate(expressions);
41          if (pathsToPush!=null)
42              for (Path path: pathsToPush){
43                  Path newPath = constructPath(path);
44                  getWorkflow().pushPath(newPath);
45              }
46          return res;
47      }
48      
49      public void addPathToPush(Path path){
50          pathsToPush.add(path);
51      }
52      
53      private Path constructPath(Path path) throws EntryException{
54          try{
55              Path newPath = (Path)BeanUtils.cloneBean(path);
56              MessageFormat fmt = formatters.get(path);
57              if (fmt!=null){
58                  EntryContainer pageEntry = 
59                          getContainer().getContainer().getContainer()
60                          .getContainer().getContainer();
61                  newPath.setPath(
62                          fmt.format(pageEntry.getGroupValues().toArray()));                        
63              }
64              return newPath;
65          }catch(Exception e){
66              throw new EntryException(
67                      String.format(
68                          "Can't construct path to new object for workflow " +
69                          "entry (%s)"
70                          , getName())
71                      , e);
72          }
73      }    
74  }