/* * Copyright 2010-2011 Research In Motion Limited. * * 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. */ package blackberry.web.widget.bf; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Hashtable; import javax.microedition.global.Formatter; import net.rim.device.api.browser.field2.BrowserFieldRequest; import net.rim.device.api.browser.field2.BrowserFieldResponse; /** * This class maps http status code to message, and create a response with corresponding error code and message * * @author danlin * */ public class HTTPResponseStatus { // HTTP status code public static final int SC_SUCCESS = 200; public static final int SC_BAD_REQUEST = 400; public static final int SC_FORBIDDEN = 403; public static final int SC_NOT_FOUND = 404; public static final int SC_SERVER_ERROR = 500; public static final int SC_NOT_IMPLEMENTED = 501; public static final int SC_SERVICE_UNAVAILABLE = 503; // HTTP status message private final String SM_SUCCESS = "Success"; private final String SM_BAD_REQUEST = "Bad Request"; private final String SM_FORBIDDEN = "Forbidden"; private final String SM_NOT_FOUND = "Not Found"; private final String SM_SERVER_ERROR = "Server Error"; private final String SM_NOT_IMPLEMENTED = "Not Implemented"; private final String SM_SERVICE_UNAVAILABLE = "Service Unavailable"; // HTTP error message template, it looks like: // 404 Not Found // Request URL: http://localhost:8472/blackberry/system/methodNotExists private final String TMPL_HTTP_ERROR_MESSAGE = "{0}: {2}\nRequest URL: {1}"; // instance variables private BrowserFieldResponse _response; private Hashtable _codeMessageDictionary; public HTTPResponseStatus( int responseCode, BrowserFieldRequest request ) throws IOException { buildCodeMessageDict(); String message = buildMessage( responseCode, request.getURL() ); ByteArrayInputStream input = new ByteArrayInputStream( message.getBytes() ); _response = new BrowserFieldResponse( responseCode, message, request.getURL(), input, request.getHeaders() ); } BrowserFieldResponse getResponse() { return _response; } /** * map code to error message */ private void buildCodeMessageDict() { if( _codeMessageDictionary == null ) { _codeMessageDictionary = new Hashtable(); } _codeMessageDictionary.put( new Integer( SC_SUCCESS ), new String( SM_SUCCESS ) ); _codeMessageDictionary.put( new Integer( SC_BAD_REQUEST ), new String( SM_BAD_REQUEST ) ); _codeMessageDictionary.put( new Integer( SC_FORBIDDEN ), new String( SM_FORBIDDEN ) ); _codeMessageDictionary.put( new Integer( SC_NOT_FOUND ), new String( SM_NOT_FOUND ) ); _codeMessageDictionary.put( new Integer( SC_SERVER_ERROR ), new String( SM_SERVER_ERROR ) ); _codeMessageDictionary.put( new Integer( SC_NOT_IMPLEMENTED ), new String( SM_NOT_IMPLEMENTED ) ); _codeMessageDictionary.put( new Integer( SC_SERVICE_UNAVAILABLE ), new String( SM_SERVICE_UNAVAILABLE ) ); } /** * build error message * * @param code * - error code * @param url * - request url * @return formatted error message */ private String buildMessage( int code, String url ) { String msg = null; buildCodeMessageDict(); String[] msgPrams; msgPrams = new String[ 3 ]; msgPrams[ 0 ] = Integer.toString( code ); msgPrams[ 1 ] = url; msgPrams[ 2 ] = (String) _codeMessageDictionary.get( new Integer( code ) ); msg = Formatter.formatMessage( TMPL_HTTP_ERROR_MESSAGE, msgPrams ); return msg; } }