001 package biz.hammurapi.sql.syntax; 002 003 import java.io.Serializable; 004 import java.sql.PreparedStatement; 005 import java.sql.SQLException; 006 import java.util.ArrayList; 007 import java.util.Arrays; 008 import java.util.Iterator; 009 import java.util.List; 010 011 public class And implements StatementFragment, Serializable { 012 013 private List fragments = new ArrayList(); 014 015 public And(List fragments) { 016 this.fragments.addAll(fragments); 017 } 018 019 public And(StatementFragment[] fragments) { 020 this.fragments.addAll(Arrays.asList(fragments)); 021 } 022 023 public And() { 024 // Empty AND 025 } 026 027 public void add(StatementFragment fragment) { 028 fragments.add(fragment); 029 } 030 031 public int parameterize(PreparedStatement statement, int idx) throws SQLException { 032 Iterator it = fragments.iterator(); 033 while (it.hasNext()) { 034 idx = ((StatementFragment) it.next()).parameterize(statement, idx); 035 } 036 037 return idx; 038 } 039 040 public String toSqlString() { 041 StringBuffer ret = new StringBuffer(); 042 Iterator it = fragments.iterator(); 043 while (it.hasNext()) { 044 Object next = it.next(); 045 if (next instanceof Or) { 046 ret.append("("); 047 ret.append(((Or) next).toSqlString()); 048 ret.append(")"); 049 } else { 050 ret.append(((StatementFragment) next).toSqlString()); 051 } 052 053 if (it.hasNext()) { 054 ret.append(" AND "); 055 } 056 057 } 058 059 return ret.toString(); 060 } 061 062 public int hashCode() { 063 final int prime = 31; 064 int result = 1; 065 result = prime * result 066 + ((fragments == null) ? 0 : fragments.hashCode()); 067 return result; 068 } 069 070 public boolean equals(Object obj) { 071 if (this == obj) 072 return true; 073 if (obj == null) 074 return false; 075 if (getClass() != obj.getClass()) 076 return false; 077 final And other = (And) obj; 078 if (fragments == null) { 079 if (other.fragments != null) 080 return false; 081 } else if (!fragments.equals(other.fragments)) 082 return false; 083 return true; 084 } 085 }