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 }