001 package com.mockrunner.mock.jdbc;
002
003 import java.sql.SQLException;
004 import java.sql.Struct;
005 import java.util.ArrayList;
006 import java.util.List;
007 import java.util.Map;
008
009 /**
010 * Mock implementation of <code>Struct</code>.
011 */
012 public class MockStruct implements Struct, Cloneable
013 {
014 private String sqlTypeName;
015 private List attributes;
016
017 public MockStruct(String sqlTypeName)
018 {
019 this.sqlTypeName = sqlTypeName;
020 attributes = new ArrayList();
021 }
022
023 public String getSQLTypeName() throws SQLException
024 {
025 return sqlTypeName;
026 }
027
028 public void setSQLTypeName(String sqlTypeName)
029 {
030 this.sqlTypeName = sqlTypeName;
031 }
032
033 public Object[] getAttributes() throws SQLException
034 {
035 return attributes.toArray();
036 }
037
038 public Object[] getAttributes(Map map) throws SQLException
039 {
040 return getAttributes();
041 }
042
043 public void addAttribute(Object attribute)
044 {
045 attributes.add(attribute);
046 }
047
048 public void addAttributes(Object[] attributes)
049 {
050 for(int ii = 0; ii < attributes.length; ii++)
051 {
052 addAttribute(attributes[ii]);
053 }
054 }
055
056 public void addAttributes(List attributes)
057 {
058 addAttributes(attributes.toArray());
059 }
060
061 public void clearAttributes()
062 {
063 attributes.clear();
064 }
065
066 public boolean equals(Object obj)
067 {
068 if(null == obj) return false;
069 if(!obj.getClass().equals(this.getClass())) return false;
070 MockStruct other = (MockStruct)obj;
071 if(null != sqlTypeName && !sqlTypeName.equals(other.sqlTypeName)) return false;
072 if(null != other.sqlTypeName && !other.sqlTypeName.equals(sqlTypeName)) return false;
073 if(null == attributes && null == other.attributes) return true;
074 if(null == attributes || null == other.attributes) return false;
075 return attributes.equals(other.attributes);
076 }
077
078 public int hashCode()
079 {
080 int hashCode = 0;
081 if(null != sqlTypeName) hashCode += 31 * sqlTypeName.hashCode();
082 if(null != attributes) hashCode += 31 * attributes.hashCode();
083 return hashCode;
084 }
085
086 public String toString()
087 {
088 StringBuffer buffer = new StringBuffer("Struct data:\n");
089 buffer.append("SQLTypeName: " + sqlTypeName + "\n");
090 for(int ii = 0; ii < attributes.size(); ii++)
091 {
092 buffer.append("Attribute " + ii + ": " + attributes.get(ii)+ "\n");
093 }
094 buffer.append("\n");
095 return buffer.toString();
096 }
097
098 public Object clone()
099 {
100 MockStruct struct = new MockStruct(sqlTypeName);
101 struct.addAttributes(attributes.toArray());
102 return struct;
103 }
104 }