| 1 19 package org.openbravo.erpCommon.businessUtility; 20 21 import org.openbravo.base.secureApp.*; 22 import org.openbravo.xmlEngine.XmlDocument; 23 import org.openbravo.utils.FormatUtilities; 24 import org.openbravo.erpCommon.ad_actionButton.*; 25 import java.io.*; 26 import java.util.Vector ; 27 import java.util.StringTokenizer ; 28 import javax.servlet.*; 29 import javax.servlet.http.*; 30 31 32 public class TabFilter extends HttpSecureAppServlet { 33 34 35 public void init (ServletConfig config) { 36 super.init(config); 37 boolHist = false; 38 } 39 40 public void doPost (HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { 41 VariablesSecureApp vars = new VariablesSecureApp(request); 42 43 if (vars.commandIn("DEFAULT")) { 44 String strTab = vars.getRequiredStringParameter("inpTabId"); 45 String strWindow = vars.getRequiredStringParameter("inpWindow"); 46 String strWindowId = vars.getStringParameter("inpWindowId"); 47 String strOrderBy = vars.getSessionValue(strTab + "|orderby"); 48 printPage(response, vars, strTab, strWindow, strWindowId, strOrderBy); 49 } else if (vars.commandIn("ORDERBY", "ORDERBY_CLEAR")) { 50 String strWindow = vars.getStringParameter("inpwindowId"); 51 String strOrderBy = vars.getInStringParameter("inpSelectedField"); 52 String strTab = vars.getStringParameter("inpTabId"); 53 ActionButtonDefaultData[] tab = ActionButtonDefaultData.windowName(this, strTab); 54 String strWindowPath="", strTabName=""; 55 if (tab!=null && tab.length!=0) { 56 if (tab[0].help.equals("Y")) strWindowPath="../utility/WindowTree_FS.html?inpTabId=" + strTab; 57 strTabName = FormatUtilities.replace(tab[0].name); 58 strWindowPath = "../" + FormatUtilities.replace(tab[0].description) + "/" + strTabName + "_Relation.html"; 59 } else strWindowPath = strDefaultServlet; 60 if (strOrderBy!=null && strOrderBy.length()>0) { 61 strOrderBy = strOrderBy.substring(1, strOrderBy.length()-1); 62 { 63 StringTokenizer st = new StringTokenizer (strOrderBy, ",", false); 64 strOrderBy = ""; 65 while (st.hasMoreTokens()) { 66 String token = st.nextToken().trim(); 67 if (!strOrderBy.equals("")) strOrderBy += ","; 68 if (token.startsWith("'")) strOrderBy += token.substring(1,token.length()-1).trim(); 69 } 70 } 71 } 72 if (vars.commandIn("ORDERBY") && !strOrderBy.equals("")) vars.setSessionValue(strTab + "|orderby", strOrderBy); 73 else vars.removeSessionValue(strTab + "|orderby"); 74 printPageClosePopUp(response, vars, strWindowPath); 75 } else pageError(response); 76 } 77 78 79 void printPage(HttpServletResponse response, VariablesSecureApp vars, String strTab, String strWindow, String strWindowId, String strOrderBy) throws IOException, ServletException { 80 if (log4j.isDebugEnabled()) log4j.debug("Output: 'order by' selector"); 81 XmlDocument xmlDocument = xmlEngine.readXmlTemplate("org/openbravo/erpCommon/businessUtility/TabFilter").createXmlDocument(); 82 83 xmlDocument.setParameter("direction", "var baseDirection = \"" + strReplaceWith + "/\";\n"); 84 xmlDocument.setParameter("language", "LNG_POR_DEFECTO=\"" + vars.getLanguage() + "\";"); 85 xmlDocument.setParameter("tab", strTab); 86 xmlDocument.setParameter("windowId", strWindowId); 87 88 TabFilterData[] data = null, dataOrderBy = null; 89 if (vars.getLanguage().equals("en_US")) data = TabFilterData.select(this, strTab); 90 else data = TabFilterData.selectTrl(this, vars.getLanguage(), strTab); 91 92 if (data!=null && data.length>0) { 93 data = getShownFieldsData(data); 94 if (data!=null && data.length>0 && !strOrderBy.equals("")) { 95 dataOrderBy = getOrderByFields(data, strOrderBy); 96 data = getShownFieldsDataWithoutOrderBy(data, dataOrderBy); 97 } 98 } 99 xmlDocument.setData("structure1", data); 100 xmlDocument.setData("structure2", dataOrderBy); 101 102 response.setContentType("text/html; charset=UTF-8"); 103 PrintWriter out = response.getWriter(); 104 out.println(xmlDocument.print()); 105 out.close(); 106 } 107 108 private boolean isHasDescriptionReference(String reference) { 109 switch (Integer.valueOf(reference).intValue()) { 110 case 17: 111 case 18: 112 case 19: 113 case 21: 114 case 25: 115 case 28: 116 case 30: 117 case 31: 118 case 32: 119 case 35: 120 case 800011: return true; 121 }; 122 return false; 123 } 124 125 private TabFilterData[] getShownFieldsData(TabFilterData[] data) { 126 int contador=1; 127 Vector <Object > fields = new Vector <Object >(); 128 for (int i=0;i<data.length;i++) { 129 if (mustBeCount(data[i].columnname)) { 130 if (isHasDescriptionReference(data[i].adReferenceId) && data[i].isdisplayed.equals("Y")) contador++; 131 if (data[i].showinrelation.equals("Y") && data[i].isdisplayed.equals("Y")) { 132 TabFilterData dataAux = new TabFilterData(); 133 dataAux.position = Integer.toString(contador); 134 dataAux.name = data[i].name; 135 fields.addElement(dataAux); 136 } 137 contador++; 138 } 139 } 140 TabFilterData[] result = new TabFilterData[fields.size()]; 141 fields.copyInto(result); 142 return result; 143 } 144 145 private boolean mustBeCount(String columnname) { 146 if (!columnname.equalsIgnoreCase("Created") && !columnname.equalsIgnoreCase("CreatedBy") && !columnname.equalsIgnoreCase("Updated") && !columnname.equalsIgnoreCase("UpdatedBy")) return true; 147 else return false; 148 } 149 150 private TabFilterData[] getOrderByFields(TabFilterData[] data, String strOrderBy) { 151 strOrderBy = strOrderBy.trim(); 152 if (strOrderBy.startsWith("(")) strOrderBy = strOrderBy.substring(1, strOrderBy.length()-1); 153 if (log4j.isDebugEnabled()) log4j.debug("TabFilter - getOrderByFields() - String to parse: " + strOrderBy); 154 StringTokenizer orderBy = new StringTokenizer (strOrderBy, ","); 155 Vector <Object > fields = new Vector <Object >(); 156 boolean isnegative = false; 157 while (orderBy.hasMoreTokens()) { 158 String token = orderBy.nextToken(); 159 token = token.trim(); 160 if (token.startsWith("'")) token = token.substring(1, token.length()-1); 161 String realToken = token; 162 if (token.startsWith("-")) { 163 token = token.substring(1); 164 isnegative = true; 165 } 166 if (log4j.isDebugEnabled()) log4j.debug("TabFilter - getOrderByFields() - token to parse: " + token + " - real token: " + realToken); 167 for (int i=0;i<data.length;i++) { 168 if (data[i].position.equals(token)) { 169 TabFilterData dataAux = new TabFilterData(); 170 dataAux.position = data[i].position; 171 dataAux.completePosition = (isnegative?"-":"") + data[i].position; 172 dataAux.name = data[i].name; 173 dataAux.completeName = (!token.equals(realToken)?"\\/":"/\\") + data[i].name; 174 fields.addElement(dataAux); 175 break; 176 } 177 } 178 } 179 TabFilterData[] result = new TabFilterData[fields.size()]; 180 fields.copyInto(result); 181 return result; 182 } 183 184 private TabFilterData[] getShownFieldsDataWithoutOrderBy(TabFilterData[] data, TabFilterData[] dataOrderBy) { 185 Vector <Object > fields = new Vector <Object >(); 186 boolean exists=false; 187 for (int i=0;i<data.length;i++) { 188 for (int j=0;j<dataOrderBy.length;j++) { 189 exists=false; 190 if (data[i].position.equals(dataOrderBy[j].position)) { 191 exists=true; 192 break; 193 } 194 } 195 if (!exists) fields.addElement(data[i]); 196 } 197 TabFilterData[] result = new TabFilterData[fields.size()]; 198 fields.copyInto(result); 199 return result; 200 } 201 202 public String getServletInfo() { 203 return "Servlet that presents the 'order by' selector"; 204 } } 206 | Popular Tags |