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 Or implements StatementFragment, Serializable {
012            
013            private List fragments = new ArrayList();
014    
015            public Or(List fragments) {
016                    this.fragments.addAll(fragments);
017            }
018    
019            public Or(StatementFragment[] fragments) {
020                    this.fragments.addAll(Arrays.asList(fragments));
021            }
022            
023            public Or() {
024                    // Empty OR.
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                            ret.append(((StatementFragment) it.next()).toSqlString());
045                            if (it.hasNext()) {
046                                    ret.append(" OR ");
047                            }
048                            
049                    }
050                    
051                    return ret.toString();
052            }
053    
054            public int hashCode() {
055                    final int prime = 31;
056                    int result = 1;
057                    result = prime * result
058                                    + ((fragments == null) ? 0 : fragments.hashCode());
059                    return result;
060            }
061    
062            public boolean equals(Object obj) {
063                    if (this == obj)
064                            return true;
065                    if (obj == null)
066                            return false;
067                    if (getClass() != obj.getClass())
068                            return false;
069                    final Or other = (Or) obj;
070                    if (fragments == null) {
071                            if (other.fragments != null)
072                                    return false;
073                    } else if (!fragments.equals(other.fragments))
074                            return false;
075                    return true;
076            }
077    }