/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.utils.sql; // Common import net.codjo.model.Table; //Penelope import net.codjo.utils.SqlTypeConverter; import java.sql.Types; //Java import java.util.ArrayList; /** * Cette classe g�re 6 listes en parall�le de la sqlList de la classe SqlRequetor. Pour * un index donn�, l'ensemble des �l�ments de ces listes correspond � la ligne de m�me * index de la sqlList. * * @author $Author: spinae $ * @version $Revision: 1.2 $ */ class SqlRequetorRequest { // Constantes static final int EQUAL = 0; static final int SUP = 1; static final int SUP_EQUAL = 2; static final int INF = 3; static final int INF_EQUAL = 4; static final int DIFFERENT = 5; static final int BEGIN_BY = 6; static final int END_BY = 7; static final int CONTAIN = 8; static final int NOT_CONTAIN = 9; static final int IS_NULL = 10; static final int IS_NOT_NULL = 11; //L'op�rateur logique (and ou or) private ArrayList logicalOper = new ArrayList(); //L'objet table private ArrayList table = new ArrayList(); //Le nom physique du champ de la table courante private ArrayList field = new ArrayList(); //L'op�rateur de comparaison (=, like, ...) private ArrayList compareOper = new ArrayList(); //Le pr�fixe de la valeur du champ(', '%, ...) private ArrayList prefixValue = new ArrayList(); //La valeur du champ private ArrayList value = new ArrayList(); //Le suffixe de la valeur du champ(', %', ...) private ArrayList suffixValue = new ArrayList(); /** * Constructor for the SqlRequetorRequest object */ public SqlRequetorRequest() {} /** * Constructor par copie * * @param req Description of Parameter */ public SqlRequetorRequest(SqlRequetorRequest req) { logicalOper = new ArrayList(req.logicalOper); table = new ArrayList(req.table); field = new ArrayList(req.field); compareOper = new ArrayList(req.compareOper); prefixValue = new ArrayList(req.prefixValue); value = new ArrayList(req.value); suffixValue = new ArrayList(req.suffixValue); } /** * Met � jour l'op�rateur logique � l'index donn�. * * @param newLogicalOper La valeur de l'op�rateur * @param idx L'index */ public void setLogicalOper(String newLogicalOper, int idx) { logicalOper.set(idx, newLogicalOper); } /** * Met � jour le nom physique du champ � l'index donn�. * * @param newField Le nom du champ * @param idx L'index */ public void setField(String newField, int idx) { field.set(idx, newField); } /** * Met � jour l'op�rateur de comparaison � l'index donn�. * * @param newCompareOper La valeur de l'op�rateur * @param idx L'index */ public void setCompareOper(int newCompareOper, int idx) { compareOper.set(idx, new Integer(newCompareOper)); } /** * Met � jour le pr�fixe de la valeur du champ � l'index donn�. * * @param newPrefixValue La valeur du pr�fixe * @param idx L'index */ public void setPrefixValue(String newPrefixValue, int idx) { prefixValue.set(idx, newPrefixValue); } /** * Met � jour la valeur du champ � l'index donn�. * * @param newValue La valeur du champ * @param idx L'index */ public void setValue(String newValue, int idx) { value.set(idx, addQuote(newValue)); } /** * Met � jour le suffixe de la valeur du champ � l'index donn�. * * @param newSuffixValue La valeur du suffixe * @param idx L'index */ public void setSuffixValue(String newSuffixValue, int idx) { suffixValue.set(idx, newSuffixValue); } /** * Retourne l'op�rateur logique � l'index donn�. * * @param idx L'index * * @return L'op�rateur */ public String getLogicalOper(int idx) { return (String)logicalOper.get(idx); } /** * Retourne le nom physique du champ � l'index donn�. * * @param idx L'index * * @return Le nom du champ */ public String getField(int idx) { return (String)field.get(idx); } /** * Retourne la taille des listes de la requ�te. * * @return La taille des listes. */ public int getRequestListSize() { return field.size(); } /** * Retourne l'op�rateur de comparaison � l'index donn�. * * @param idx L'index * * @return L'op�rateur */ public int getCompareOperValue(int idx) { return ((Integer)compareOper.get(idx)).intValue(); } /** * Retourne l'op�rateur de comparaison � l'index donn�. * * @param idx L'index * * @return L'op�rateur */ public String getCompareOperTraducValue(int idx) { int oper = getCompareOperValue(idx); if (oper != -1) { return traductOperator(oper); } else { return ""; } } /** * Retourne le pr�fixe de la valeur du champ � l'index donn�. * * @param idx L'index * * @return Le pr�fixe */ public String getPrefixValue(int idx) { return (String)prefixValue.get(idx); } /** * Retourne la valeur du champ � l'index donn�. * * @param idx L'index * * @return La valeur du champ */ public String getValue(int idx) { return (String)value.get(idx); } /** * Retourne le suffixe de la valeur du champ � l'index donn�. * * @param idx L'index * * @return Le suffixe */ public String getSuffixValue(int idx) { return (String)suffixValue.get(idx); } /** * Retourne l'ensemble des �l�ments des listes � l'index donn�. * * @param idx L'index * * @return Les �l�ments des listes */ public String getRequest(int idx) { StringBuffer str = new StringBuffer(); if (logicalOper.size() != 0 && logicalOper.size() > idx) { str.append(getLogicalOper(idx)); } if (table.size() != 0 && table.size() > idx) { if (getTable(idx) != null) { str.append(getTable(idx).getDBTableName() + "."); } } if (field.size() != 0 && field.size() > idx) { str.append(getField(idx)); } if (compareOper.size() != 0 && compareOper.size() > idx) { str.append(getCompareOperTraducValue(idx)); } if (prefixValue.size() != 0 && prefixValue.size() > idx) { str.append(getPrefixValue(idx)); } if (value.size() != 0 && value.size() > idx) { str.append(getValue(idx)); } if (suffixValue.size() != 0 && suffixValue.size() > idx) { str.append(getSuffixValue(idx)); } return str.toString(); } /** * Overview. * * <p> * Description * </p> * * @param idx Description of Parameter */ public void removeElements(int idx) { logicalOper.remove(idx); field.remove(idx); compareOper.remove(idx); prefixValue.remove(idx); value.remove(idx); suffixValue.remove(idx); table.remove(idx); } /** * Ajoute un �l�ment vide � chacune des listes pour l'index donn�. * * @param idx L'index */ public void addElements(int idx) { logicalOper.add(idx, ""); field.add(idx, ""); compareOper.add(idx, new Integer(-1)); prefixValue.add(idx, ""); value.add(idx, ""); suffixValue.add(idx, ""); table.add(idx, null); } /** * Supprime tous les �l�ments des listes. */ public void removeAllElements() { for (int i = 0; i < value.size(); i++) { removeElements(i); } } /** * Met � jour l'objet table � l'index donn�. * * @param newTable L'objet table * @param idx L'index */ void setTable(Table newTable, int idx) { table.set(idx, newTable); } /** * Retourne l'objet table � l'index donn� * * @param idx L'index * * @return L'objet table */ Table getTable(int idx) { return (Table)table.get(idx); } /** * Met � jour le pr�fixe et le suffixe d'une valeur pour l'index donn� en fonction de * l'op�rateur de comparaison et du type SQL du champ. * * @param oper L'op�rateur de comparaison. * @param idx L'index. * @param sqlType Le type SQL du champ. */ void updatePrefSuffValue(int oper, int idx, int sqlType) { if (oper == CONTAIN || oper == NOT_CONTAIN) { setPrefixValue("'%", idx); setSuffixValue("%'", idx); } else if (oper == BEGIN_BY) { setPrefixValue("'", idx); setSuffixValue("%'", idx); } else if (oper == END_BY) { setPrefixValue("'%", idx); setSuffixValue("'", idx); } else if (sqlType == Types.BIT || SqlTypeConverter.isNumeric(sqlType) || oper == IS_NULL || oper == IS_NOT_NULL) { setPrefixValue("", idx); setSuffixValue("", idx); } else { setPrefixValue("'", idx); setSuffixValue("'", idx); } } /** * Adds a feature to the Quote attribute of the SqlRequetorRequest object * * @param value The feature to be added to the Quote attribute * * @return Description of the Returned Value */ private String addQuote(String value) { StringBuffer tmp = new StringBuffer(value); char quote = '\''; int index = 0; while (index < tmp.length()) { if (tmp.charAt(index) == quote) { tmp.insert(index, quote); index++; } index++; } return tmp.toString(); } /** * Traduit les op�rateurs de comparaison en "langage Sybase". * * @param oper L'op�rateur s�lection� dans la liste. * * @return La valeur traduite. * * @throws IllegalArgumentException TODO */ private String traductOperator(int oper) { String strOper; switch (oper) { case EQUAL: strOper = " = "; break; case SUP: strOper = " > "; break; case SUP_EQUAL: strOper = " >= "; break; case INF: strOper = " < "; break; case INF_EQUAL: strOper = " <= "; break; case DIFFERENT: strOper = " <> "; break; case BEGIN_BY: strOper = " like "; break; case END_BY: strOper = " like "; break; case CONTAIN: strOper = " like "; break; case NOT_CONTAIN: strOper = " not like "; break; case IS_NULL: strOper = " is null "; break; case IS_NOT_NULL: strOper = " is not null "; break; default: throw new IllegalArgumentException("Operateur inconnu"); } return strOper; } }