/* * (C) Copyright 2006-2008 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * bstefanescu * * $Id$ */ package org.nuxeo.ecm.platform.gwt.client.ui.navigator; import org.nuxeo.ecm.platform.gwt.client.ui.login.LoginDialog; import com.google.gwt.user.client.Window; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.RestDataSource; /** * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> * */ public class NuxeoDataSource extends RestDataSource { /** * Hack to install custom error handler - see RPCManager.js line 3072 */ static { initErrorHandler(); } public static native void initErrorHandler()/*-{ $wnd.isc.DataSource.addMethods({ handleError : function (resp, req) { var responseJ = @com.smartgwt.client.data.DSResponse::new(Lcom/google/gwt/core/client/JavaScriptObject;)(resp); var requestJ = @com.smartgwt.client.data.DSRequest::new(Lcom/google/gwt/core/client/JavaScriptObject;)(req); return @org.nuxeo.ecm.platform.gwt.client.ui.navigator.NuxeoDataSource::handleError(Lcom/smartgwt/client/data/DSResponse;Lcom/smartgwt/client/data/DSRequest;)(responseJ, requestJ); } }); }-*/; public static Boolean handleError(DSResponse response, DSRequest req) { int status = response.getStatus(); if (status == -7 || response.getHttpResponseCode() == 401) { LoginDialog dlg = new LoginDialog(); dlg.show(); } else { String[] errors = response.getAttributeAsStringArray("data"); if (errors!= null && errors.length > 0) { String msg = ""; for (String error : errors) { msg = error + "\r\n"; } Window.alert("Server Error. Code: "+status+". HTTP code: "+response.getHttpResponseCode()+"\r\n\r\n"+msg); } else { Window.alert("Server Error. Code: "+status+". HTTP code: "+response.getHttpResponseCode()); } } return Boolean.FALSE; } }