Java tutorial
/* * This software is distributed under the terms of the FSF * Gnu Lesser General Public License (see lgpl.txt). * * This program is distributed WITHOUT ANY WARRANTY. See the * GNU General Public License for more details. */ package com.scooterframework.web.controller; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONException; import org.json.JSONObject; import org.json.XML; import com.scooterframework.admin.EnvConfig; import com.scooterframework.common.logging.LogUtil; import com.scooterframework.common.util.StringUtil; import com.scooterframework.orm.activerecord.ActiveRecord; /** * DefaultContentHandler is responsible for handling content of a request * format when the specific handler for the format is not available. * * <p> * The content for the following request format is treated as text: * json, txt, text, and xml. * * @author (Fei) John Chen */ public class DefaultContentHandler implements ContentHandler { private static LogUtil log = LogUtil.getLogger(DefaultContentHandler.class.getName()); /** * Handles result content of a HTTP request. * * @param request The HTTP request object. * @param response The HTTP response object. * @param content The content to be sent. * @param format The request format. * @throws IOException * @throws ServletException */ public void handle(HttpServletRequest request, HttpServletResponse response, Object content, String format) throws IOException, ServletException { String mimeType = EnvConfig.getInstance().getMimeType(format); if (EnvConfig.getInstance().isTextFile(format)) { content = convertObjectToString(content, format); } if ("xml".equalsIgnoreCase(format)) { String s = (String) content; if (!s.startsWith("<?xml")) s = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + s; content = s; } ContentHandlerHelper.publish(response, content, mimeType); } protected String convertObjectToString(Object data, String format) { String spliter = ", "; StringBuilder sb = new StringBuilder(); if (data instanceof Object[]) { for (Object c : (Object[]) data) { sb.append(convertObjectToString(c, format)).append(spliter); } } else if (data instanceof Collection) { for (Object c : (Collection<?>) data) { sb.append(convertObjectToString(c, format)).append(spliter); } } else if (data instanceof Iterator) { Iterator<?> it = (Iterator<?>) data; while (it.hasNext()) { sb.append(convertObjectToString(it.next(), format)).append(spliter); } } else if (data instanceof Map) { sb.append(convertMapToString((Map<?, ?>) data, format)); } else if (data instanceof ActiveRecord) { sb.append(convertActiveRecordToString((ActiveRecord) data, format)); } else { sb.append(data); } return StringUtil.removeLastToken(sb.toString(), spliter); } protected <K, V> String convertMapToString(Map<K, V> map, String format) { StringBuilder sb = new StringBuilder(); if ("json".equalsIgnoreCase(format)) { sb.append((new JSONObject(map)).toString()); } else if ("xml".equalsIgnoreCase(format)) { try { sb.append(XML.toString((new JSONObject(map)))); } catch (JSONException ex) { log.error("Failed to conver to xml string: " + ex.getMessage()); } } else { sb.append(map.toString()); } return sb.toString(); } protected String convertActiveRecordToString(ActiveRecord record, String format) { StringBuilder sb = new StringBuilder(); if ("json".equalsIgnoreCase(format)) { sb.append(record.toJSON()); } else if ("xml".equalsIgnoreCase(format)) { sb.append(record.toXML()); } else { sb.append(record.toString()); } return sb.toString(); } }