package org.codefaces.httpclient.internal.ajax;
import java.io.IOException;
import org.eclipse.rwt.lifecycle.AbstractWidgetLCA;
import org.eclipse.rwt.lifecycle.JSWriter;
import org.eclipse.rwt.lifecycle.WidgetLCAUtil;
import org.eclipse.swt.widgets.Widget;
public class AjaxClientWidgetLCA extends AbstractWidgetLCA {
private static final String JS_PARAM_STATUS = "status";
private static final String JS_PARAM_CONTENT = "content";
private static final String JS_PARAM_REQUEST_ID = "requestId";
private static final String JS_SEND_JSONP_REQUEST = "sendJsonpRequest";
@Override
public void preserveValues(Widget widget) {
// do nothing
}
@Override
public void renderChanges(Widget widget) throws IOException {
AjaxClientWidget ajaxClientWidget = (AjaxClientWidget) widget;
JsonGet jsonGet = ajaxClientWidget.getClient().nextRequest();
if (jsonGet == null) {
return;
}
String requestId = jsonGet.getRequestId();
String url = jsonGet.getUrl();
int timeout = jsonGet.getTimeout();
JSWriter writer = JSWriter.getWriterFor(widget);
writer.call(JS_SEND_JSONP_REQUEST, new Object[] { requestId, url,
timeout });
}
@Override
public void renderDispose(Widget widget) throws IOException {
JSWriter writer = JSWriter.getWriterFor(widget);
writer.dispose();
}
@Override
public void renderInitialization(Widget widget) throws IOException {
JSWriter writer = JSWriter.getWriterFor(widget);
writer.newWidget(AjaxClientWidget.class.getName());
}
@Override
public void readData(final Widget widget) {
String status = WidgetLCAUtil
.readPropertyValue(widget, JS_PARAM_STATUS);
if (status != null) {
JsonResponse.Status responseStatus;
if (status.equals("success")) {
responseStatus = JsonResponse.Status.SUCCESS;
} else if (status.equals("timeout")) {
responseStatus = JsonResponse.Status.TIMEOUT;
} else {
responseStatus = JsonResponse.Status.ERROR;
}
String requestId = WidgetLCAUtil.readPropertyValue(widget,
JS_PARAM_REQUEST_ID);
String content = WidgetLCAUtil.readPropertyValue(widget,
JS_PARAM_CONTENT);
final JsonResponse response = new JsonResponse(requestId,
responseStatus, content);
((AjaxClientWidget) widget).getClient().setJsonResponse(response);
}
}
}