Created
April 7, 2013 17:35
-
-
Save dmitrygusev/5331488 to your computer and use it in GitHub Desktop.
EventResponseRenderer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface EventResponseRenderer | |
{ | |
String render(RenderEvent renderEvent); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.ByteArrayOutputStream; | |
import java.io.IOException; | |
import java.io.PrintWriter; | |
import org.apache.tapestry5.SymbolConstants; | |
import org.apache.tapestry5.internal.EmptyEventContext; | |
import org.apache.tapestry5.internal.services.RequestImpl; | |
import org.apache.tapestry5.internal.services.ResponseImpl; | |
import org.apache.tapestry5.internal.services.TapestrySessionFactory; | |
import org.apache.tapestry5.ioc.annotations.Inject; | |
import org.apache.tapestry5.ioc.annotations.Symbol; | |
import org.apache.tapestry5.services.Ajax; | |
import org.apache.tapestry5.services.ComponentEventRequestHandler; | |
import org.apache.tapestry5.services.ComponentEventRequestParameters; | |
import org.apache.tapestry5.services.RequestGlobals; | |
public class EventResponseRendererImpl implements EventResponseRenderer | |
{ | |
@Ajax | |
@Inject private ComponentEventRequestHandler ajaxHandler; | |
@Inject private RequestGlobals requestGlobals; | |
@Symbol(SymbolConstants.CHARSET) | |
@Inject private String applicationCharset; | |
@Inject private TapestrySessionFactory sessionFactory; | |
@Override | |
public String render(RenderEvent renderEvent) | |
{ | |
ByteArrayOutputStream out = new ByteArrayOutputStream(); | |
final PrintWriter printWriter = new PrintWriter(out); | |
requestGlobals.storeRequestResponse( | |
new RequestImpl(requestGlobals.getHTTPServletRequest(), applicationCharset, sessionFactory), | |
new ResponseImpl(requestGlobals.getHTTPServletRequest(), | |
requestGlobals.getHTTPServletResponse()) | |
{ | |
@Override | |
public PrintWriter getPrintWriter(String contentType) | |
throws IOException | |
{ | |
return printWriter; | |
} | |
}); | |
try | |
{ | |
ComponentEventRequestParameters parameters = new ComponentEventRequestParameters( | |
renderEvent.getPageName(), | |
renderEvent.getPageName(), | |
renderEvent.getNestedComponentId(), | |
RenderEvent.RENDER_EVENT_TYPE, | |
new EmptyEventContext(), | |
new RenderEventContext(renderEvent.getEventArgs())); | |
ajaxHandler.handle(parameters); | |
return new String(out.toByteArray(), applicationCharset); | |
} | |
catch (IOException e) | |
{ | |
throw new RuntimeException(e); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RenderEvent | |
{ | |
public static final String RENDER_EVENT_TYPE = "Render"; | |
private String pageName; | |
private String nestedComponentId; | |
private Object[] eventArgs; | |
public RenderEvent(String pageName, String nestedComponentId, Object... eventArgs) | |
{ | |
this.pageName = pageName; | |
this.nestedComponentId = nestedComponentId; | |
this.eventArgs = eventArgs; | |
} | |
public String getPageName() | |
{ | |
return pageName; | |
} | |
public String getNestedComponentId() | |
{ | |
return nestedComponentId; | |
} | |
public Object[] getEventArgs() | |
{ | |
return eventArgs; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.apache.tapestry5.EventContext; | |
public class RenderEventContext implements EventContext | |
{ | |
private Object[] args; | |
public RenderEventContext(Object... args) | |
{ | |
this.args = args != null ? args : new Object[0]; | |
} | |
@Override | |
public int getCount() | |
{ | |
return args.length; | |
} | |
@SuppressWarnings("unchecked") | |
@Override | |
public <T> T get(Class<T> desiredType, int index) | |
{ | |
if (!desiredType.isAssignableFrom(args[index].getClass())) | |
{ | |
throw new IllegalArgumentException("Argument at index " | |
+ index + " expected to be of class " | |
+ desiredType.getName() + ", but was " | |
+ args[index].getClass()); | |
} | |
return (T) args[index]; | |
} | |
@Override | |
public String[] toStrings() | |
{ | |
// Not used | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment