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 }