001 package com.mockrunner.mock.connector.cci;
002
003 import java.util.ArrayList;
004 import java.util.List;
005
006 import javax.resource.ResourceException;
007 import javax.resource.cci.IndexedRecord;
008 import javax.resource.cci.MappedRecord;
009 import javax.resource.cci.Record;
010 import javax.resource.cci.RecordFactory;
011
012 /**
013 * Mock implementation of <code>RecordFactory</code>.
014 */
015 public class MockRecordFactory implements RecordFactory
016 {
017 private List indexedRecords;
018 private List mappedRecords;
019
020 public MockRecordFactory()
021 {
022 indexedRecords = new ArrayList();
023 mappedRecords = new ArrayList();
024 }
025
026 /**
027 * Resets the list of created indexed records.
028 */
029 public void resetIndexedRecords()
030 {
031 indexedRecords.clear();
032 }
033
034 /**
035 * Resets the list of created mapped records.
036 */
037 public void resetMappedRecords()
038 {
039 mappedRecords.clear();
040 }
041
042 /**
043 * Returns the number of created indexed records.
044 * @return the number of created indexed records
045 */
046 public int getNumberCreatedIndexedRecords()
047 {
048 return indexedRecords.size();
049 }
050
051 /**
052 * Returns the number of created mapped records.
053 * @return the number of created mapped records
054 */
055 public int getNumberCreatedMappedRecords()
056 {
057 return mappedRecords.size();
058 }
059
060 /**
061 * Returns a list of all created indexed records.
062 * @return the <code>List</code> of all created indexed records
063 */
064 public List getCreatedIndexedRecords()
065 {
066 return getCreatedRecords(null, false, indexedRecords);
067 }
068
069 /**
070 * Returns a list of created indexed records that match the specified name.
071 * @param recordName the name of the record
072 * @return the <code>List</code> of matching indexed records
073 */
074 public List getCreatedIndexedRecords(String recordName)
075 {
076 return getCreatedRecords(recordName, true, indexedRecords);
077 }
078
079 /**
080 * Returns a list of all created mapped records.
081 * @return the <code>List</code> of all created mapped records
082 */
083 public List getCreatedMappedRecords()
084 {
085 return getCreatedRecords(null, false, mappedRecords);
086 }
087
088 /**
089 * Returns a list of created mapped records that match the specified name.
090 * @param recordName the name of the record
091 * @return the <code>List</code> of matching mapped records
092 */
093 public List getCreatedMappedRecords(String recordName)
094 {
095 return getCreatedRecords(recordName, true, mappedRecords);
096 }
097
098 private List getCreatedRecords(String recordName, boolean recognizeRecordName, List recordWrapperList)
099 {
100 List result = new ArrayList();
101 for(int ii = 0; ii < recordWrapperList.size(); ii++)
102 {
103 RecordWrapper currentWrapper = (RecordWrapper)recordWrapperList.get(ii);
104 if(!recognizeRecordName)
105 {
106 result.add(currentWrapper.getRecord());
107 }
108 else
109 {
110 addRecordIfMatching(recordName, result, currentWrapper);
111 }
112 }
113 return result;
114 }
115
116 private void addRecordIfMatching(String recordName, List result, RecordWrapper currentWrapper)
117 {
118 if(null == recordName)
119 {
120 if(null == currentWrapper.getRecordName())
121 {
122 result.add(currentWrapper.getRecord());
123 }
124 }
125 else
126 {
127 if(recordName.equals(currentWrapper.getRecordName()))
128 {
129 result.add(currentWrapper.getRecord());
130 }
131 }
132 }
133
134 public IndexedRecord createIndexedRecord(String recordName) throws ResourceException
135 {
136 MockIndexedRecord record = new MockIndexedRecord(recordName);
137 indexedRecords.add(new RecordWrapper(recordName, record));
138 return record;
139 }
140
141 public MappedRecord createMappedRecord(String recordName) throws ResourceException
142 {
143 MockMappedRecord record = new MockMappedRecord(recordName);
144 mappedRecords.add(new RecordWrapper(recordName, record));
145 return record;
146 }
147
148 private class RecordWrapper
149 {
150 private String recordName;
151 private Record record;
152
153 public RecordWrapper(String recordName, Record record)
154 {
155 this.recordName = recordName;
156 this.record = record;
157 }
158
159 public String getRecordName()
160 {
161 return recordName;
162 }
163
164 public Record getRecord()
165 {
166 return record;
167 }
168 }
169 }