Java tutorial
/** * Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php */ package org.ralasafe.servlet; import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.ralasafe.db.DBPower; import org.ralasafe.db.DBView; import org.ralasafe.db.TableView; import com.google.gson.Gson; public class UtilAction extends Action { private static final Log log = LogFactory.getLog(UtilAction.class); protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String oper = req.getParameter("oper"); if (log.isDebugEnabled()) { log.debug("oper=" + oper); } if ("getJavaBeanProperties".equals(oper)) { getJavaBeanProperties(req, resp); return; } else if ("getAppDsNames".equals(oper)) { getAppDsNames(req, resp); return; } else if ("loadDbView".equals(oper)) { loadDbView(req, resp); return; } else if ("getTableColumns".equals(oper)) { getTableColumns(req, resp); return; } } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String oper = req.getParameter("oper"); if (log.isDebugEnabled()) { log.debug("oper=" + oper); } if ("loadDbView".equals(oper)) { loadDbView(req, resp); return; } } private void getTableColumns(HttpServletRequest req, HttpServletResponse resp) throws IOException { // get table or view definition String schema = req.getParameter("schema"); String tableName = req.getParameter("tableName"); String dsName = req.getParameter("dsName"); //String queryId=req.getParameter( "queryId" ); String alias = req.getParameter("alias"); TableView tableView = DBView.getTable(dsName, schema, tableName); responseTableDefinition(resp, tableView, alias); } private void responseTableDefinition(HttpServletResponse resp, TableView tableView, String alias) throws IOException { Gson gson = new Gson(); String json = gson.toJson(tableView); // append alias to json json = json.substring(0, json.lastIndexOf('}')) + ",\"alias\":\"" + alias + "\"}"; if (log.isDebugEnabled()) { log.debug("The json is:" + json); } resp.setContentType("application/json;charset=UTF-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter pw = resp.getWriter(); pw.write(json); pw.flush(); } private void getAppDsNames(HttpServletRequest req, HttpServletResponse resp) throws IOException { Collection dsNames = DBPower.getDsNames(); ArrayList appDsNames = new ArrayList(dsNames.size()); for (Iterator iterator = dsNames.iterator(); iterator.hasNext();) { String name = (String) iterator.next(); if (!name.equals("ralasafe")) { appDsNames.add(name); } } Gson gson = new Gson(); String json = gson.toJson(appDsNames); if (log.isDebugEnabled()) { log.debug("The json is:" + json); } resp.setContentType("application/json;charset=UTF-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter pw = resp.getWriter(); //pw.write( "\"appDsNames\":" ); pw.write(json); pw.flush(); } private void loadDbView(HttpServletRequest req, HttpServletResponse resp) throws IOException { String dsName = req.getParameter("dsName"); String[] allSchemas = DBView.getSchemas(dsName); String defaultSchema = DBView.getDefaultSchema(dsName); int id = 0; resp.setContentType("application/json;charset=UTF-8"); PrintWriter writer = resp.getWriter(); // writer.write( "[ " ); // writer.write( " {id:0, name:'mydemo [Default]', nodes:[ " ); // writer.write( " {id:1, name:'Tables', nodes:[ " ); // writer.write( " {id:2, name:'company'}, " ); // writer.write( " {id:3, name:'demouser'}, " ); // writer.write( " {id:4, name:'department'}, " ); // writer.write( " {id:5, name:'loan_money'}, " ); // writer.write( " {id:6, name:'ralasafe_sequence'} ]}" ); // writer.write( " ]} " ); // writer.write( "] " ); writer.write("[\r\n"); for (int i = 0; i < allSchemas.length; i++) { String schema = allSchemas[i]; boolean isDefault = defaultSchema.equals(schema); String[] tableNames = DBView.getTableNames(dsName, schema); String[] viewNames = DBView.getViewNames(dsName, schema); if (isDefault) { schema = schema + " [Default]"; } if (i != 0) { writer.write(",\r\n"); } writer.write("\t{id:" + id++ + ", iconSkin: 'schema', name:'" + schema + "', nodes:[\r\n"); // if it's default schema, keep schema attribute value as blank if (isDefault) { schema = ""; } writer.write("\t\t{id:" + id++ + ", iconSkin: 'tables', name:'Tables', nodes:[\r\n"); id = write(writer, tableNames, schema, "table", id); writer.write("\t\t]},\r\n"); writer.write("\t\t{id:" + id++ + ", iconSkin: 'views', name:'Views', nodes:[\r\n"); id = write(writer, viewNames, schema, "view", id); writer.write("\t\t]}\r\n"); writer.write("\t]}"); } writer.write("]"); writer.flush(); } private int write(PrintWriter writer, String[] names, String schema, String type, int id) { for (int i = 0; i < names.length; i++) { String name = names[i]; if (i != 0) { writer.write(",\r\n"); } writer.write("\t\t\t{id:" + id++ + ", iconSkin: 'dbObject', name:'" + name + "', type:'" + type + "', schema:'" + schema + "'}"); } return id; } private void getJavaBeanProperties(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { String clazz = req.getParameter("clazz"); Class c; Properties prop = new Properties(); try { c = Class.forName(clazz); Field[] fields = c.getDeclaredFields(); int length = fields.length; String[] properties = new String[length]; String[] javaTypes = new String[length]; for (int i = 0; i < fields.length; i++) { Field field = fields[i]; properties[i] = field.getName(); javaTypes[i] = field.getType().getName(); } prop.setJavaTypes(javaTypes); prop.setProperties(properties); } catch (ClassNotFoundException e) { prop.setErrorMsg(e.toString()); } Gson gson = new Gson(); String json = gson.toJson(prop); if (log.isDebugEnabled()) { log.debug("The json is:" + json); } resp.setContentType("application/json;charset=UTF-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter pw = resp.getWriter(); pw.write(json); pw.flush(); } class Properties { private String errorMsg = ""; private String[] properties; private String[] javaTypes; public String getErrorMsg() { return errorMsg; } public void setErrorMsg(String errorMsg) { this.errorMsg = errorMsg; } public String[] getProperties() { return properties; } public void setProperties(String[] properties) { this.properties = properties; } public String[] getJavaTypes() { return javaTypes; } public void setJavaTypes(String[] javaTypes) { this.javaTypes = javaTypes; } } }