use of com.github.bordertech.wcomponents.ComponentWithContext in project wcomponents by BorderTech.
the class AjaxSetupInterceptor method serviceRequest.
/**
* Setup the AJAX operation details.
*
* @param request the request being serviced.
*/
@Override
public void serviceRequest(final Request request) {
// Get trigger id
String triggerId = request.getParameter(WServlet.AJAX_TRIGGER_PARAM_NAME);
if (triggerId == null) {
throw new SystemException("No AJAX trigger id to on request");
}
// Find the Component for this trigger
ComponentWithContext trigger = WebUtilities.getComponentById(triggerId, true);
if (trigger == null) {
throw new SystemException("No component found for AJAX trigger " + triggerId + ".");
}
WComponent triggerComponent = trigger.getComponent();
// Check for an internal AJAX request (if client has flagged it as internal)
boolean internal = request.getParameter(WServlet.AJAX_TRIGGER_INTERNAL_PARAM_NAME) != null;
AjaxOperation ajaxOperation = null;
if (internal) {
if (!(triggerComponent instanceof AjaxInternalTrigger)) {
throw new SystemException("AJAX trigger [" + triggerId + "] does not support internal actions.");
}
// Create internal operation
ajaxOperation = new AjaxOperation(triggerId);
} else {
// Check for a registered AJAX operation
ajaxOperation = AjaxHelper.getAjaxOperation(triggerId);
// TODO This is only required until all components start using the Internal param flag
if (ajaxOperation != null && "GET".equals(request.getMethod()) && triggerComponent instanceof AjaxInternalTrigger) {
// Create internal operation
ajaxOperation = new AjaxOperation(triggerId);
}
}
// If no operation registered, check if the trigger supports internal AJAX then assume it is an Internal Action
if (ajaxOperation == null && trigger.getComponent() instanceof AjaxInternalTrigger) {
// Create internal operation
ajaxOperation = new AjaxOperation(triggerId);
}
// No Valid operation
if (ajaxOperation == null) {
throw new SystemException("No AJAX operation has been registered for trigger " + triggerId + ".");
}
// Set current operation
AjaxHelper.setCurrentOperationDetails(ajaxOperation, trigger);
// Process Service Request
super.serviceRequest(request);
}
use of com.github.bordertech.wcomponents.ComponentWithContext in project wcomponents by BorderTech.
the class DefaultPageShell method getApplicationTitle.
/**
* Retrieves the application title for the given context. This mess is required due to WWindow essentially existing
* as a separate UI root. If WWindow is eventually removed, then we can just retrieve the title from the root
* WApplication.
*
* @param uic the context to check.
* @return the current application title.
*/
private String getApplicationTitle(final UIContext uic) {
WComponent root = uic.getUI();
String title = root instanceof WApplication ? ((WApplication) root).getTitle() : null;
Map<String, String> params = uic.getEnvironment().getHiddenParameters();
String target = params.get(WWindow.WWINDOW_REQUEST_PARAM_KEY);
if (target != null) {
ComponentWithContext targetComp = WebUtilities.getComponentById(target, true);
if (targetComp != null && targetComp.getComponent() instanceof WWindow) {
try {
UIContextHolder.pushContext(targetComp.getContext());
title = ((WWindow) targetComp.getComponent()).getTitle();
} finally {
UIContextHolder.popContext();
}
}
}
return title == null ? "" : title;
}
use of com.github.bordertech.wcomponents.ComponentWithContext in project wcomponents by BorderTech.
the class TargetableInterceptor method preparePaint.
/**
* {@inheritDoc}
*/
@Override
public void preparePaint(final Request request) {
ComponentWithContext target = WebUtilities.getComponentById(targetId, true);
if (target == null) {
throw new SystemException("No target component found for id " + targetId);
}
UIContextHolder.pushContext(target.getContext());
try {
super.preparePaint(request);
} finally {
UIContextHolder.popContext();
}
}
use of com.github.bordertech.wcomponents.ComponentWithContext in project wcomponents by BorderTech.
the class TargetableInterceptor method serviceRequest.
/**
* {@inheritDoc}
*/
@Override
public void serviceRequest(final Request request) {
// Check if this is a targeted request
targetId = request.getParameter(Environment.TARGET_ID);
if (targetId == null) {
throw new SystemException("No target id request parameter");
}
ComponentWithContext target = WebUtilities.getComponentById(targetId, true);
if (target == null) {
throw new SystemException("No target component found for id " + targetId);
}
// go straight to the target component.
attachUI(target.getComponent());
UIContextHolder.pushContext(target.getContext());
try {
super.serviceRequest(request);
} finally {
UIContextHolder.popContext();
}
}
use of com.github.bordertech.wcomponents.ComponentWithContext in project wcomponents by BorderTech.
the class WWindowInterceptor method serviceRequest.
/**
* Temporarily replaces the environment while the request is being handled.
*
* @param request the request being responded to.
*/
@Override
public void serviceRequest(final Request request) {
// Get window id off the request
windowId = request.getParameter(WWindow.WWINDOW_REQUEST_PARAM_KEY);
if (windowId == null) {
super.serviceRequest(request);
} else {
// Get the window component
ComponentWithContext target = WebUtilities.getComponentById(windowId, true);
if (target == null) {
throw new SystemException("No window component for id " + windowId);
}
// Setup the Environment on the context
UIContext uic = UIContextHolder.getCurrentPrimaryUIContext();
Environment originalEnvironment = uic.getEnvironment();
uic.setEnvironment(new EnvironmentDelegate(originalEnvironment, windowId, target));
if (attachWindow) {
attachUI(target.getComponent());
}
UIContextHolder.pushContext(target.getContext());
try {
super.serviceRequest(request);
} finally {
uic.setEnvironment(originalEnvironment);
UIContextHolder.popContext();
}
}
}
Aggregations