/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.hadoop.chukwa.rest.actions; import java.util.*; import org.apache.commons.logging.*; import org.apache.commons.lang.time.*; import java.lang.reflect.*; import net.sf.json.*; import net.sf.json.processors.JsonValueProcessor; public class RestController { protected static Log log = LogFactory.getLog(RestController.class); private static String convertObjectToXml(Object obj) { StringBuilder s=new StringBuilder(); s.append("<item>"); try { Class cls = obj.getClass(); Field fieldlist[] = cls.getDeclaredFields(); for (int i = 0; i < fieldlist.length; i++) { Field fld = fieldlist[i]; String fldName = fld.getName(); String functionName = "get"+ fldName.substring(0,1).toUpperCase() + fldName.substring(1); String value = ""; Object oret = null; try { @SuppressWarnings("unchecked") Method meth=cls.getMethod(functionName); if (meth == null) { continue; } oret = meth.invoke(obj); } catch (Exception e) { continue; } if (oret == null) { value=""; } else if ((oret instanceof Date) || (oret instanceof java.sql.Timestamp)) { java.sql.Timestamp d = (java.sql.Timestamp) oret; long time = d.getTime(); String date = DateFormatUtils.format(time, "yyyy-MM-dd HH:mm:ss"); value = date; } else { value = oret.toString(); } s.append("<"+fldName+">"+value+"</"+fldName+">"); } s.append("\n"); } catch (Throwable e) { System.err.println(e); } s.append("</item>"); return s.toString(); } private static String getObjectFields(Object obj) { StringBuilder s=new StringBuilder(); try { Class cls = obj.getClass(); Method methlist[] = cls.getDeclaredMethods(); int count=0; for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; if (m.getName().startsWith("get")) { String name=m.getName().substring(3); if (count!=0) { s.append(","); } count+=1; s.append("\""+name+"\""); } } s.append("\n"); } catch (Throwable e) { System.err.println(e); } return s.toString(); } private static String getObjectValues(Object obj) { StringBuilder s=new StringBuilder(); try { Class cls = obj.getClass(); Method methlist[] = cls.getDeclaredMethods(); int count=0; for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; if (m.getName().startsWith("get")) { String name=m.getName(); Object oret = null; try { @SuppressWarnings("unchecked") Method meth=cls.getMethod(name); if (meth == null) { continue; } oret = meth.invoke(obj); } catch (Exception e) { continue; } if (count!=0) { s.append(","); } count+=1; if (oret == null) { s.append("\"\""); } else if ((oret instanceof Date) || (oret instanceof java.sql.Timestamp)) { long time=0; if (oret instanceof Date) { Date d = (Date) oret; time = d.getTime(); } else if (oret instanceof java.sql.Timestamp) { java.sql.Timestamp d = (java.sql.Timestamp) oret; time = d.getTime(); } String date = DateFormatUtils.format(time, "yyyy-MM-dd HH:mm:ss"); s.append("\""+date+"\""); } else { s.append("\""+oret.toString()+"\""); } } } s.append("\n"); } catch (Throwable e) { System.err.println(e); } return s.toString(); } protected static String convertToJson(Object obj) { String str=""; JsonConfig config = new JsonConfig(); config.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor()); config.registerJsonValueProcessor(java.sql.Timestamp.class,new JsonDateValueProcessor()); if (obj != null) { if (isArray(obj)) { JSONArray jsonArray = JSONArray.fromObject(obj, config); str=jsonArray.toString(); } else { JSONObject jsonObject = JSONObject.fromObject(obj, config); str=jsonObject.toString(); } } return str; } protected static String convertToXml(Object obj) { StringBuilder s=new StringBuilder(); s.append("<items>"); if ( obj != null) { if (isArray(obj)) { Iterator iterator = ((Collection)obj).iterator(); while (iterator.hasNext()) { Object element = iterator.next(); s.append(convertObjectToXml(element)); } } else { s.append(convertObjectToXml(obj)); } } s.append("</items>"); return s.toString(); } protected static String convertToCsv(Object obj) { StringBuilder str=new StringBuilder(); if ( obj != null) { if (isArray(obj)) { boolean first=true; Iterator iterator = ((Collection)obj).iterator(); while (iterator.hasNext()) { Object element = iterator.next(); if (first) { first=false; str.append(getObjectFields(element)); } str.append(getObjectValues(element)); } } else { str.append(getObjectFields(obj)); str.append(getObjectValues(obj)); } } return str.toString(); } private static boolean isArray(Object obj) { return obj instanceof Collection || obj.getClass().isArray(); } }