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 import com.mockrunner.base.NestedApplicationException;
010
011 /**
012 * Mock implementation of <code>Struct</code>.
013 */
014 public class MockStruct implements Struct, Cloneable
015 {
016 private String sqlTypeName;
017 private List attributes;
018
019 public MockStruct(Object[] attributes)
020 {
021 this(null, attributes);
022 }
023
024 public MockStruct(String sqlTypeName, Object[] attributes)
025 {
026 this.sqlTypeName = sqlTypeName;
027 this.attributes = new ArrayList();
028 addAttributes(attributes);
029 }
030
031 public MockStruct(String sqlTypeName)
032 {
033 this(sqlTypeName, new Object[0]);
034 }
035
036 public String getSQLTypeName() throws SQLException
037 {
038 return sqlTypeName;
039 }
040
041 public void setSQLTypeName(String sqlTypeName)
042 {
043 this.sqlTypeName = sqlTypeName;
044 }
045
046 public Object[] getAttributes() throws SQLException
047 {
048 return attributes.toArray();
049 }
050
051 public Object[] getAttributes(Map map) throws SQLException
052 {
053 return getAttributes();
054 }
055
056 public void addAttribute(Object attribute)
057 {
058 attributes.add(attribute);
059 }
060
061 public void addAttributes(Object[] attributes)
062 {
063 for(int ii = 0; ii < attributes.length; ii++)
064 {
065 addAttribute(attributes[ii]);
066 }
067 }
068
069 public void addAttributes(List attributes)
070 {
071 addAttributes(attributes.toArray());
072 }
073
074 public void clearAttributes()
075 {
076 attributes.clear();
077 }
078
079 public boolean equals(Object obj)
080 {
081 if(null == obj) return false;
082 if(!obj.getClass().equals(this.getClass())) return false;
083 MockStruct other = (MockStruct)obj;
084 if(null != sqlTypeName && !sqlTypeName.equals(other.sqlTypeName)) return false;
085 if(null != other.sqlTypeName && !other.sqlTypeName.equals(sqlTypeName)) return false;
086 if(null == attributes && null == other.attributes) return true;
087 if(null == attributes || null == other.attributes) return false;
088 return attributes.equals(other.attributes);
089 }
090
091 public int hashCode()
092 {
093 int hashCode = 17;
094 if(null != sqlTypeName) hashCode = (31 * hashCode) + sqlTypeName.hashCode();
095 if(null != attributes) hashCode = (31 * hashCode) + attributes.hashCode();
096 return hashCode;
097 }
098
099 public String toString()
100 {
101 return "Struct data: " + attributes.toString();
102 }
103
104 public Object clone()
105 {
106 try
107 {
108 MockStruct copy = (MockStruct)super.clone();
109 copy.attributes = new ArrayList();
110 copy.addAttributes(attributes.toArray());
111 return copy;
112 }
113 catch(CloneNotSupportedException exc)
114 {
115 throw new NestedApplicationException(exc);
116 }
117 }
118 }