1 19 package org.openbravo.erpCommon.utility; 20 21 import org.openbravo.base.secureApp.*; 22 import org.openbravo.data.Sqlc; 23 import org.openbravo.xmlEngine.XmlDocument; 24 import java.io.*; 25 import javax.servlet.*; 26 import javax.servlet.http.*; 27 28 import org.openbravo.utils.FormatUtilities; 29 import org.openbravo.utils.Replace; 30 31 import java.util.Vector ; 32 33 34 public class UsedByLink extends HttpSecureAppServlet { 35 36 37 public void init (ServletConfig config) { 38 super.init(config); 39 boolHist = false; 40 } 41 42 public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { 43 VariablesSecureApp vars = new VariablesSecureApp(request); 44 45 if (vars.commandIn("DEFAULT")) { 46 String strWindow = vars.getStringParameter("inpwindowId"); 47 String strTabId = vars.getRequiredStringParameter("inpTabId"); 48 String strKeyColumn = vars.getRequiredStringParameter("inpkeyColumnId"); 49 String strTableId = vars.getRequiredStringParameter("inpTableId"); 50 String strKeyId = vars.getRequiredStringParameter("inp" + Sqlc.TransformaNombreColumna(strKeyColumn)); 51 printPage(response, vars, strWindow, strTabId, strKeyColumn, strKeyId, strTableId); 52 } else if (vars.commandIn("LINKS")) { 53 String strWindow = vars.getStringParameter("inpwindowId"); 54 String strTabId = vars.getRequiredStringParameter("inpTabId"); 55 String strKeyColumn = vars.getRequiredStringParameter("inpkeyColumnId"); 56 String strKeyId = vars.getRequiredStringParameter("inp" + Sqlc.TransformaNombreColumna(strKeyColumn)); 57 String strAD_TAB_ID = vars.getRequiredStringParameter("inpadTabIdKey"); 58 String strTABLENAME = vars.getRequiredStringParameter("inptablename"); 59 String strCOLUMNNAME = vars.getRequiredStringParameter("inpcolumnname"); 60 String strTableId = vars.getRequiredStringParameter("inpTableId"); 61 printPageDetail(response, vars, strWindow, strTabId, strKeyColumn, strKeyId, strAD_TAB_ID, strTABLENAME, strCOLUMNNAME, strTableId); 62 } else throw new ServletException(); 63 } 64 65 66 void printPage(HttpServletResponse response, VariablesSecureApp vars, String strWindow, String TabId, String keyColumn, String keyId, String tableId) throws IOException, ServletException { 67 if (log4j.isDebugEnabled()) log4j.debug("Output: UsedBy links for tab: " + TabId); 68 XmlDocument xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/utility/UsedByLink").createXmlDocument(); 69 xmlDocument.setParameter("language", "LNG_POR_DEFECTO=\"" + vars.getLanguage() + "\";"); 70 xmlDocument.setParameter("direction", "var baseDirection = \"" + strReplaceWith + "/\";\n"); 71 xmlDocument.setParameter("tabID", TabId); 72 xmlDocument.setParameter("windowID", strWindow); 73 xmlDocument.setParameter("keyColumn", keyColumn); 74 xmlDocument.setParameter("tableId", tableId); 75 xmlDocument.setParameter("keyName", "inp" + Sqlc.TransformaNombreColumna(keyColumn)); 76 xmlDocument.setParameter("keyId", keyId); 77 xmlDocument.setParameter("recordIdentifier", UsedByLinkData.selectIdentifier(this, keyId, vars.getLanguage(), tableId)); 78 79 UsedByLinkData[] data = null; 80 81 if (vars.getLanguage().equals("en_US")) data = UsedByLinkData.select(this, vars.getClient(), vars.getLanguage(), keyColumn); 82 else data = UsedByLinkData.selectLanguage(this, vars.getClient(), vars.getLanguage(), keyColumn); 83 84 if (data!=null && data.length>0) { 85 Vector <Object > vecTotal = new Vector <Object >(); 86 for (int i=0;i<data.length;i++) { 87 if (log4j.isDebugEnabled()) log4j.debug("***Referenced tab: " + data[i].adTabId); 88 UsedByLinkData[] dataRef = UsedByLinkData.windowRef(this, data[i].adTabId); 89 if (dataRef==null || dataRef.length==0) continue; 90 String strWhereClause = getWhereClause(vars, strWindow, dataRef[0].whereclause); 91 if (log4j.isDebugEnabled()) log4j.debug("*** Referenced where clause (1): " + strWhereClause); 92 strWhereClause += getAditionalWhereClause(vars, strWindow, data[i].adTabId, data[i].tablename, keyColumn, data[i].columnname, UsedByLinkData.getTabTableName(this, tableId)); 93 if (log4j.isDebugEnabled()) log4j.debug("*** Referenced where clause (2): " + strWhereClause); 94 strWhereClause += " AND AD_ORG_ID IN (" + vars.getUserOrg() + ") AND AD_CLIENT_ID IN (" + vars.getUserClient() + ")"; 95 int total = Integer.valueOf(UsedByLinkData.countLinks(this, data[i].tablename, data[i].columnname, keyId, strWhereClause)).intValue(); 96 if (log4j.isDebugEnabled()) log4j.debug("*** Count: " + total); 97 data[i].total = Integer.toString(total); 98 if (total>0) { 99 vecTotal.addElement(data[i]); 100 System.out.println("************************ SQL DATA: " + data[i].name + " - " + data[i].adTabId + " - " + data[i].tablename + " - " + data[i].columnname + " - " + keyId); 101 System.out.println("************************ WHERE: " + strWhereClause); 102 } 103 } 104 data = new UsedByLinkData[vecTotal.size()]; 105 vecTotal.copyInto(data); 106 } 107 108 xmlDocument.setData("structure1", data); 109 response.setContentType("text/html; charset=UTF-8"); 110 PrintWriter out = response.getWriter(); 111 out.println(xmlDocument.print()); 112 out.close(); 113 } 114 115 void printPageDetail(HttpServletResponse response, VariablesSecureApp vars, String strWindow, String TabId, String keyColumn, String keyId, String strAD_TAB_ID, String strTABLENAME, String strCOLUMNNAME, String adTableId) throws IOException, ServletException { 116 if (log4j.isDebugEnabled()) log4j.debug("Output: UsedBy links for tab: " + TabId); 117 XmlDocument xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/utility/UsedByLink_Detail").createXmlDocument(); 118 xmlDocument.setParameter("language", "LNG_POR_DEFECTO=\"" + vars.getLanguage() + "\";"); 119 xmlDocument.setParameter("direction", "var baseDirection = \"" + strReplaceWith + "/\";\n"); 120 xmlDocument.setParameter("tabID", TabId); 121 xmlDocument.setParameter("windowID", strWindow); 122 xmlDocument.setParameter("keyColumn", keyColumn); 123 xmlDocument.setParameter("keyName", "inp" + Sqlc.TransformaNombreColumna(keyColumn)); 124 xmlDocument.setParameter("keyId", keyId); 125 xmlDocument.setParameter("adTabId", strAD_TAB_ID); 126 xmlDocument.setParameter("tableName", strTABLENAME); 127 xmlDocument.setParameter("columnName", strCOLUMNNAME); 128 xmlDocument.setParameter("tableId", adTableId); 129 xmlDocument.setParameter("recordIdentifier", UsedByLinkData.selectIdentifier(this, keyId, vars.getLanguage(), adTableId)); 130 if (vars.getLanguage().equals("en_US")) { 131 xmlDocument.setParameter("paramName", UsedByLinkData.tabName(this, strAD_TAB_ID)); 132 } else { 133 xmlDocument.setParameter("paramName", UsedByLinkData.tabNameLanguage(this, vars.getLanguage(), strAD_TAB_ID)); 134 } 135 136 UsedByLinkData[] data = UsedByLinkData.keyColumns(this, strAD_TAB_ID); 137 if (data==null || data.length==0) { 138 bdError(response, "RecordError", vars.getLanguage()); 139 return; 140 } 141 StringBuffer strScript = new StringBuffer (); 142 StringBuffer strHiddens = new StringBuffer (); 143 StringBuffer strSQL = new StringBuffer (); 144 strScript.append("function windowSelect() {\n"); 145 strScript.append("var frm = document.forms[0];\n"); 146 for (int i=0;i<data.length;i++) { 147 if (i>0) { 148 strSQL.append(" || ', ' || "); 149 } 150 strScript.append("frm.inp").append(Sqlc.TransformaNombreColumna(data[i].name)).append(".value = arguments[").append(i).append("];\n"); 151 strSQL.append("'''' || ").append(data[i].name).append(" || ''''"); 152 strHiddens.append("<input type=\"hidden\" name=\"inp").append(Sqlc.TransformaNombreColumna(data[i].name)).append("\">\n"); 153 } 154 UsedByLinkData[] dataRef = UsedByLinkData.windowRef(this, strAD_TAB_ID); 155 if (dataRef==null || dataRef.length==0) { 156 bdError(response, "RecordError", vars.getLanguage()); 157 return; 158 } 159 String windowRef= FormatUtilities.replace(dataRef[0].windowname) + "/" + FormatUtilities.replace(dataRef[0].tabname) + "_Edition.html"; 160 strScript.append("top.opener.submitFormGetParams('DIRECT', '../").append(windowRef).append("', getParamsScript(document.forms[0]));\n"); 161 strScript.append("top.close();\n"); 162 strScript.append("return true;\n"); 163 strScript.append("}\n"); 164 165 xmlDocument.setParameter("hiddens", strHiddens.toString()); 166 xmlDocument.setParameter("script", strScript.toString()); 167 168 xmlDocument.setData("structure1", UsedByLinkData.selectLinks(this, strSQL.toString(), strTABLENAME, data[0].name, vars.getLanguage(), strCOLUMNNAME, keyId, (getWhereClause(vars, strWindow, dataRef[0].whereclause) + " AND AD_ORG_ID IN (" + vars.getUserOrg() + ") AND AD_CLIENT_ID IN (" + vars.getUserClient() + ")"))); 169 response.setContentType("text/html; charset=UTF-8"); 170 PrintWriter out = response.getWriter(); 171 out.println(xmlDocument.print()); 172 out.close(); 173 } 174 175 public String getWhereClause(VariablesSecureApp vars, String window, String strWhereClause) throws ServletException { 176 String strWhere = strWhereClause; 177 if (strWhere.equals("") || strWhere.indexOf("@")==-1) return ((strWhere.equals("")?"":" AND ") + strWhere); 178 if (log4j.isDebugEnabled()) log4j.debug("WHERE CLAUSE: " + strWhere); 179 StringBuffer where = new StringBuffer (); 180 String token="", fin=""; 181 int i=0; 182 i = strWhere.indexOf("@"); 183 while (i!=-1) { 184 where.append(strWhere.substring(0,i)); 185 if (log4j.isDebugEnabled()) log4j.debug("WHERE ACTUAL: " + where.toString()); 186 strWhere = strWhere.substring(i+1); 187 if (log4j.isDebugEnabled()) log4j.debug("WHERE COMPARATION: " + strWhere); 188 if (strWhere.startsWith("SQL")) { 189 fin += ")"; 190 strWhere.substring(4); 191 where.append("("); 192 } else { 193 i = strWhere.indexOf("@"); 194 if (i==-1) { 195 log4j.error("Unable to parse the following string: " + strWhereClause + "\nNow parsing: " + where.toString()); 196 throw new ServletException("Unable zo parse the following string: " + strWhereClause + "\nNow parsing: " + where.toString()); 197 } 198 token = strWhere.substring(0, i); 199 strWhere = (i==strWhere.length())?"":strWhere.substring(i+1); 200 if (log4j.isDebugEnabled()) log4j.debug("TOKEN: " + token); 201 String tokenResult = Utility.getContext(this, vars, token, window); 202 if (log4j.isDebugEnabled()) log4j.debug("TOKEN PARSED: " + tokenResult); 203 if (tokenResult.equalsIgnoreCase(token)) { 204 log4j.error("Unable to parse the String " + strWhereClause + "\nNow parsing: " + where.toString()); 205 throw new ServletException("Unable to parse the string: " + strWhereClause + "\nNow parsing: " + where.toString()); 206 } 207 where.append(tokenResult); 208 } 209 i = strWhere.indexOf("@"); 210 }; 211 where.append(strWhere); 212 return " AND " + where.toString(); 213 } 214 215 public String getAditionalWhereClause(VariablesSecureApp vars, String strWindow, String adTabId, String tableName, String keyColumn, String columnName, String parentTableName) throws ServletException { 216 String result = ""; 217 if (log4j.isDebugEnabled()) log4j.debug("getAditionalWhereClause - ad_Tab_ID: " + adTabId); 218 UsedByLinkData[] data = UsedByLinkData.parentTabTableName(this, adTabId); 219 if (data!=null && data.length>0) { 220 if (log4j.isDebugEnabled()) log4j.debug("getAditionalWhereClause - parent tab: " + data[0].adTabId); 221 UsedByLinkData[] dataColumn = UsedByLinkData.parentsColumnName(this, adTabId, data[0].adTabId); 222 if (dataColumn==null || dataColumn.length==0) { 223 if (log4j.isDebugEnabled()) log4j.debug("getAditionalWhereClause - searching parent Columns Real"); 224 dataColumn = UsedByLinkData.parentsColumnReal(this, adTabId, data[0].adTabId); 225 } 226 if (dataColumn==null || dataColumn.length==0) { 227 if (log4j.isDebugEnabled()) log4j.debug("getAditionalWhereClause - no parent columns found"); 228 return result; 229 } 230 result += " AND EXISTS (SELECT 1 FROM " + data[0].tablename + " WHERE " + data[0].tablename + "." + ((!dataColumn[0].name.equals(""))?dataColumn[0].name:keyColumn) + " = " + tableName + "." + ((!dataColumn[0].name.equals(""))?dataColumn[0].name:columnName); 231 UsedByLinkData[] dataRef = UsedByLinkData.windowRef(this, data[0].adTabId); 232 String strAux = ""; 233 if (dataRef!=null && dataRef.length>0) strAux = getWhereClause(vars, strWindow, dataRef[0].whereclause); 234 result += strAux; 235 if (!data[0].tablename.equalsIgnoreCase(parentTableName)) { 236 result += getAditionalWhereClause(vars, strWindow, data[0].adTabId, data[0].tablename, "", "", parentTableName); 237 } 238 result += ")"; 239 } 240 if (log4j.isDebugEnabled()) log4j.debug("getAditionalWhereClause - result: " + result); 241 return result; 242 } 243 244 public String getServletInfo() { 245 return "Servlet that presents the usedBy links"; 246 } } 248 | Popular Tags |