1 // $Id: RecordImpl.java,v 1.5 2008/09/26 21:17:43 haschart Exp $
\r
3 * Copyright (C) 2004 Bas Peters
\r
5 * This file is part of MARC4J
\r
7 * MARC4J is free software; you can redistribute it and/or
\r
8 * modify it under the terms of the GNU Lesser General Public
\r
9 * License as published by the Free Software Foundation; either
\r
10 * version 2.1 of the License, or (at your option) any later version.
\r
12 * MARC4J is distributed in the hope that it will be useful,
\r
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
15 * Lesser General Public License for more details.
\r
17 * You should have received a copy of the GNU Lesser General Public
\r
18 * License along with MARC4J; if not, write to the Free Software
\r
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
21 package org.marc4j.marc.impl;
\r
23 import java.util.ArrayList;
\r
24 import java.util.Collections;
\r
25 import java.util.Iterator;
\r
26 import java.util.List;
\r
28 import org.marc4j.marc.ControlField;
\r
29 import org.marc4j.marc.IllegalAddException;
\r
30 import org.marc4j.marc.Leader;
\r
31 import org.marc4j.marc.Record;
\r
32 import org.marc4j.marc.VariableField;
\r
35 * Represents a MARC record.
\r
37 * @author Bas Peters
\r
38 * @version $Revision: 1.5 $
\r
40 public class RecordImpl implements Record {
\r
44 private Leader leader;
\r
46 private List controlFields;
\r
48 private List dataFields;
\r
50 private String type;
\r
53 * Creates a new <code>Record</code>.
\r
55 public RecordImpl() {
\r
56 controlFields = new ArrayList();
\r
57 dataFields = new ArrayList();
\r
60 public void setType(String type) {
\r
64 public String getType() {
\r
68 public void setLeader(Leader leader) {
\r
69 this.leader = leader;
\r
72 public Leader getLeader() {
\r
77 * Adds a <code>VariableField</code> being a <code>ControlField</code>
\r
78 * or <code>DataField</code>.
\r
80 * If the <code>VariableField</code> is a control number field (001) and
\r
81 * the record already has a control number field, the field is replaced with
\r
85 * the <code>VariableField</code>
\r
86 * @throws IllegalAddException
\r
87 * when the parameter is not a <code>VariableField</code>
\r
90 public void addVariableField(VariableField field) {
\r
91 if (!(field instanceof VariableField))
\r
92 throw new IllegalAddException("Expected VariableField instance");
\r
94 String tag = field.getTag();
\r
95 if (Verifier.isControlNumberField(tag)) {
\r
96 if (Verifier.hasControlNumberField(controlFields))
\r
97 controlFields.set(0, field);
\r
99 controlFields.add(0, field);
\r
100 Collections.sort(controlFields);
\r
101 } else if (Verifier.isControlField(tag)) {
\r
102 controlFields.add(field);
\r
103 Collections.sort(controlFields);
\r
105 dataFields.add(field);
\r
106 Collections.sort(dataFields);
\r
111 public void removeVariableField(VariableField field) {
\r
112 String tag = field.getTag();
\r
113 if (Verifier.isControlField(tag))
\r
114 controlFields.remove(field);
\r
116 dataFields.remove(field);
\r
120 * Returns the control number field or <code>null</code> if no control
\r
121 * number field is available.
\r
123 * @return ControlField - the control number field
\r
125 public ControlField getControlNumberField() {
\r
126 if (Verifier.hasControlNumberField(controlFields))
\r
127 return (ControlField) controlFields.get(0);
\r
132 public List getControlFields() {
\r
133 return controlFields;
\r
136 public List getDataFields() {
\r
140 public VariableField getVariableField(String tag) {
\r
142 if (Verifier.isControlField(tag))
\r
143 i = controlFields.iterator();
\r
145 i = dataFields.iterator();
\r
146 while (i.hasNext()) {
\r
147 VariableField field = (VariableField) i.next();
\r
148 if (field.getTag().equals(tag))
\r
154 public List getVariableFields(String tag) {
\r
155 List fields = new ArrayList();
\r
157 if (Verifier.isControlField(tag))
\r
158 i = controlFields.iterator();
\r
160 i = dataFields.iterator();
\r
161 while (i.hasNext()) {
\r
162 VariableField field = (VariableField) i.next();
\r
163 if (field.getTag().equals(tag))
\r
169 public List getVariableFields() {
\r
170 List fields = new ArrayList();
\r
172 i = controlFields.iterator();
\r
173 while (i.hasNext())
\r
174 fields.add(i.next());
\r
175 i = dataFields.iterator();
\r
176 while (i.hasNext())
\r
177 fields.add(i.next());
\r
181 public String getControlNumber() {
\r
182 ControlField f = getControlNumberField();
\r
183 String result = (f == null || f.getData() == null) ? null : new String(f.getData());
\r
187 public List getVariableFields(String[] tags) {
\r
188 List list = new ArrayList();
\r
189 for (int i = 0; i < tags.length; i++) {
\r
190 String tag = tags[i];
\r
191 List fields = getVariableFields(tag);
\r
192 if (fields.size() > 0)
\r
193 list.addAll(fields);
\r
199 * Returns a string representation of this record.
\r
206 * LEADER 00714cam a2200205 a 4500
\r
208 * 005 20030616111422.0
\r
209 * 008 020805s2002 nyu j 000 1 eng
\r
210 * 020 $a0786808772
\r
211 * 020 $a0786816155 (pbk.)
\r
212 * 040 $aDLC$cDLC$dDLC
\r
213 * 100 1 $aChabon, Michael.
\r
214 * 245 10$aSummerland /$cMichael Chabon.
\r
216 * 260 $aNew York :$bMiramax Books/Hyperion Books for Children,$cc2002.
\r
217 * 300 $a500 p. ;$c22 cm.
\r
219 * 650 1$aBaseball$vFiction.
\r
220 * 650 1$aMagic$vFiction.
\r
224 * @return String - a string representation of this record
\r
226 public String toString() {
\r
227 StringBuffer sb = new StringBuffer();
\r
228 sb.append("LEADER ");
\r
229 sb.append(getLeader().toString());
\r
231 Iterator i = getVariableFields().iterator();
\r
232 while (i.hasNext()) {
\r
233 VariableField field = (VariableField) i.next();
\r
234 sb.append(field.toString());
\r
237 return sb.toString();
\r
240 public List find(String pattern) {
\r
241 List result = new ArrayList();
\r
242 Iterator i = controlFields.iterator();
\r
243 while (i.hasNext()) {
\r
244 VariableField field = (VariableField) i.next();
\r
245 if (field.find(pattern))
\r
248 i = dataFields.iterator();
\r
249 while (i.hasNext()) {
\r
250 VariableField field = (VariableField) i.next();
\r
251 if (field.find(pattern))
\r
257 public List find(String tag, String pattern) {
\r
258 List result = new ArrayList();
\r
259 Iterator i = getVariableFields(tag).iterator();
\r
260 while (i.hasNext()) {
\r
261 VariableField field = (VariableField) i.next();
\r
262 if (field.find(pattern))
\r
268 public List find(String[] tag, String pattern) {
\r
269 List result = new ArrayList();
\r
270 Iterator i = getVariableFields(tag).iterator();
\r
271 while (i.hasNext()) {
\r
272 VariableField field = (VariableField) i.next();
\r
273 if (field.find(pattern))
\r
279 public void setId(Long id) {
\r
283 public Long getId() {
\r