001: /**********************************************************************************
002: * $URL: $
003: * $Id: $
004: ***********************************************************************************
005: *
006: * Copyright (c) 2003, 2004, 2005, 2006 The Sakai Foundation.
007: *
008: * Licensed under the Educational Community License, Version 1.0 (the "License");
009: * you may not use this file except in compliance with the License.
010: * You may obtain a copy of the License at
011: *
012: * http://www.opensource.org/licenses/ecl1.php
013: *
014: * Unless required by applicable law or agreed to in writing, software
015: * distributed under the License is distributed on an "AS IS" BASIS,
016: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: * See the License for the specific language governing permissions and
018: * limitations under the License.
019: *
020: **********************************************************************************/package org.sakaiproject.component.osid.repository.srw;
021:
022: /**
023: * @author Massachusetts Institute of Techbology, Sakai Software Development Team
024: * @version
025: */
026: public class AssetIterator implements org.osid.repository.AssetIterator {
027: private java.util.Vector vector = new java.util.Vector();
028: private int i = 0;
029:
030: protected AssetIterator(java.util.Vector vector)
031: throws org.osid.repository.RepositoryException {
032: this .vector = vector;
033: }
034:
035: public boolean hasNextAsset()
036: throws org.osid.repository.RepositoryException {
037: return (i < vector.size());
038: }
039:
040: public org.osid.repository.Asset nextAsset()
041: throws org.osid.repository.RepositoryException {
042: if (i >= vector.size()) {
043: throw new org.osid.repository.RepositoryException(
044: org.osid.shared.SharedException.NO_MORE_ITERATOR_ELEMENTS);
045: }
046: return (org.osid.repository.Asset) vector.elementAt(i++);
047: }
048:
049: protected AssetIterator(StringBuffer xml,
050: org.osid.logging.WritableLog log,
051: org.osid.shared.Id repositoryId)
052: throws org.osid.repository.RepositoryException {
053: try {
054: javax.xml.parsers.DocumentBuilderFactory dbf = null;
055: javax.xml.parsers.DocumentBuilder db = null;
056: org.w3c.dom.Document document = null;
057:
058: dbf = javax.xml.parsers.DocumentBuilderFactory
059: .newInstance();
060: db = dbf.newDocumentBuilder();
061: document = db.parse(new java.io.ByteArrayInputStream(xml
062: .toString().getBytes()));
063: org.osid.shared.Id recordStructureId = RecordStructure
064: .getInstance().getId();
065:
066: // for each DOC (maps 1-to-1 with Asset)
067: org.w3c.dom.NodeList docs = document
068: .getElementsByTagName("record");
069: int numDocs = docs.getLength();
070: for (int i = 0; i < numDocs; i++) {
071: org.w3c.dom.Element doc = (org.w3c.dom.Element) docs
072: .item(i);
073:
074: String assetTitle = null;
075: String assetDescription = "";
076: String assetId = null;
077: org.osid.repository.Asset asset = null;
078: org.osid.repository.Record record = null;
079:
080: org.w3c.dom.NodeList dcs = doc
081: .getElementsByTagName("dc:title");
082: int numDCs = dcs.getLength();
083: for (int k = 0; k < numDCs; k++) {
084: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
085: .item(k);
086: if (dc.hasChildNodes()) {
087: assetTitle = dc.getFirstChild().getNodeValue();
088: }
089: }
090: dcs = doc.getElementsByTagName("dc:description");
091: numDCs = dcs.getLength();
092: for (int k = 0; k < numDCs; k++) {
093: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
094: .item(k);
095: if (dc.hasChildNodes()) {
096: assetDescription = dc.getFirstChild()
097: .getNodeValue();
098: }
099: }
100: dcs = doc.getElementsByTagName("dc:identifier.uri");
101: numDCs = dcs.getLength();
102: for (int k = 0; k < numDCs; k++) {
103: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
104: .item(k);
105: if (dc.hasChildNodes()) {
106: assetId = dc.getFirstChild().getNodeValue();
107: }
108: }
109:
110: if ((assetTitle != null) && (assetId != null)) {
111: asset = new Asset(assetTitle, assetDescription,
112: assetId, log, repositoryId);
113: record = asset.createRecord(recordStructureId);
114: record.createPart(URLPartStructure.getInstance()
115: .getId(), assetId);
116: this .vector.addElement(asset);
117: }
118:
119: dcs = doc.getElementsByTagName("dc:creator");
120: numDCs = dcs.getLength();
121: for (int k = 0; k < numDCs; k++) {
122: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
123: .item(k);
124: if (dc.hasChildNodes()) {
125: if ((asset != null) && (record == null))
126: record = asset
127: .createRecord(recordStructureId);
128: if ((asset != null) && (record != null))
129: record.createPart(CreatorPartStructure
130: .getInstance().getId(), dc
131: .getFirstChild().getNodeValue());
132: }
133: }
134: dcs = doc.getElementsByTagName("dc:subject");
135: numDCs = dcs.getLength();
136: for (int k = 0; k < numDCs; k++) {
137: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
138: .item(k);
139: if (dc.hasChildNodes()) {
140: if ((asset != null) && (record == null))
141: record = asset
142: .createRecord(recordStructureId);
143: if ((asset != null) && (record != null))
144: record.createPart(SubjectPartStructure
145: .getInstance().getId(), dc
146: .getFirstChild().getNodeValue());
147: }
148: }
149: dcs = doc.getElementsByTagName("dc:publisher");
150: numDCs = dcs.getLength();
151: for (int k = 0; k < numDCs; k++) {
152: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
153: .item(k);
154: if (dc.hasChildNodes()) {
155: if ((asset != null) && (record == null))
156: record = asset
157: .createRecord(recordStructureId);
158: if ((asset != null) && (record != null))
159: record.createPart(PublisherPartStructure
160: .getInstance().getId(), dc
161: .getFirstChild().getNodeValue());
162: }
163: }
164: dcs = doc.getElementsByTagName("dc:contributor");
165: numDCs = dcs.getLength();
166: for (int k = 0; k < numDCs; k++) {
167: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
168: .item(k);
169: if (dc.hasChildNodes()) {
170: if ((asset != null) && (record == null))
171: record = asset
172: .createRecord(recordStructureId);
173: if ((asset != null) && (record != null))
174: record.createPart(ContributorPartStructure
175: .getInstance().getId(), dc
176: .getFirstChild().getNodeValue());
177: }
178: }
179: dcs = doc.getElementsByTagName("dc:date");
180: numDCs = dcs.getLength();
181: for (int k = 0; k < numDCs; k++) {
182: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
183: .item(k);
184: if (dc.hasChildNodes()) {
185: if ((asset != null) && (record == null))
186: record = asset
187: .createRecord(recordStructureId);
188: if ((asset != null) && (record != null))
189: record.createPart(DatePartStructure
190: .getInstance().getId(), dc
191: .getFirstChild().getNodeValue());
192: }
193: }
194: dcs = doc.getElementsByTagName("dc:type");
195: numDCs = dcs.getLength();
196: for (int k = 0; k < numDCs; k++) {
197: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
198: .item(k);
199: if (dc.hasChildNodes()) {
200: if ((asset != null) && (record == null))
201: record = asset
202: .createRecord(recordStructureId);
203: if ((asset != null) && (record != null))
204: record.createPart(TypePartStructure
205: .getInstance().getId(), dc
206: .getFirstChild().getNodeValue());
207: }
208: }
209: dcs = doc.getElementsByTagName("dc:format");
210: numDCs = dcs.getLength();
211: for (int k = 0; k < numDCs; k++) {
212: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
213: .item(k);
214: if (dc.hasChildNodes()) {
215: if ((asset != null) && (record == null))
216: record = asset
217: .createRecord(recordStructureId);
218: if ((asset != null) && (record != null))
219: record.createPart(FormatPartStructure
220: .getInstance().getId(), dc
221: .getFirstChild().getNodeValue());
222: }
223: }
224: dcs = doc.getElementsByTagName("dc:source");
225: numDCs = dcs.getLength();
226: for (int k = 0; k < numDCs; k++) {
227: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
228: .item(k);
229: if (dc.hasChildNodes()) {
230: if ((asset != null) && (record == null))
231: record = asset
232: .createRecord(recordStructureId);
233: if ((asset != null) && (record != null))
234: record.createPart(SourcePartStructure
235: .getInstance().getId(), dc
236: .getFirstChild().getNodeValue());
237: }
238: }
239: dcs = doc.getElementsByTagName("dc:language");
240: numDCs = dcs.getLength();
241: for (int k = 0; k < numDCs; k++) {
242: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
243: .item(k);
244: if (dc.hasChildNodes()) {
245: if ((asset != null) && (record == null))
246: record = asset
247: .createRecord(recordStructureId);
248: if ((asset != null) && (record != null))
249: record.createPart(LanguagePartStructure
250: .getInstance().getId(), dc
251: .getFirstChild().getNodeValue());
252: }
253: }
254: dcs = doc.getElementsByTagName("dc:relation");
255: numDCs = dcs.getLength();
256: for (int k = 0; k < numDCs; k++) {
257: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
258: .item(k);
259: if (dc.hasChildNodes()) {
260: if ((asset != null) && (record == null))
261: record = asset
262: .createRecord(recordStructureId);
263: if ((asset != null) && (record != null))
264: record.createPart(RelationPartStructure
265: .getInstance().getId(), dc
266: .getFirstChild().getNodeValue());
267: }
268: }
269: dcs = doc.getElementsByTagName("dc:coverage");
270: numDCs = dcs.getLength();
271: for (int k = 0; k < numDCs; k++) {
272: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
273: .item(k);
274: if (dc.hasChildNodes()) {
275: if ((asset != null) && (record == null))
276: record = asset
277: .createRecord(recordStructureId);
278: if ((asset != null) && (record != null))
279: record.createPart(CoveragePartStructure
280: .getInstance().getId(), dc
281: .getFirstChild().getNodeValue());
282: }
283: }
284: dcs = doc.getElementsByTagName("dc:rights");
285: numDCs = dcs.getLength();
286: for (int k = 0; k < numDCs; k++) {
287: org.w3c.dom.Element dc = (org.w3c.dom.Element) dcs
288: .item(k);
289: if (dc.hasChildNodes()) {
290: if ((asset != null) && (record == null))
291: asset.createRecord(recordStructureId);
292: if ((asset != null) && (record != null))
293: record.createPart(RightsPartStructure
294: .getInstance().getId(), dc
295: .getFirstChild().getNodeValue());
296: }
297: }
298: if ((xml.length() > 0) && (asset != null)) {
299: org.osid.repository.Record r = asset
300: .createRecord(DCRecordStructure
301: .getInstance().getId());
302: r
303: .createPart(XmlPartStructure.getInstance()
304: .getId(), xml);
305: }
306: // VUE integration
307: if ((asset != null) && (record != null)) {
308: //System.out.println("creating VUE integration record");
309: org.osid.repository.Record r = asset
310: .createRecord(VueRecordStructure
311: .getInstance().getId());
312: org.osid.repository.PartIterator partIterator = record
313: .getParts();
314: while (partIterator.hasNextPart()) {
315: org.osid.repository.Part part = partIterator
316: .nextPart();
317: r.createPart(part.getPartStructure().getId(),
318: part.getValue());
319: }
320: //System.out.println("setting spec in rep merge " + this. VUE_SPEC_PART_STRUCTURE_ID.getIdString() + " " + assetId);
321: r.createPart(VueSpecPartStructure.getInstance()
322: .getId(), assetId);
323: /*
324: System.out.println("reading record back");
325: org.osid.repository.PartIterator p = r.getParts();
326: while (p.hasNextPart())
327: {
328: org.osid.repository.Part p1 = p.nextPart();
329: org.osid.repository.PartStructure ps = p1.getPartStructure();
330: System.out.println("next part name " + ps.getDisplayName());
331: }
332: */
333: }
334: }
335: } catch (Throwable t) {
336: t.printStackTrace();
337: if (log != null) {
338: try {
339: log.appendLog(t.getMessage());
340: } catch (org.osid.logging.LoggingException lex) {
341: // swallow exception since logging is a best attempt to log an exception anyway
342: }
343: }
344: throw new org.osid.repository.RepositoryException(
345: org.osid.OsidException.OPERATION_FAILED);
346: }
347: }
348: }
|