1 19 package org.openbravo.erpCommon.utility; 20 21 import org.openbravo.database.ConnectionProvider; 22 import org.openbravo.data.FieldProvider; 23 import org.openbravo.base.secureApp.VariablesSecureApp; 24 import java.util.Hashtable ; 25 import java.util.Vector ; 26 import java.util.Properties ; 27 import java.util.Enumeration ; 28 import org.apache.log4j.Logger; 29 30 31 public class TableSQLData { 32 static Logger log4j = Logger.getLogger(TableSQLData.class); 33 private final String internalPrefix = "@@"; 34 private static final String FIELD_CONCAT = " || ' - ' || "; 35 private static final String INACTIVE_DATA = "**"; 36 private VariablesSecureApp vars; 37 private ConnectionProvider pool; 38 private Hashtable <String , String > parameters = new Hashtable <String , String >(); 39 private Vector <Properties > structure = new Vector <Properties >(); 40 private Vector <QueryParameterStructure> paramSelect = new Vector <QueryParameterStructure>(); 41 private Vector <QueryParameterStructure> paramFrom = new Vector <QueryParameterStructure>(); 42 private Vector <QueryParameterStructure> paramWhere = new Vector <QueryParameterStructure>(); 43 private Vector <QueryParameterStructure> paramOrderBy = new Vector <QueryParameterStructure>(); 44 private Vector <QueryParameterStructure> paramFilter = new Vector <QueryParameterStructure>(); 45 private Vector <QueryParameterStructure> paramInternalFilter = new Vector <QueryParameterStructure>(); 46 private Vector <QueryParameterStructure> paramInternalOrderBy = new Vector <QueryParameterStructure>(); 47 private Vector <QueryFieldStructure> select = new Vector <QueryFieldStructure>(); 48 private Vector <QueryFieldStructure> from = new Vector <QueryFieldStructure>(); 49 private Vector <QueryFieldStructure> where = new Vector <QueryFieldStructure>(); 50 private Vector <QueryFieldStructure> orderBy = new Vector <QueryFieldStructure>(); 51 private Vector <QueryFieldStructure> filter = new Vector <QueryFieldStructure>(); 52 private Vector <QueryFieldStructure> internalFilter = new Vector <QueryFieldStructure>(); 53 private Vector <QueryFieldStructure> internalOrderBy = new Vector <QueryFieldStructure>(); 54 private Vector <String > orderByPosition = new Vector <String >(); 55 private Vector <String > orderByDirection = new Vector <String >(); 56 private int index = 0; 57 private boolean isSameTable = false; 58 59 public TableSQLData() { 60 } 61 62 public TableSQLData(VariablesSecureApp _vars, ConnectionProvider _conn, String _adTabId, String _orgList, String _clientList) throws Exception { 63 if (_vars!=null) setVars(_vars); 64 setPool(_conn); 65 setTabID(_adTabId); 66 setOrgList(_orgList); 67 setClientList(_clientList); 68 setWindowDefinition(); 69 generateStructure(); 70 generateSQL(); 71 } 72 73 public void setParameter(String name, String value) throws Exception { 74 if (name==null || name.equals("")) throw new Exception ("Invalid parameter name"); 75 if (this.parameters==null) this.parameters = new Hashtable <String , String >(); 76 if (value==null || value.equals("")) this.parameters.remove(name.toUpperCase()); 77 else this.parameters.put(name.toUpperCase(), value); 78 } 79 80 public String getParameter(String name) { 81 if (name==null || name.equals("")) return ""; 82 else if (this.parameters==null) return ""; 83 else return this.parameters.get(name.toUpperCase()); 84 } 85 86 public Vector <String > getParameters() { 87 Vector <String > result = new Vector <String >(); 88 if (log4j.isDebugEnabled()) log4j.debug("Obtaining parameters"); 89 Vector <QueryParameterStructure> vAux = getSelectParameters(); 90 if (vAux!=null) { 91 for (int i=0;i<vAux.size();i++) { 92 QueryParameterStructure aux = vAux.elementAt(i); 93 String strAux = getParameter(aux.getName()); 94 if (strAux==null || strAux.equals("")) result.addElement(aux.getName()); 95 } 96 } 97 if (log4j.isDebugEnabled()) log4j.debug("Select parameters obtained"); 98 vAux = getFromParameters(); 99 if (vAux!=null) { 100 for (int i=0;i<vAux.size();i++) { 101 QueryParameterStructure aux = vAux.elementAt(i); 102 String strAux = getParameter(aux.getName()); 103 if (strAux==null || strAux.equals("")) result.addElement(aux.getName()); 104 } 105 } 106 if (log4j.isDebugEnabled()) log4j.debug("From parameters obtained"); 107 vAux = getWhereParameters(); 108 if (vAux!=null) { 109 for (int i=0;i<vAux.size();i++) { 110 QueryParameterStructure aux = vAux.elementAt(i); 111 String strAux = getParameter(aux.getName()); 112 if (strAux==null || strAux.equals("")) result.addElement(aux.getName()); 113 } 114 } 115 if (log4j.isDebugEnabled()) log4j.debug("Where parameters obtained"); 116 vAux = getFilterParameters(); 117 if (vAux!=null) { 118 for (int i=0;i<vAux.size();i++) { 119 QueryParameterStructure aux = vAux.elementAt(i); 120 String strAux = getParameter(aux.getName()); 121 if (strAux==null || strAux.equals("")) result.addElement(aux.getName()); 122 } 123 } 124 if (log4j.isDebugEnabled()) log4j.debug("Filter parameters obtained"); 125 vAux = getOrderByParameters(); 126 if (vAux!=null) { 127 for (int i=0;i<vAux.size();i++) { 128 QueryParameterStructure aux = vAux.elementAt(i); 129 String strAux = getParameter(aux.getName()); 130 if (strAux==null || strAux.equals("")) result.addElement(aux.getName()); 131 } 132 } 133 if (log4j.isDebugEnabled()) log4j.debug("Order by parameters obtained"); 134 result.addElement("#AD_LANGUAGE"); 135 return result; 136 } 137 138 public Vector <String > getParameterValues() { 139 Vector <String > result = new Vector <String >(); 140 if (log4j.isDebugEnabled()) log4j.debug("Obtaining parameters values"); 141 Vector <QueryParameterStructure> vAux = getSelectParameters(); 142 if (vAux!=null) { 143 for (int i=0;i<vAux.size();i++) { 144 QueryParameterStructure aux = vAux.elementAt(i); 145 result.addElement(getParameter(aux.getName())); 146 } 147 } 148 if (log4j.isDebugEnabled()) log4j.debug("Select parameters obtained"); 149 vAux = getFromParameters(); 150 if (vAux!=null) { 151 for (int i=0;i<vAux.size();i++) { 152 QueryParameterStructure aux = vAux.elementAt(i); 153 result.addElement(getParameter(aux.getName())); 154 } 155 } 156 if (log4j.isDebugEnabled()) log4j.debug("From parameters obtained"); 157 vAux = getWhereParameters(); 158 if (vAux!=null) { 159 for (int i=0;i<vAux.size();i++) { 160 QueryParameterStructure aux = vAux.elementAt(i); 161 result.addElement(getParameter(aux.getName())); 162 } 163 } 164 if (log4j.isDebugEnabled()) log4j.debug("Where parameters obtained"); 165 vAux = getFilterParameters(); 166 if (vAux!=null) { 167 for (int i=0;i<vAux.size();i++) { 168 QueryParameterStructure aux = vAux.elementAt(i); 169 result.addElement(getParameter(aux.getName())); 170 } 171 } 172 if (log4j.isDebugEnabled()) log4j.debug("Filter parameters obtained"); 173 vAux = getOrderByParameters(); 174 if (vAux!=null) { 175 for (int i=0;i<vAux.size();i++) { 176 QueryParameterStructure aux = vAux.elementAt(i); 177 result.addElement(getParameter(aux.getName())); 178 } 179 } 180 if (log4j.isDebugEnabled()) log4j.debug("Order by parameters obtained"); 181 return result; 182 } 183 184 public Vector <String > getParameterValuesTotalSQL() { 185 Vector <String > result = new Vector <String >(); 186 if (log4j.isDebugEnabled()) log4j.debug("Obtaining parameters values"); 187 Vector <QueryParameterStructure> vAux = getFromParameters(); 188 if (vAux!=null) { 189 for (int i=0;i<vAux.size();i++) { 190 QueryParameterStructure aux = vAux.elementAt(i); 191 result.addElement(getParameter(aux.getName())); 192 } 193 } 194 if (log4j.isDebugEnabled()) log4j.debug("From parameters obtained"); 195 vAux = getWhereParameters(); 196 if (vAux!=null) { 197 for (int i=0;i<vAux.size();i++) { 198 QueryParameterStructure aux = vAux.elementAt(i); 199 result.addElement(getParameter(aux.getName())); 200 } 201 } 202 if (log4j.isDebugEnabled()) log4j.debug("Where parameters obtained"); 203 vAux = getFilterParameters(); 204 if (vAux!=null) { 205 for (int i=0;i<vAux.size();i++) { 206 QueryParameterStructure aux = vAux.elementAt(i); 207 result.addElement(getParameter(aux.getName())); 208 } 209 } 210 if (log4j.isDebugEnabled()) log4j.debug("Filter parameters obtained"); 211 return result; 212 } 213 214 public void setVars(VariablesSecureApp _vars) throws Exception { 215 if (_vars==null) throw new Exception ("The session vars is null"); 216 this.vars = _vars; 217 } 218 219 public VariablesSecureApp getVars() { 220 return this.vars; 221 } 222 223 public void setPool(ConnectionProvider _conn) throws Exception { 224 if (_conn==null) throw new Exception ("The pool is null"); 225 this.pool = _conn; 226 } 227 228 public ConnectionProvider getPool() { 229 return this.pool; 230 } 231 232 public void setTabID(String _data) throws Exception { 233 if (_data==null || _data.equals("")) throw new Exception ("The Tab ID must be specified"); 234 setParameter(internalPrefix + "AD_Tab_ID", _data); 235 } 236 237 public String getTabID() { 238 return getParameter(internalPrefix + "AD_Tab_ID"); 239 } 240 241 public boolean getIsSameTable() { 242 return this.isSameTable; 243 } 244 245 public void setWindowDefinition() throws Exception { 246 TableSQLQueryData[] data = TableSQLQueryData.selectWindowDefinition(getPool(), getVars().getLanguage(), getTabID()); 247 if (data==null || data.length==0) throw new Exception ("Couldn't extract window information"); 248 setParameter(internalPrefix + "AD_Window_ID", data[0].adWindowId); 249 setParameter(internalPrefix + "AD_Table_ID", data[0].adTableId); 250 setParameter(internalPrefix + "TabLevel", data[0].tablevel); 251 setParameter(internalPrefix + "IsReadOnly", data[0].isreadonly); 252 setParameter(internalPrefix + "HasTree", data[0].hastree); 253 setParameter(internalPrefix + "WhereClause", data[0].whereclause); 254 setParameter(internalPrefix + "OrderByClause", data[0].orderbyclause); 255 setParameter(internalPrefix + "AD_Process_ID", data[0].adProcessId); 256 setParameter(internalPrefix + "AD_ColumnSortOrder_ID", data[0].adColumnsortorderId); 257 setParameter(internalPrefix + "AD_ColumnSortYesNo_ID", data[0].adColumnsortyesnoId); 258 setParameter(internalPrefix + "IsSortTab", data[0].issorttab); 259 setParameter(internalPrefix + "FilterClause", data[0].filterclause); 260 setParameter(internalPrefix + "EditReference", data[0].editreference); 261 setParameter(internalPrefix + "WindowType", data[0].windowtype); 262 setParameter(internalPrefix + "IsSOTrx", data[0].issotrx); 263 setParameter(internalPrefix + "WindowName", data[0].windowName); 264 setParameter(internalPrefix + "WindowNameTrl", data[0].windowNameTrl); 265 setParameter(internalPrefix + "TabName", data[0].tabName); 266 setParameter(internalPrefix + "TabNameTrl", data[0].tabNameTrl); 267 setParameter(internalPrefix + "TableName", data[0].tablename); 268 if (!getTabLevel().equals("0")) { 269 TableSQLQueryData[] parentFields = TableSQLQueryData.parentsColumnName(getPool(), getTabID()); 270 if (parentFields != null && parentFields.length>0) { 271 if (log4j.isDebugEnabled()) log4j.debug("Parent key: " + parentFields[0].columnname); 272 setParameter(internalPrefix + "ParentColumnName", parentFields[0].columnname); 273 } else { 274 parentFields = TableSQLQueryData.parentsColumnNameKey(getPool(), getTabID()); 275 if (parentFields != null && parentFields.length>0) { 276 if (log4j.isDebugEnabled()) log4j.debug("Parent key: " + parentFields[0].columnname); 277 setParameter(internalPrefix + "ParentColumnName", parentFields[0].columnname); 278 this.isSameTable = true; 279 } 280 } 281 } 282 } 283 284 public String getWindowID() { 285 return getParameter(internalPrefix + "AD_Window_ID"); 286 } 287 288 public String getKeyColumn() { 289 return getParameter(internalPrefix + "KeyColumn"); 290 } 291 292 public String getTableID() { 293 return getParameter(internalPrefix + "AD_Table_ID"); 294 } 295 296 public String getTableName() { 297 return getParameter(internalPrefix + "TableName"); 298 } 299 300 public String getWhereClause() { 301 return getParameter(internalPrefix + "WhereClause"); 302 } 303 304 public String getOrderByClause() { 305 return getParameter(internalPrefix + "OrderByClause"); 306 } 307 308 public String getFilterClause() { 309 return getParameter(internalPrefix + "FilterClause"); 310 } 311 312 public String getTabLevel() { 313 return getParameter(internalPrefix + "TabLevel"); 314 } 315 316 public String getWindowType() { 317 return getParameter(internalPrefix + "WindowType"); 318 } 319 320 public String getParentColumnName() { 321 return getParameter(internalPrefix + "ParentColumnName"); 322 } 323 324 public void setOrgList(String _orgList) throws Exception { 325 setParameter(internalPrefix + "orgList", _orgList); 326 } 327 328 public String getOrgList() { 329 return getParameter(internalPrefix + "orgList"); 330 } 331 332 public void setClientList(String _clientList) throws Exception { 333 setParameter(internalPrefix + "clientList", _clientList); 334 } 335 336 public String getClientList() { 337 return getParameter(internalPrefix + "clientList"); 338 } 339 340 public void addStructure(Properties _prop) { 341 if (_prop==null) return; 342 if (this.structure == null) this.structure = new Vector <Properties >(); 343 this.structure.addElement(_prop); 344 } 345 346 public Vector <Properties > getStructure() { 347 return this.structure; 348 } 349 350 public void addOrderByPosition(String _data) { 351 if (_data==null) return; 352 if (this.orderByPosition == null) this.orderByPosition = new Vector <String >(); 353 this.orderByPosition.addElement(_data); 354 } 355 356 public Vector <String > getOrderByPosition() { 357 return this.orderByPosition; 358 } 359 360 public void addOrderByDirection(String _data) { 361 if (_data==null) return; 362 if (this.orderByDirection == null) this.orderByDirection = new Vector <String >(); 363 this.orderByDirection.addElement(_data); 364 } 365 366 public Vector <String > getOrderByDirection() { 367 return this.orderByDirection; 368 } 369 370 public Vector <Properties > getFilteredStructure(String propertyName, String propertyValue) { 371 Vector <Properties > vAux = new Vector <Properties >(); 372 if (this.structure==null) return vAux; 373 for (Enumeration <Properties > e = this.structure.elements();e.hasMoreElements();) { 374 Properties prop = e.nextElement(); 375 if (prop.getProperty(propertyName).equals(propertyValue)) vAux.addElement(prop); 376 } 377 return vAux; 378 } 379 380 public void setIndex(int _index) { 381 this.index = _index; 382 } 383 384 public int getIndex() { 385 return this.index; 386 } 387 388 public void addSelectField(String _field, String _alias) { 389 addSelectField(_field, _alias, false); 390 } 391 392 public void addSelectField(String _field, String _alias, boolean _new) { 393 QueryFieldStructure p = new QueryFieldStructure(_field, " AS ", _alias, "SELECT"); 394 if (this.select == null) this.select = new Vector <QueryFieldStructure>(); 395 else { 396 String oldField = getSelectField(_alias); 397 if (oldField!=null && !oldField.equals("")) p = new QueryFieldStructure(oldField + FIELD_CONCAT + _field, " AS ", _alias, "SELECT"); 398 } 399 this.select.addElement(p); 400 } 401 402 public String getSelectField(String _alias) { 403 if (this.select == null) return ""; 404 for (int i=0;i<this.select.size();i++) { 405 QueryFieldStructure p = this.select.elementAt(i); 406 if (p.getAlias().equalsIgnoreCase(_alias)) return p.getField(); 407 } 408 return ""; 409 } 410 411 public Vector <QueryFieldStructure> getSelectFields() { 412 return this.select; 413 } 414 415 public void addFromField(String _field, String _alias) { 416 QueryFieldStructure p = new QueryFieldStructure(_field, " ", _alias, "FROM"); 417 if (this.from == null) this.from = new Vector <QueryFieldStructure>(); 418 from.addElement(p); 419 } 420 421 public Vector <QueryFieldStructure> getFromFields() { 422 return this.from; 423 } 424 425 public void addWhereField(String _field, String _type) { 426 QueryFieldStructure p = new QueryFieldStructure(_field, "", "", _type); 427 if (this.where == null) this.where = new Vector <QueryFieldStructure>(); 428 where.addElement(p); 429 } 430 431 public Vector <QueryFieldStructure> getWhereFields() { 432 return this.where; 433 } 434 435 public void addFilterField(String _field, String _type) { 436 QueryFieldStructure p = new QueryFieldStructure(_field, "", "", _type); 437 if (this.filter == null) this.filter = new Vector <QueryFieldStructure>(); 438 filter.addElement(p); 439 } 440 441 public Vector <QueryFieldStructure> getFilterFields() { 442 return this.filter; 443 } 444 445 public void addInternalFilterField(String _field, String _type) { 446 QueryFieldStructure p = new QueryFieldStructure(_field, "", "", _type); 447 if (this.internalFilter == null) this.internalFilter = new Vector <QueryFieldStructure>(); 448 internalFilter.addElement(p); 449 } 450 451 public Vector <QueryFieldStructure> getInternalFilterFields() { 452 return this.internalFilter; 453 } 454 455 public void addOrderByField(String _field) { 456 QueryFieldStructure p = new QueryFieldStructure(_field, "", "", "ORDERBY"); 457 if (this.orderBy == null) this.orderBy = new Vector <QueryFieldStructure>(); 458 this.orderBy.addElement(p); 459 } 460 461 public Vector <QueryFieldStructure> getOrderByFields() { 462 return this.orderBy; 463 } 464 465 public void addInternalOrderByField(String _field) { 466 QueryFieldStructure p = new QueryFieldStructure(_field, "", "", "ORDERBY"); 467 if (this.internalOrderBy == null) this.internalOrderBy = new Vector <QueryFieldStructure>(); 468 this.internalOrderBy.addElement(p); 469 } 470 471 public Vector <QueryFieldStructure> getInternalOrderByFields() { 472 return this.internalOrderBy; 473 } 474 475 public void addSelectParameter(String _parameter, String _fieldName) { 476 if (this.paramSelect == null) this.paramSelect = new Vector <QueryParameterStructure>(); 477 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, "SELECT"); 478 this.paramSelect.addElement(aux); 479 } 480 481 public Vector <QueryParameterStructure> getSelectParameters() { 482 return this.paramSelect; 483 } 484 485 public void addFromParameter(String _parameter, String _fieldName) { 486 if (this.paramFrom == null) this.paramFrom = new Vector <QueryParameterStructure>(); 487 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, "FROM"); 488 this.paramFrom.addElement(aux); 489 } 490 491 public Vector <QueryParameterStructure> getFromParameters() { 492 return this.paramFrom; 493 } 494 495 public void addWhereParameter(String _parameter, String _fieldName, String _type) { 496 if (this.paramWhere == null) this.paramWhere = new Vector <QueryParameterStructure>(); 497 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, _type); 498 this.paramWhere.addElement(aux); 499 } 500 501 public Vector <QueryParameterStructure> getWhereParameters() { 502 return this.paramWhere; 503 } 504 505 public void addFilterParameter(String _parameter, String _fieldName, String _type) { 506 if (this.paramFilter == null) this.paramFilter = new Vector <QueryParameterStructure>(); 507 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, _type); 508 this.paramFilter.addElement(aux); 509 } 510 511 public Vector <QueryParameterStructure> getFilterParameters() { 512 return this.paramFilter; 513 } 514 515 public void addInternalFilterParameter(String _parameter, String _fieldName, String _type) { 516 if (this.paramInternalFilter == null) this.paramInternalFilter = new Vector <QueryParameterStructure>(); 517 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, _type); 518 this.paramInternalFilter.addElement(aux); 519 } 520 521 public Vector <QueryParameterStructure> getInternalFilterParameters() { 522 return this.paramInternalFilter; 523 } 524 525 public void addOrderByParameter(String _parameter, String _fieldName) { 526 if (this.paramOrderBy == null) this.paramOrderBy = new Vector <QueryParameterStructure>(); 527 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, "ORDERBY"); 528 this.paramOrderBy.addElement(aux); 529 } 530 531 public Vector <QueryParameterStructure> getOrderByParameters() { 532 return this.paramOrderBy; 533 } 534 535 public void addInternalOrderByParameter(String _parameter, String _fieldName) { 536 if (this.paramInternalOrderBy == null) this.paramInternalOrderBy = new Vector <QueryParameterStructure>(); 537 QueryParameterStructure aux = new QueryParameterStructure(_parameter, _fieldName, "ORDERBY"); 538 this.paramInternalOrderBy.addElement(aux); 539 } 540 541 public Vector <QueryParameterStructure> getInternalOrderByParameters() { 542 return this.paramInternalOrderBy; 543 } 544 545 public String parseContext(String context, String type) { 546 if (context==null || context.equals("")) return ""; 547 StringBuffer strOut = new StringBuffer (); 548 String value = new String (context); 549 String token, defStr; 550 int i = value.indexOf("@"); 551 while (i!=-1) { 552 strOut.append(value.substring(0,i)); 553 value = value.substring(i+1); 554 int j=value.indexOf("@"); 555 if (j==-1) { 556 strOut.append(value); 557 return strOut.toString(); 558 } 559 token = value.substring(0, j); 560 if (token.equalsIgnoreCase("#User_Client")) defStr=getClientList(); 561 else if (token.equalsIgnoreCase("#User_Org")) defStr=getOrgList(); 562 else defStr="?"; 563 564 if (defStr.equals("?")) { 565 if (type.equalsIgnoreCase("WHERE")) addWhereParameter(token, type.toUpperCase(), type.toUpperCase()); 566 else if (type.equalsIgnoreCase("FILTER")) addInternalFilterParameter(token, type.toUpperCase(), type.toUpperCase()); 567 else if (type.equalsIgnoreCase("INTERNAL_ORDERBY")) addInternalOrderByParameter(token, "ORDERBY"); 568 } 569 strOut.append(defStr); 570 value=value.substring(j+1); 571 i=value.indexOf("@"); 572 } 573 strOut.append(value); 574 return strOut.toString().replace("'?'","?"); 575 } 576 577 private void generateStructure() throws Exception { 578 if (getPool()==null) throw new Exception ("No pool defined for database connection"); 579 else if (getTabID().equals("")) throw new Exception ("No Tab defined"); 580 TableSQLQueryData[] data = TableSQLQueryData.selectStructure(getPool(), getTabID(), getVars().getLanguage()); 581 if (data==null || data.length==0) throw new Exception ("Couldn't get structure for tab " + getTabID()); 582 String primaryKey = ""; 583 String secondaryKey = ""; 584 for (int i=0;i<data.length;i++) { 585 Properties prop = new Properties (); 586 prop.setProperty("ColumnName", data[i].columnname); 587 prop.setProperty("AD_Reference_ID", data[i].adReferenceId); 588 prop.setProperty("AD_Reference_Value_ID", data[i].adReferenceValueId); 589 prop.setProperty("AD_Val_Rule_ID", data[i].adValRuleId); 590 prop.setProperty("FieldLength", data[i].fieldlength); 591 prop.setProperty("DefaultValue", data[i].defaultvalue); 592 prop.setProperty("IsKey", data[i].iskey); 593 prop.setProperty("IsParent", data[i].isparent); 594 prop.setProperty("IsMandatory", data[i].ismandatory); 595 prop.setProperty("IsUpdateable", data[i].isupdateable); 596 prop.setProperty("ReadOnlyLogic", data[i].readonlylogic); 597 prop.setProperty("IsIdentifier", data[i].isidentifier); 598 prop.setProperty("SeqNo", data[i].seqno); 599 prop.setProperty("IsTranslated", data[i].istranslated); 600 prop.setProperty("IsEncrypted", data[i].isencrypted); 601 prop.setProperty("VFormat", data[i].vformat); 602 prop.setProperty("ValueMin", data[i].valuemin); 603 prop.setProperty("ValueMax", data[i].valuemax); 604 prop.setProperty("IsSelectionColumn", data[i].isselectioncolumn); 605 prop.setProperty("AD_Process_ID", data[i].adProcessId); 606 prop.setProperty("IsSessionAttr", data[i].issessionattr); 607 prop.setProperty("IsSecondaryKey", data[i].issecondarykey); 608 prop.setProperty("IsDesencryptable", data[i].isdesencryptable); 609 prop.setProperty("AD_CallOut_ID", data[i].adCalloutId); 610 prop.setProperty("Name", data[i].name); 611 prop.setProperty("AD_FieldGroup_ID", data[i].adFieldgroupId); 612 prop.setProperty("IsDisplayed", data[i].isdisplayed); 613 prop.setProperty("DisplayLogic", data[i].displaylogic); 614 prop.setProperty("DisplayLength", data[i].displaylength); 615 prop.setProperty("IsReadOnly", data[i].isreadonly); 616 prop.setProperty("SortNo", data[i].sortno); 617 prop.setProperty("IsSameLine", data[i].issameline); 618 prop.setProperty("IsHeading", data[i].isheading); 619 prop.setProperty("IsFieldOnly", data[i].isfieldonly); 620 prop.setProperty("ShowInRelation", data[i].showinrelation); 621 prop.setProperty("ColumnNameSearch", data[i].columnnameSearch); 622 addStructure(prop); 623 String parentKey = getParentColumnName(); 624 if (parentKey==null) parentKey = ""; 625 if (primaryKey.equals("") && data[i].iskey.equals("Y") && (getIsSameTable() || !data[i].columnname.equalsIgnoreCase(parentKey))) { 626 primaryKey = data[i].columnname; 627 } else if (secondaryKey.equals("") && data[i].issecondarykey.equals("Y") && (getIsSameTable() || !data[i].columnname.equalsIgnoreCase(parentKey))) { 628 secondaryKey = data[i].columnname; 629 } 630 } 631 if (!primaryKey.equals("")) setParameter(internalPrefix + "KeyColumn", primaryKey); 632 else if (!secondaryKey.equals("")) setParameter(internalPrefix + "KeyColumn", secondaryKey); 633 else { 634 primaryKey = TableSQLQueryData.columnNameKey(getPool(), getTabID()); 635 if (!primaryKey.equals("")) setParameter(internalPrefix + "KeyColumn", primaryKey); 636 else throw new Exception ("No column key defined for this tab"); 637 } 638 } 639 640 public void generateSQL() throws Exception { 641 if (getPool()==null) throw new Exception ("No pool defined for database connection"); 642 Vector <Properties > headers = getStructure(); 643 if (headers==null || headers.size()==0) throw new Exception ("No structure defined"); 644 int myIndex = this.index++; 645 addFromField(getTableName(), getTableName()); 646 for (Enumeration <Properties > e = headers.elements();e.hasMoreElements();) { 647 Properties prop = e.nextElement(); 648 switch (Integer.valueOf(prop.getProperty("AD_Reference_ID")).intValue()) { 649 case 17: case 18: case 19: case 30: case 31: case 35: 655 case 25: case 800011: addSelectField(getTableName() + "." + prop.getProperty("ColumnName"), prop.getProperty("ColumnName")); 658 identifier(getTableName(), prop, prop.getProperty("ColumnName") + "_R"); 659 break; 660 default: 661 identifier(getTableName(), prop, prop.getProperty("ColumnName")); 662 break; 663 } 664 } 665 setWindowFilters(); 666 } 667 668 public void identifier(String parentTableName, Properties field, String identifierName) throws Exception { 669 String reference; 670 if (field==null) return; 671 else reference = field.getProperty("AD_Reference_ID"); 672 switch (Integer.valueOf(reference).intValue()) { 673 case 17: setListQuery(parentTableName, field.getProperty("ColumnName"), field.getProperty("AD_Reference_Value_ID"), identifierName); 675 break; 676 case 18: setTableQuery(parentTableName, field.getProperty("ColumnName"), field.getProperty("AD_Reference_Value_ID"), identifierName); 678 break; 679 case 19: setTableDirQuery(parentTableName, field.getProperty("ColumnNameSearch"), field.getProperty("ColumnName"), field.getProperty("AD_Reference_Value_ID"), identifierName); 681 break; 682 case 35: case 30: setTableDirQuery(parentTableName, field.getProperty("ColumnNameSearch"), field.getProperty("ColumnName"), field.getProperty("AD_Reference_Value_ID"), identifierName); 685 break; 686 case 32: setImageQuery(parentTableName, field.getProperty("ColumnNameSearch"), identifierName); 688 break; 689 case 28: if (field.getProperty("AD_Reference_Value_ID")!=null && !field.getProperty("AD_Reference_Value_ID").equals("")) { 691 setListQuery(parentTableName, field.getProperty("ColumnName"), field.getProperty("AD_Reference_Value_ID"), identifierName); 692 } else addSelectField(formatField((parentTableName + "." + field.getProperty("ColumnName")), reference), identifierName); 693 break; 694 default: 695 if (!checkTableTranslation(parentTableName, field, reference, identifierName)) { 696 addSelectField(formatField((parentTableName + "." + field.getProperty("ColumnName")), reference), identifierName); 697 } 698 break; 699 } 700 } 701 702 private boolean checkTableTranslation(String tableName, Properties field, String reference, String identifierName) throws Exception { 703 if (tableName==null || tableName.equals("") || field==null) return false; 704 ComboTableQueryData[] data = ComboTableQueryData.selectTranslatedColumn(getPool(), field.getProperty("TableName"), field.getProperty("ColumnName")); 705 if (data==null || data.length==0) return false; 706 int myIndex = this.index++; 707 addSelectField("(CASE WHEN td_trl" + myIndex + "." + data[0].columnname + " IS NULL THEN " + formatField((tableName + "." + field.getProperty("ColumnName")), reference) + " ELSE " + formatField(("td_trl" + myIndex + "." + data[0].columnname), reference) + " END)", identifierName); 708 addFromField("(SELECT AD_Language, " + data[0].reference + ", " + data[0].columnname + " FROM " + data[0].tablename + ") td_trl" + myIndex + " on " + tableName + "." + data[0].reference + " = td_trl" + myIndex + "." + data[0].reference + " AND td_trl" + myIndex + ".AD_Language = ?", "td_trl" + myIndex); 709 addFromParameter("#AD_LANGUAGE", "LANGUAGE"); 710 return true; 711 } 712 713 private String formatField(String field, String reference) { 714 String result = ""; 715 if (field==null) return ""; 716 else if (reference==null || reference.length()==0) return field; 717 switch (Integer.valueOf(reference).intValue()) { 718 case 11: result = "CAST(" + field + " AS INTEGER)"; 720 break; 721 case 12: case 22: case 26: case 29: case 800008: case 800019: result = "TO_NUMBER(" + field + ")"; 728 break; 729 case 15: result = "TO_CHAR(" + field + (getVars()==null?"":(", '" + getVars().getSessionValue("#AD_SqlDateFormat") + "'")) + ")"; 731 break; 732 case 16: result = "(" + field + ")"; 734 break; 735 case 24: result = "TO_CHAR(" + field + ", 'HH24:MI:SS')"; 737 break; 738 case 20: result = "COALESCE(" + field + ", 'N')"; 740 break; 741 default: 742 result = "TO_CHAR(" + field + ")"; 743 break; 744 } 745 return result; 746 } 747 748 private Properties fieldToProperties(FieldProvider field) throws Exception { 749 Properties aux = new Properties (); 750 if (field!=null) { 751 aux.setProperty("ColumnName", field.getField("name")); 752 aux.setProperty("TableName", field.getField("tablename")); 753 aux.setProperty("AD_Reference_ID", field.getField("reference")); 754 aux.setProperty("AD_Reference_Value_ID", field.getField("referencevalue")); 755 aux.setProperty("IsMandatory", field.getField("required")); 756 aux.setProperty("ColumnNameSearch", field.getField("columnname")); 757 } 758 return aux; 759 } 760 761 private void setImageQuery(String tableName, String fieldName, String identifierName) throws Exception { 762 int myIndex = this.index++; 763 addSelectField("((CASE td" + myIndex + ".isActive WHEN 'N' THEN '" + INACTIVE_DATA + "' ELSE '' END) || td" + myIndex + ".imageURL)", identifierName); 764 String tables = "(select IsActive, AD_Image_ID, ImageURL from AD_Image) td" + myIndex; 765 tables += " on " + tableName + "." + fieldName; 766 tables += " = td" + myIndex + ".AD_Image_ID"; 767 addFromField(tables, "td" + myIndex); 768 } 769 770 private void setListQuery(String tableName, String fieldName, String referenceValue, String identifierName) throws Exception { 771 int myIndex = this.index++; 772 addSelectField("((CASE td" + myIndex + ".isActive WHEN 'N' THEN '" + INACTIVE_DATA + "' ELSE '' END) || (CASE WHEN td_trl" + myIndex + ".name IS NULL THEN td" + myIndex + ".name ELSE td_trl" + myIndex + ".name END))", identifierName); 773 String tables = "(select IsActive, ad_ref_list_id, ad_reference_id, value, name from ad_ref_list) td" + myIndex; 774 tables += " on "; 775 if (fieldName.equalsIgnoreCase("DocAction")) tables += "(CASE " + tableName + "." + fieldName + " WHEN '--' THEN 'CL' ELSE TO_CHAR(" + tableName + "." + fieldName + ") END)"; 776 else tables += tableName + "." + fieldName; 777 tables += " = td" + myIndex + ".value AND td" + myIndex + ".ad_reference_id = ?"; 778 addFromField(tables, "td" + myIndex); 779 addFromParameter("TD" + myIndex + ".AD_REFERENCE_ID", "KEY"); 780 setParameter("TD" + myIndex + ".AD_REFERENCE_ID", referenceValue); 781 addFromField("(SELECT ad_language, name, ad_ref_list_id from ad_ref_list_trl) td_trl" + myIndex + " on td" + myIndex + ".ad_ref_list_id = td_trl" + myIndex + ".ad_ref_list_id AND td_trl" + myIndex + ".ad_language = ?", "td_trl" + myIndex); 782 addFromParameter("#AD_LANGUAGE", "LANGUAGE"); 783 } 784 785 private void setTableQuery(String tableName, String fieldName, String referenceValue, String identifierName) throws Exception { 786 int myIndex = this.index++; 787 ComboTableQueryData trd[] = ComboTableQueryData.selectRefTable(getPool(), referenceValue); 788 if (trd==null || trd.length==0) return; 789 String tables = "(SELECT "; 790 if (trd[0].isvaluedisplayed.equals("Y")) { 791 addSelectField("td" + myIndex + ".VALUE", identifierName); 792 tables += "value, "; 793 } 794 tables += trd[0].keyname + ", " + trd[0].name + " FROM "; 795 Properties fieldsAux = fieldToProperties(trd[0]); 796 tables += trd[0].tablename + ") td" + myIndex; 797 tables += " on " + tableName + "." + fieldName + " = td" + myIndex + "." + trd[0].keyname; 798 addFromField(tables, "td" + myIndex); 799 identifier("td" + myIndex, fieldsAux, identifierName); 800 } 801 802 private void setTableDirQuery(String tableName, String fieldName, String parentFieldName, String referenceValue, String identifierName) throws Exception { 803 int myIndex = this.index++; 804 String name = fieldName; 805 String tableDirName = name.substring(0,name.length()-3); 806 if (referenceValue!=null && !referenceValue.equals("")) { 807 TableSQLQueryData[] search = TableSQLQueryData.searchInfo(getPool(), referenceValue); 808 if (search!=null && search.length!=0) { 809 name = search[0].columnname; 810 tableDirName = search[0].tablename; 811 } 812 } 813 ComboTableQueryData trd[] = ComboTableQueryData.identifierColumns(getPool(), tableDirName); 814 String tables = "(SELECT " + name; 815 for (int i=0;i<trd.length;i++) tables += ", " + trd[i].name; 816 tables += " FROM "; 817 tables += tableDirName + ") td" + myIndex; 818 tables += " on " + tableName + "." + parentFieldName + " = td" + myIndex + "." + name + "\n"; 819 addFromField(tables, "td" + myIndex); 820 for (int i=0;i<trd.length;i++) identifier("td" + myIndex, fieldToProperties(trd[i]), identifierName); 821 } 822 823 private int findCloseTarget(String text, int pos, String openChar, String closeChar) { 824 if (text==null || text.equals("")) return -1; 825 int nextOpen = text.indexOf(openChar, pos); 826 int nextClose = text.indexOf(closeChar, pos); 827 if (nextClose!=-1) { 828 while (pos!=-1 && nextClose!=-1 && (nextOpen!=-1 && nextClose>nextOpen)) { 829 pos = findCloseTarget(text, nextOpen+1, openChar, closeChar); 830 nextOpen = text.indexOf(openChar, pos); 831 nextClose = text.indexOf(closeChar, pos); 832 } 833 if (pos==-1) nextClose = -1; 834 } 835 return nextClose; 836 } 837 838 private Vector <String > getOrdeByIntoFields(String text) { 839 Vector <String > result = new Vector <String >(); 840 if (text!=null && !text.equals("")) { 841 int lastPos = 0; 842 int openPos = text.indexOf("("); 843 int actualPos = text.indexOf(","); 844 while (actualPos!=-1) { 845 if (actualPos>openPos) openPos = findCloseTarget(text, openPos+1, "(", ")"); 846 if (openPos == -1) { 847 log4j.error("Parsing failed on orderby clause: " + text + " - pos: " + Integer.toString(actualPos)); 848 result.addElement(text.substring(lastPos)); 849 lastPos=-1; 850 actualPos=-1; 851 } else { 852 result.addElement(text.substring(lastPos, actualPos)); 853 lastPos = actualPos+1; 854 openPos = text.indexOf("(", lastPos); 855 actualPos = text.indexOf(",", lastPos); 856 } 857 } 858 if (lastPos!=-1 && lastPos<text.length()) result.addElement(text.substring(lastPos)); 859 } 860 return result; 861 } 862 863 private void setWindowFilters() throws Exception { 864 String strWhereClause = getWhereClause(); 865 if (strWhereClause!=null && !strWhereClause.equals("")) { 866 if (strWhereClause.indexOf("@")!=-1) strWhereClause = parseContext(strWhereClause, "WHERE"); 867 addWhereField(strWhereClause, "WHERE"); 868 } 869 if (!getTableName().toUpperCase().endsWith("_ACCESS")) { 870 addWhereField(getTableName() + ".AD_Client_ID IN (" + getClientList() + ")", "WHERE"); 871 addWhereField(getTableName() + ".AD_Org_ID IN (" + getOrgList() + ")", "WHERE"); 872 } 873 String parentKey = getParentColumnName(); 874 if (parentKey!=null && !parentKey.equals("")) { 875 addWhereField(getTableName() + "." + parentKey + " = ?", "PARENT"); 876 addWhereParameter("PARENT", "PARENT", "PARENT"); 877 } 878 String strOrderByClause = getOrderByClause(); 879 if (strOrderByClause==null || strOrderByClause.equals("")) getFieldsOrderByClause(); 880 else { 881 if (strOrderByClause.indexOf("@")!=-1) strOrderByClause = parseContext(strOrderByClause, "INTERNAL_ORDERBY"); 882 Vector <String > vecOrdersAux = getOrdeByIntoFields(strOrderByClause); 883 if (vecOrdersAux!=null && vecOrdersAux.size()>0) { 884 for (int i=0;i<vecOrdersAux.size();i++) addInternalOrderByField(getRealOrderByColumn(vecOrdersAux.elementAt(i))); 885 } else addInternalOrderByField(getRealOrderByColumn(strOrderByClause)); 886 } 887 String strFilterClause = getFilterClause(); 888 if (strFilterClause != null && !strFilterClause.equals("")) { 889 if (strFilterClause.indexOf("@")!=-1) strFilterClause = parseContext(strFilterClause, "FILTER"); 890 addInternalFilterField(strFilterClause, "FILTER"); 891 } 892 if (getWindowType().equalsIgnoreCase("T") && getTabLevel().equals("0")) { 893 addInternalFilterField("(COALESCE(" + getTableName() + ".Processed, 'N')='N' OR " + getTableName() + ".Updated > now()-TO_NUMBER(?))", "FILTER"); 894 addInternalFilterParameter("#Transactional$Range", "FILTER", "FILTER"); 895 } 896 } 897 898 private void getFieldsOrderByClause() throws Exception { 899 TableSQLQueryData[] orderByData = TableSQLQueryData.selectOrderByFields(getPool(), getTabID()); 900 if (orderByData==null) return; 901 for (int i=0;i<orderByData.length;i++) { 902 addInternalOrderByField(getTableName() + "." + orderByData[i].columnname + " " + (orderByData[i].columnname.equalsIgnoreCase("DocumentNo")?"DESC":"ASC")); 903 } 904 } 905 906 private String getRealOrderByColumn(String data) { 907 if (data==null || data.equals("")) return ""; 908 data = data.trim(); 909 String orderDirection = "ASC"; 910 String orderField = data; 911 int pos = data.toUpperCase().lastIndexOf(" DESC"); 912 if (pos==-1 || pos!= (data.length()-5)) { 913 pos = data.toUpperCase().lastIndexOf(" ASC"); 914 if (pos!=-1 && pos== (data.length()-4)) { 915 orderField = data.substring(0,pos); 916 } else return data; 917 } else { 918 orderField = data.substring(0,pos); 919 orderDirection = "DESC"; 920 } 921 String _alias = getSelectFieldAlias(orderField); 922 if (!_alias.equals("") && this.structure!=null) { 923 boolean isTranslated = false; 924 if (_alias.endsWith("_R")) { 925 isTranslated = true; 926 _alias = _alias.substring(0, _alias.length()-2); 927 } 928 int position = -1; 929 String reference = ""; 930 Properties myProps = getColumnPosition(_alias); 931 if (myProps != null) { 932 position = Integer.valueOf(myProps.getProperty("Position")).intValue(); 933 reference = myProps.getProperty("AD_Reference_ID"); 934 } 935 if (position!=-1) { 936 addOrderByPosition(Integer.toString(position)); 937 addOrderByDirection(orderDirection); 938 } 939 if (!isTranslated) { 940 String aux = getSelectField(_alias + "_R"); 941 if (aux!=null && !aux.equals("")) orderField = aux; 942 } 943 if (reference.equals("15") || reference.equals("16") || reference.equals("24")) { 944 orderField = "TO_DATE(" + orderField + ")"; 945 } 946 } 947 return orderField + " " + orderDirection; 948 } 949 950 public SQLReturnObject[] getHeaders() { 951 return getHeaders(false); 952 } 953 954 public SQLReturnObject[] getHeaders(boolean withoutIdentifiers) { 955 SQLReturnObject[] data = null; 956 Vector <SQLReturnObject> vAux = new Vector <SQLReturnObject>(); 957 Vector <Properties > structure = getStructure(); 958 for (Enumeration <Properties > e = structure.elements();e.hasMoreElements();) { 959 Properties prop = e.nextElement(); 960 if (prop.getProperty("IsKey").equals("Y") || prop.getProperty("IsSecondaryKey").equals("Y") || (prop.getProperty("IsDisplayed").equals("Y") && prop.getProperty("ShowInRelation").equals("Y") && prop.getProperty("IsEncrypted").equals("N") && !prop.getProperty("ColumnName").equals(getParentColumnName()))) { 961 SQLReturnObject dataAux = new SQLReturnObject(); 962 dataAux.setData("columnname", prop.getProperty("ColumnName")); 963 dataAux.setData("gridcolumnname", prop.getProperty("ColumnName")); 964 dataAux.setData("adReferenceId", prop.getProperty("AD_Reference_ID")); 965 dataAux.setData("adReferenceValueId", prop.getProperty("AD_Reference_Value_ID")); 966 dataAux.setData("isidentifier", (prop.getProperty("IsIdentifier").equals("Y")?"true":"false")); 967 dataAux.setData("iskey", (prop.getProperty("ColumnName").equals(getKeyColumn())?"true":"false")); 968 dataAux.setData("isvisible", ((prop.getProperty("IsDisplayed").equals("Y") && prop.getProperty("ShowInRelation").equals("Y"))?"true":"false")); 969 dataAux.setData("name", prop.getProperty("Name")); 970 String type = "string"; 971 if (prop.getProperty("AD_Reference_ID").equals("17") || prop.getProperty("AD_Reference_ID").equals("18") || prop.getProperty("AD_Reference_ID").equals("19")) { 972 type="dynamicEnum"; 973 } else if (prop.getProperty("AD_Reference_ID").equals("800101")) { 974 type="url"; 975 } else if (prop.getProperty("AD_Reference_ID").equals("32")) { 976 type="img"; 977 } 978 dataAux.setData("type", type); 979 String strWidth = prop.getProperty("DisplayLength"); 980 if (strWidth==null || strWidth.equals("")) strWidth = "0"; 981 int width = Integer.valueOf(strWidth).intValue(); 982 width = width * 6; 983 if (width<23) width=23; 984 else if (width>300) width=300; 985 dataAux.setData("width", Integer.toString(width)); 986 boolean cloneRecord = (!withoutIdentifiers && (prop.getProperty("IsDisplayed").equals("Y") && prop.getProperty("ShowInRelation").equals("Y")) && prop.getProperty("ColumnName").equals(getKeyColumn()) && !getSelectField(prop.getProperty("ColumnName") + "_R").equals("")); 987 if (cloneRecord) { 988 dataAux.setData("isvisible", "false"); 989 dataAux.setData("gridcolumnname", "keyname"); 990 } 991 vAux.addElement(dataAux); 992 if (cloneRecord) vAux.addElement(getClone(dataAux)); 993 } 994 } 995 data = new SQLReturnObject[vAux.size()]; 996 vAux.copyInto(data); 997 return data; 998 } 999 1000 public SQLReturnObject getClone(SQLReturnObject data) { 1001 SQLReturnObject dataAux = new SQLReturnObject(); 1002 dataAux.setData("columnname", data.getData("columnname")); 1003 dataAux.setData("gridcolumnname", data.getData("columnname")); 1004 dataAux.setData("adReferenceId", data.getData("adReferenceId")); 1005 dataAux.setData("adReferenceValueId", data.getData("adReferenceValueId")); 1006 dataAux.setData("isidentifier", "true"); 1007 dataAux.setData("iskey", "false"); 1008 dataAux.setData("isvisible", "true"); 1009 dataAux.setData("name", data.getData("name")); 1010 dataAux.setData("type", data.getData("type")); 1011 dataAux.setData("width", data.getData("width")); 1012 return dataAux; 1013 } 1014 1015 public Properties getColumnPosition(String _name) { 1016 SQLReturnObject[] vAux = getHeaders(); 1017 Properties _prop = new Properties (); 1018 for (int i = 0;i<vAux.length;i++) { 1019 if (vAux[i].getData("columnname").equalsIgnoreCase(_name) || (getTableName() + "." + vAux[i].getData("columnname")).equalsIgnoreCase(_name)) { 1020 _prop.setProperty("AD_Reference_ID", vAux[i].getData("adReferenceId")); 1021 _prop.setProperty("Position", Integer.toString(i)); 1022 return _prop; 1023 } 1024 } 1025 return null; 1026 } 1027 1028 public String getSelectFieldAlias(String _data) { 1029 if (this.select == null) return ""; 1030 for (int i=0;i<this.select.size();i++) { 1031 QueryFieldStructure p = this.select.elementAt(i); 1032 if (p.getField().equalsIgnoreCase(_data)) return p.getAlias(); 1033 else if (p.getAlias().equalsIgnoreCase(_data)) return p.getAlias(); 1034 else if ((getTableName() + "." + p.getAlias()).equalsIgnoreCase(_data.trim())) return p.getAlias(); 1035 } 1036 return ""; 1037 } 1038 1039 public void setOrderBy(Vector <String > _fields, Vector <String > _params) { 1040 this.orderBy = new Vector <QueryFieldStructure>(); 1041 this.paramOrderBy = new Vector <QueryParameterStructure>(); 1042 if (_fields==null || _fields.size()==0) { 1043 if (this.internalOrderBy!=null) { 1044 for (int i=0;i<this.internalOrderBy.size();i++) { 1045 QueryFieldStructure aux = this.internalOrderBy.elementAt(i); 1046 addOrderByField(getRealOrderByColumn(aux.getField())); 1047 } 1048 if (this.paramInternalOrderBy!=null) { 1049 for (int i=0;i<this.paramInternalOrderBy.size();i++) { 1050 QueryParameterStructure aux = this.paramInternalOrderBy.elementAt(i); 1051 addOrderByParameter(aux.getName(), aux.getField()); 1052 } 1053 } 1054 } 1055 } else { 1056 for (int i=0;i<_fields.size();i++) { 1057 String strOrderByClause = _fields.elementAt(i); 1058 Vector <String > vecOrdersAux = getOrdeByIntoFields(strOrderByClause); 1059 if (vecOrdersAux!=null && vecOrdersAux.size()>0) { 1060 for (int j=0;j<vecOrdersAux.size();j++) addOrderByField(getRealOrderByColumn(vecOrdersAux.elementAt(j))); 1061 } else addOrderByField(getRealOrderByColumn(strOrderByClause)); 1062 } 1063 if (_params!=null) 1064 for (int i=0;i<_params.size();i++) addOrderByParameter(_params.elementAt(i), _params.elementAt(i)); 1065 } 1066 } 1067 1068 public void setFilter(Vector <String > _fields, Vector <String > _params) { 1069 this.filter = new Vector <QueryFieldStructure>(); 1070 this.paramFilter = new Vector <QueryParameterStructure>(); 1071 if (_fields==null || _fields.size()==0) { 1072 if (this.internalFilter!=null) { 1073 for (int i=0;i<this.internalFilter.size();i++) { 1074 QueryFieldStructure aux = this.internalFilter.elementAt(i); 1075 addFilterField(aux.getField(), aux.getType()); 1076 } 1077 if (this.paramInternalFilter!=null) { 1078 for (int i=0;i<this.paramInternalFilter.size();i++) { 1079 QueryParameterStructure aux = this.paramInternalFilter.elementAt(i); 1080 addFilterParameter(aux.getName(), aux.getField(), aux.getType()); 1081 } 1082 } 1083 } 1084 } else { 1085 for (int i=0;i<_fields.size();i++) addFilterField(_fields.elementAt(i), "FILTER"); 1086 if (_params!=null) 1087 for (int i=0;i<_params.size();i++) addFilterParameter(_params.elementAt(i), _params.elementAt(i), "FILTER"); 1088 } 1089 } 1090 1091 public String getSQL() { 1092 return getSQL(null, null, null, null, null); 1093 } 1094 1095 public String getSQL(Vector <String > _FilterFields, Vector <String > _FilterParams, Vector <String > _OrderFields, Vector <String > _OrderParams, String selectFields) { 1096 StringBuffer text = new StringBuffer (); 1097 boolean hasWhere = false; 1098 Vector <QueryFieldStructure> aux = null; 1099 if (selectFields==null || selectFields.equals("")) { 1100 aux = getSelectFields(); 1101 if (aux!=null) { 1102 text.append("SELECT "); 1103 for (int i=0;i<aux.size();i++) { 1104 QueryFieldStructure auxStructure = aux.elementAt(i); 1105 if (i>0) text.append(", "); 1106 text.append(auxStructure.toString(true)).append(" "); 1107 } 1108 text.append(" \n"); 1109 } 1110 } else { 1111 text.append("SELECT ").append(selectFields).append("\n"); 1112 } 1113 1114 aux = getFromFields(); 1115 if (aux!=null) { 1116 StringBuffer txtAux = new StringBuffer (); 1117 text.append("FROM "); 1118 for (int i=0;i<aux.size();i++) { 1119 QueryFieldStructure auxStructure = aux.elementAt(i); 1120 if (!txtAux.toString().equals("")) txtAux.append("left join "); 1121 txtAux.append(auxStructure.toString()).append(" \n"); 1122 } 1123 text.append(txtAux.toString()); 1124 } 1125 1126 aux = getWhereFields(); 1127 StringBuffer txtAuxWhere = new StringBuffer (); 1128 if (aux!=null) { 1129 for (int i=0;i<aux.size();i++) { 1130 QueryFieldStructure auxStructure = aux.elementAt(i); 1131 hasWhere=true; 1132 if (!txtAuxWhere.toString().equals("")) txtAuxWhere.append("AND "); 1133 txtAuxWhere.append(auxStructure.toString()).append(" \n"); 1134 } 1135 } 1136 setFilter(_FilterFields, _FilterParams); 1137 aux = getFilterFields(); 1138 if (aux!=null) { 1139 for (int i=0;i<aux.size();i++) { 1140 QueryFieldStructure auxStructure = aux.elementAt(i); 1141 hasWhere=true; 1142 if (!txtAuxWhere.toString().equals("")) txtAuxWhere.append("AND "); 1143 txtAuxWhere.append(auxStructure.toString()).append(" \n"); 1144 } 1145 } 1146 if (hasWhere) text.append("WHERE ").append(txtAuxWhere.toString()); 1147 setOrderBy(_OrderFields, _OrderParams); 1148 aux = getOrderByFields(); 1149 if (aux!=null) { 1150 StringBuffer txtAux = new StringBuffer (); 1151 text.append("ORDER BY "); 1152 for (int i=0;i<aux.size();i++) { 1153 QueryFieldStructure auxStructure = aux.elementAt(i); 1154 if (!txtAux.toString().equals("")) txtAux.append(", "); 1155 txtAux.append(auxStructure.toString()); 1156 } 1157 if (!txtAux.toString().equals("")) txtAux.append(", "); 1158 txtAux.append(getTableName()).append(".").append(getKeyColumn()); 1159 text.append(txtAux.toString()); 1160 } 1161 return text.toString(); 1162 } 1163 1164 public String getTotalSQL() { 1165 StringBuffer text = new StringBuffer (); 1166 Vector <QueryFieldStructure> aux = null; 1167 boolean hasWhere = false; 1168 text.append("SELECT COUNT(*) AS TOTAL "); 1169 1170 aux = getFromFields(); 1171 if (aux!=null) { 1172 StringBuffer txtAux = new StringBuffer (); 1173 text.append("FROM "); 1174 for (int i=0;i<aux.size();i++) { 1175 QueryFieldStructure auxStructure = aux.elementAt(i); 1176 if (!txtAux.toString().equals("")) txtAux.append("left join "); 1177 txtAux.append(auxStructure.toString()).append(" \n"); 1178 } 1179 text.append(txtAux.toString()); 1180 } 1181 1182 aux = getWhereFields(); 1183 StringBuffer txtAuxWhere = new StringBuffer (); 1184 if (aux!=null) { 1185 for (int i=0;i<aux.size();i++) { 1186 QueryFieldStructure auxStructure = aux.elementAt(i); 1187 hasWhere=true; 1188 if (!txtAuxWhere.toString().equals("")) txtAuxWhere.append("AND "); 1189 txtAuxWhere.append(auxStructure.toString()).append(" \n"); 1190 } 1191 } 1192 aux = getFilterFields(); 1193 if (aux!=null) { 1194 for (int i=0;i<aux.size();i++) { 1195 QueryFieldStructure auxStructure = aux.elementAt(i); 1196 hasWhere=true; 1197 if (!txtAuxWhere.toString().equals("")) txtAuxWhere.append("AND "); 1198 txtAuxWhere.append(auxStructure.toString()).append(" \n"); 1199 } 1200 } 1201 if (hasWhere) text.append("WHERE ").append(txtAuxWhere.toString()); 1202 1203 return text.toString(); 1204 } 1205} 1206 | Popular Tags |