KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openbravo > erpCommon > utility > UsedByLink


1 /*
2  *************************************************************************
3  * The contents of this file are subject to the Openbravo Public License
4  * Version 1.0 (the "License"), being the Mozilla Public License
5  * Version 1.1 with a permitted attribution clause; you may not use this
6  * file except in compliance with the License. You may obtain a copy of
7  * the License at http://www.openbravo.com/legal/license.html
8  * Software distributed under the License is distributed on an "AS IS"
9  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
10  * License for the specific language governing rights and limitations
11  * under the License.
12  * The Original Code is Openbravo ERP.
13  * The Initial Developer of the Original Code is Openbravo SL
14  * All portions are Copyright (C) 2001-2006 Openbravo SL
15  * All Rights Reserved.
16  * Contributor(s): ______________________________________.
17  ************************************************************************
18 */

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 JavaDoc;
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 JavaDoc strWindow = vars.getStringParameter("inpwindowId");
47       String JavaDoc strTabId = vars.getRequiredStringParameter("inpTabId");
48       String JavaDoc strKeyColumn = vars.getRequiredStringParameter("inpkeyColumnId");
49       String JavaDoc strTableId = vars.getRequiredStringParameter("inpTableId");
50       String JavaDoc strKeyId = vars.getRequiredStringParameter("inp" + Sqlc.TransformaNombreColumna(strKeyColumn));
51       printPage(response, vars, strWindow, strTabId, strKeyColumn, strKeyId, strTableId);
52     } else if (vars.commandIn("LINKS")) {
53       String JavaDoc strWindow = vars.getStringParameter("inpwindowId");
54       String JavaDoc strTabId = vars.getRequiredStringParameter("inpTabId");
55       String JavaDoc strKeyColumn = vars.getRequiredStringParameter("inpkeyColumnId");
56       String JavaDoc strKeyId = vars.getRequiredStringParameter("inp" + Sqlc.TransformaNombreColumna(strKeyColumn));
57       String JavaDoc strAD_TAB_ID = vars.getRequiredStringParameter("inpadTabIdKey");
58       String JavaDoc strTABLENAME = vars.getRequiredStringParameter("inptablename");
59       String JavaDoc strCOLUMNNAME = vars.getRequiredStringParameter("inpcolumnname");
60       String JavaDoc 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 JavaDoc strWindow, String JavaDoc TabId, String JavaDoc keyColumn, String JavaDoc keyId, String JavaDoc 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 JavaDoc<Object JavaDoc> vecTotal = new Vector JavaDoc<Object JavaDoc>();
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 JavaDoc 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 JavaDoc strWindow, String JavaDoc TabId, String JavaDoc keyColumn, String JavaDoc keyId, String JavaDoc strAD_TAB_ID, String JavaDoc strTABLENAME, String JavaDoc strCOLUMNNAME, String JavaDoc 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 JavaDoc strScript = new StringBuffer JavaDoc();
142     StringBuffer JavaDoc strHiddens = new StringBuffer JavaDoc();
143     StringBuffer JavaDoc strSQL = new StringBuffer JavaDoc();
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 JavaDoc 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 JavaDoc getWhereClause(VariablesSecureApp vars, String JavaDoc window, String JavaDoc strWhereClause) throws ServletException {
176     String JavaDoc 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 JavaDoc where = new StringBuffer JavaDoc();
180     String JavaDoc 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 JavaDoc 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 JavaDoc getAditionalWhereClause(VariablesSecureApp vars, String JavaDoc strWindow, String JavaDoc adTabId, String JavaDoc tableName, String JavaDoc keyColumn, String JavaDoc columnName, String JavaDoc parentTableName) throws ServletException {
216     String JavaDoc 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 JavaDoc 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 JavaDoc getServletInfo() {
245     return "Servlet that presents the usedBy links";
246   } // end of getServletInfo() method
247
}
248
Popular Tags