1 19 package org.openbravo.erpCommon.ad_forms; 20 21 import org.openbravo.erpCommon.utility.*; 22 import org.openbravo.erpCommon.businessUtility.WindowTabs; 23 import org.openbravo.base.secureApp.*; 24 import org.openbravo.xmlEngine.XmlDocument; 25 import java.io.*; 26 import javax.servlet.*; 27 import javax.servlet.http.*; 28 29 30 31 public class SQLExecutor extends HttpSecureAppServlet { 32 33 34 public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { 35 VariablesSecureApp vars = new VariablesSecureApp(request); 36 37 if (!Utility.hasFormAccess(this, vars, "", "org.openbravo.erpCommon.ad_forms.SQLExecutor")) { 38 bdError(response, "AccessTableNoView", vars.getLanguage()); 39 return; 40 } 41 42 if (vars.commandIn("DEFAULT")) { 43 String strSQL = vars.getGlobalVariable("inpSQL", "SQLExecutor|sql", ""); 44 SQLExecutor_Query sql = null; 45 SQLExecutor_Query[] data = null; 46 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 47 int intRecordRange = (strRecordRange.equals("")?0:Integer.parseInt(strRecordRange)); 48 String strInitRecord = vars.getSessionValue("SQLExecutor|initRecordNumber"); 49 int initRecordNumber = (strInitRecord.equals("")?0:Integer.parseInt(strInitRecord)); 50 try { 51 if (!strSQL.toUpperCase().trim().startsWith("SELECT ")) { 52 vars.removeSessionValue("SQLExecutor|sql"); 53 throw new ServletException("Invalid SQL statement"); 54 } 55 data = SQLExecutor_Query.select(this, strSQL, initRecordNumber, intRecordRange); 56 } catch (Exception ignored) {} 57 printPage(response, vars, strSQL, data, strInitRecord, initRecordNumber, intRecordRange); 58 } else if (vars.commandIn("FIND")) { 59 String strSQL = vars.getRequestGlobalVariable("inpSQL", "SQLExecutor|sql"); 60 SQLExecutor_Query[] data = null; 61 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 62 int intRecordRange = (strRecordRange.equals("")?0:Integer.parseInt(strRecordRange)); 63 vars.setSessionValue("SQLExecutor|initRecordNumber", "0"); 64 int initRecordNumber = 0; 65 try { 66 if (!strSQL.toUpperCase().trim().startsWith("SELECT ")) { 67 vars.removeSessionValue("SQLExecutor|sql"); 68 throw new ServletException("Invalid SQL statement"); 69 } 70 data = SQLExecutor_Query.select(this, strSQL, initRecordNumber, intRecordRange); 71 } catch (Exception ex) { 72 ex.printStackTrace(); 73 vars.setSessionValue("SQLExecutor|message", Utility.messageBD(this, "Error", vars.getLanguage())); 74 } 75 log4j.debug("sql: "+strSQL); 76 printPage(response, vars, strSQL, data, "0", initRecordNumber, intRecordRange); 77 } else if (vars.commandIn("RELATION_XLS")){ 78 String strSQL = vars.getGlobalVariable("inpSQL", "SQLExecutor|sql", ""); 79 vars.setSessionValue("SQLExecutor|sql", strSQL); 80 SQLExecutor_Query[] data = null; 81 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 82 int intRecordRange = (strRecordRange.equals("")?0:Integer.parseInt(strRecordRange)); 83 vars.setSessionValue("SQLExecutor|initRecordNumber", "0"); 84 int initRecordNumber = 0; 85 try { 86 if (!strSQL.toUpperCase().trim().startsWith("SELECT ")) { 87 vars.removeSessionValue("SQLExecutor|sql"); 88 throw new ServletException("Invalid SQL statement"); 89 } 90 data = SQLExecutor_Query.select(this, strSQL, initRecordNumber, intRecordRange); 91 } catch (Exception ex) { 92 ex.printStackTrace(); 93 vars.setSessionValue("SQLExecutor|message", Utility.messageBD(this, "Error", vars.getLanguage())); 94 } 95 log4j.debug("sql: "+strSQL); 96 printExcel(response, vars, strSQL, data); 97 } else if (vars.commandIn("FIRST_RELATION")) { 98 vars.setSessionValue("SQLExecutor|initRecordNumber", "0"); 99 response.sendRedirect(strDireccion + request.getServletPath() + "?Command=DEFAULT"); 100 } else if (vars.commandIn("PREVIOUS_RELATION")) { 101 String strInitRecord = vars.getSessionValue("SQLExecutor|initRecordNumber"); 102 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 103 int intRecordRange = strRecordRange.equals("")?0:Integer.parseInt(strRecordRange); 104 if (strInitRecord.equals("") || strInitRecord.equals("0")) { 105 vars.setSessionValue("SQLExecutor|initRecordNumber", "0"); 106 } else { 107 int initRecord = (strInitRecord.equals("")?0:Integer.parseInt(strInitRecord)); 108 initRecord -= intRecordRange; 109 strInitRecord = ((initRecord<0)?"0":Integer.toString(initRecord)); 110 vars.setSessionValue("SQLExecutor|initRecordNumber", strInitRecord); 111 } 112 response.sendRedirect(strDireccion + request.getServletPath() + "?Command=DEFAULT"); 113 } else if (vars.commandIn("NEXT_RELATION")) { 114 String strInitRecord = vars.getSessionValue("SQLExecutor|initRecordNumber"); 115 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 116 int intRecordRange = strRecordRange.equals("")?0:Integer.parseInt(strRecordRange); 117 int initRecord = (strInitRecord.equals("")?0:Integer.parseInt(strInitRecord)); 118 if (initRecord==0) initRecord=1; 119 initRecord += intRecordRange; 120 strInitRecord = ((initRecord<0)?"0":Integer.toString(initRecord)); 121 vars.setSessionValue("SQLExecutor|initRecordNumber", strInitRecord); 122 response.sendRedirect(strDireccion + request.getServletPath() + "?Command=DEFAULT"); 123 } else if (vars.commandIn("LAST_RELATION")) { 124 String strRecordRange = Utility.getContext(this, vars, "#RecordRange", "SQLExecutor"); 125 String strSQL = vars.getGlobalVariable("inpSQL", "SQLExecutor|sql", ""); 126 String strInitRecord = lastRange(vars, strSQL, strRecordRange); 127 vars.setSessionValue("SQLExecutor|initRecordNumber", strInitRecord); 128 response.sendRedirect(strDireccion + request.getServletPath() + "?Command=DEFAULT"); 129 } else pageError(response); 130 } 131 132 private String lastRange(VariablesSecureApp vars, String strSQL, String strRecordRange) { 133 SQLExecutor_Query[] data = null; 134 int initRecord = 0; 135 try { 136 data = SQLExecutor_Query.select(this, strSQL); 137 } catch (Exception ex) { 138 ex.printStackTrace(); 139 return "0"; 140 } 141 while (initRecord<data.length) { 142 initRecord += Integer.parseInt(strRecordRange); 143 } 144 initRecord -= Integer.parseInt(strRecordRange); 145 if (initRecord<0) initRecord = 0; 146 return Integer.toString(initRecord); 147 148 } 149 private void printExcel(HttpServletResponse response, VariablesSecureApp vars, String strSQL, SQLExecutor_Query[] data) throws IOException, ServletException{ 150 log4j.info("print page"); 151 if (log4j.isDebugEnabled()) log4j.debug("printPage - Reading xml\n"); 152 XmlDocument xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/ad_forms/SQLExecutor_Excel").createXmlDocument(); 153 154 SQLExecutorData[] dataHeader = null; 155 StringBuffer dataBuffer = new StringBuffer (); 156 if (data!=null && data.length != 0) { 157 log4j.debug("data != null || data.length != 0"); 158 dataHeader = new SQLExecutorData[data[0].name.size()]; 159 for (int i = 0; i<data[0].name.size(); i++){ 160 log4j.debug("data[0].name: " + data[0].name); 161 log4j.debug(data[0].name.elementAt(i)); 162 dataHeader[i] = new SQLExecutorData(); 163 dataHeader[i].header = data[0].name.elementAt(i); 164 } 165 dataBuffer.append("<tr>\n"); 166 for (int j=0; j<data.length; j++) { 167 if (j!=0) { 168 dataBuffer.append("<tr>\n"); 169 for (int k=0; k<data[0].name.size(); k++) { 170 dataBuffer.append("<td>"); 171 dataBuffer.append(data[j].getField(Integer.toString(k))); 172 dataBuffer.append("</td>\n"); 173 } 174 dataBuffer.append("</tr>\n"); 175 } 176 } 177 } 178 log4j.debug("dataBuffer: "+dataBuffer.toString()); 179 xmlDocument.setParameter("data", dataBuffer.toString()); 180 xmlDocument.setData("structureHeader", dataHeader); 181 182 response.setContentType("text/xls; charset=UTF-8"); 183 PrintWriter out = response.getWriter(); 184 if (log4j.isDebugEnabled()) log4j.debug("printPage - Printing document\n"); 185 out.println(xmlDocument.print()); 186 out.close(); 187 if (log4j.isDebugEnabled()) log4j.debug("printPage - End printing document\n"); 188 } 189 190 191 private void printPage(HttpServletResponse response, VariablesSecureApp vars, String strSQL, SQLExecutor_Query[] data, String strInitRecord, int initRecordNumber, int intRecordRange) throws IOException, ServletException{ 192 log4j.info("print page"); 193 if (log4j.isDebugEnabled()) log4j.debug("printPage - Reading xml\n"); 194 XmlDocument xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/ad_forms/SQLExecutor").createXmlDocument(); 195 log4j.debug("prueba"); 196 xmlDocument.setParameter("direction", "var baseDirection = \"" + strReplaceWith + "/\";\n"); 197 xmlDocument.setParameter("language", "LNG_POR_DEFECTO=\"" + vars.getLanguage() + "\";"); 198 String strMessage = vars.getSessionValue("SQLExecutor|message");; 199 if (!strMessage.equals("")) strMessage = "alert('" + strMessage + "');"; 200 vars.removeSessionValue("SQLExecutor|message"); 201 xmlDocument.setParameter("buscador", strMessage); 202 log4j.debug("prueba"); 203 xmlDocument.setParameter("sql", strSQL); 204 log4j.debug("sql"); 205 SQLExecutorData[] dataHeader = null; 206 StringBuffer dataBuffer = new StringBuffer (); 207 if (data!=null && data.length != 0) { 208 log4j.debug("data != null || data.length != 0"); 209 dataHeader = new SQLExecutorData[data[0].name.size()]; 210 for (int i = 0; i<data[0].name.size(); i++){ 211 log4j.debug("data[0].name: " + data[0].name); 212 log4j.debug(data[0].name.elementAt(i)); 213 dataHeader[i] = new SQLExecutorData(); 214 dataHeader[i].header = data[0].name.elementAt(i); 215 } 216 dataBuffer.append("<tr>\n"); 217 for (int j=0; j<data.length; j++) { 218 if (j!=0) { 219 int evenOdd = j%2; 220 dataBuffer.append("<tr class=\"TableDetailRow" + String.valueOf(evenOdd) + "\">\n"); 221 for (int k=0; k<data[0].name.size(); k++) { 222 dataBuffer.append("<td>"); 223 dataBuffer.append(data[j].getField(Integer.toString(k))); 224 dataBuffer.append("</td>\n"); 225 } 226 dataBuffer.append("</tr>\n"); 227 } 228 } 229 } 230 257 xmlDocument.setData("structureHeader", dataHeader); 258 xmlDocument.setParameter("data", dataBuffer.toString()); 259 if (log4j.isDebugEnabled()) log4j.debug("printPage - Making toolbar\n"); 261 ToolBar toolbar = new ToolBar(this, vars.getLanguage(), "SQLExecutor", false, "document.frmMain.inpKey", "myGrid", null, false, "ad_forms", strReplaceWith, false, true); 262 toolbar.prepareQueryTemplate((initRecordNumber>1), (data!=null && data.length!=0 && data.length>=intRecordRange), vars.getSessionValue("#ShowTest", "N").equals("Y")); 263 xmlDocument.setParameter("toolbar", toolbar.toString()); 264 265 log4j.debug("toolbar"); 266 try { 267 KeyMap key = new KeyMap(this, vars, "SQLExecutor.html"); 268 xmlDocument.setParameter("keyMap", key.getRelationKeyMaps()); 269 } catch (Exception ex) { 270 throw new ServletException(ex); 271 } 272 log4j.debug("keymap"); 273 try { 274 WindowTabs tabs = new WindowTabs(this, vars, "org.openbravo.erpCommon.ad_forms.SQLExecutor"); 275 log4j.debug("tabs"); 276 xmlDocument.setParameter("parentTabContainer", tabs.parentTabs()); 277 log4j.debug("parentTabContainer"); 278 xmlDocument.setParameter("mainTabContainer", tabs.mainTabs()); 279 log4j.debug("mainTabContainer"); 280 xmlDocument.setParameter("childTabContainer", tabs.childTabs()); 281 log4j.debug("childTabContainer"); 282 xmlDocument.setParameter("theme", vars.getTheme()); 283 log4j.debug("theme"); 284 NavigationBar nav = new NavigationBar(this, vars.getLanguage(), "SQLExecutor.html", classInfo.id, classInfo.type, strReplaceWith, tabs.breadcrumb()); 285 xmlDocument.setParameter("navigationBar", nav.toString()); 286 log4j.debug("navigationBar"); 287 LeftTabsBar lBar = new LeftTabsBar(this, vars.getLanguage(), "SQLExecutor.html", strReplaceWith); 288 xmlDocument.setParameter("leftTabs", lBar.manualTemplate()); 289 log4j.debug("leftTabs"); 290 } catch (Exception ex) { 291 throw new ServletException(ex); 292 } 293 { 294 OBError myMessage = vars.getMessage("SQLExecutor"); 295 vars.removeMessage("SQLExecutor"); 296 if (myMessage!=null) { 297 xmlDocument.setParameter("messageType", myMessage.getType()); 298 xmlDocument.setParameter("messageTitle", myMessage.getTitle()); 299 xmlDocument.setParameter("messageMessage", myMessage.getMessage()); 300 } 301 } 302 xmlDocument.setParameter("calendar", vars.getLanguage().substring(0,2)); 303 log4j.debug("calendar"); 304 response.setContentType("text/html; charset=UTF-8"); 305 PrintWriter out = response.getWriter(); 306 if (log4j.isDebugEnabled()) log4j.debug("printPage - Printing document\n"); 307 out.println(xmlDocument.print()); 308 out.close(); 309 if (log4j.isDebugEnabled()) log4j.debug("printPage - End printing document\n"); 310 } 311 312 313 public String getServletInfo() { 314 return "Servlet for the standard SQL execution"; 315 } } 317 | Popular Tags |