1 15 package org.apache.tapestry.callback; 16 17 import org.apache.hivemind.ApplicationRuntimeException; 18 import org.apache.hivemind.util.Defense; 19 import org.apache.tapestry.IComponent; 20 import org.apache.tapestry.IDirect; 21 import org.apache.tapestry.IPage; 22 import org.apache.tapestry.IRequestCycle; 23 24 30 31 public class DirectCallback implements ICallback 32 { 33 36 37 private static final long serialVersionUID = -8888847655917503471L; 38 39 private String _pageName; 40 41 private String _componentIdPath; 42 43 private Object [] _parameters; 44 45 public String toString() 46 { 47 StringBuffer buffer = new StringBuffer ("DirectCallback["); 48 49 buffer.append(_pageName); 50 buffer.append('/'); 51 buffer.append(_componentIdPath); 52 53 if (_parameters != null) 54 { 55 for (int i = 0; i < _parameters.length; i++) 56 { 57 buffer.append(i == 0 ? " " : ", "); 58 buffer.append(_parameters[i]); 59 } 60 } 61 62 buffer.append(']'); 63 64 return buffer.toString(); 65 66 } 67 68 72 73 public DirectCallback(IDirect component, Object [] parameters) 74 { 75 Defense.notNull(component, "component"); 76 77 _pageName = component.getPage().getPageName(); 78 _componentIdPath = component.getIdPath(); 79 _parameters = parameters; 80 } 81 82 88 89 public void performCallback(IRequestCycle cycle) 90 { 91 IPage page = cycle.getPage(_pageName); 92 IComponent component = page.getNestedComponent(_componentIdPath); 93 IDirect direct = null; 94 95 try 96 { 97 direct = (IDirect) component; 98 } 99 catch (ClassCastException ex) 100 { 101 throw new ApplicationRuntimeException(CallbackMessages.componentNotDirect(component), 102 component, null, ex); 103 } 104 105 cycle.setListenerParameters(_parameters); 106 direct.trigger(cycle); 107 } 108 } | Popular Tags |