/* * Copyright 2003-2010 Tufts University Licensed under the * Educational Community License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may * obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing * permissions and limitations under the License. */ package edu.tufts.osidimpl.repository.fedora_2_2; import org.w3c.dom.Document; import org.w3c.dom.Text; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.net.URL; import java.io.*; import java.util.*; public class VUERecordStructure implements org.osid.repository.RecordStructure { public static final String[] dcFields = {"title","creator","subject","date","type","format","identifier","collection","coverage"}; public static final String DC_NAMESPACE = "dc:"; private java.util.Vector partsVector = new java.util.Vector(); private String displayName = "VUE Specific Data"; private String description = "Provides information to be used by VUE"; private org.osid.shared.Id id = null; private String schema = null; private String format = "Plain Text"; private org.osid.shared.Type type = new Type("tufts.edu","recordStructure","vue"); private org.osid.repository.PartStructure sVUEDefaultViewPartStructure = null; protected VUERecordStructure(Repository repository) throws org.osid.repository.RepositoryException { try { this.id = new PID("VUEInfoStructureId"); } catch (org.osid.shared.SharedException sex) { } this.sVUEDefaultViewPartStructure = new URLPartStructure(this, repository); this.partsVector.add(this.sVUEDefaultViewPartStructure); for(int i=0;i<Repository.DC_FIELDS.length;i++) { org.osid.repository.PartStructure metadataElementPartStructure = new MetadataElementPartStructure(Repository.DC_FIELDS[i], this,repository,new Type("tufts.edu","partStructure",Repository.DC_FIELDS[i])); this.partsVector.add(metadataElementPartStructure); } } public String getDisplayName() throws org.osid.repository.RepositoryException { return this.displayName; } public void updateDisplayName(String displayName) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public String getDescription() throws org.osid.repository.RepositoryException { return this.description; } public String getFormat() throws org.osid.repository.RepositoryException { return this.format; } public org.osid.shared.Id getId() throws org.osid.repository.RepositoryException { return this.id; } public org.osid.repository.PartStructureIterator getPartStructures() throws org.osid.repository.RepositoryException { return new PartStructureIterator(this.partsVector); } public String getSchema() throws org.osid.repository.RepositoryException { return this.schema; } public org.osid.shared.Type getType() throws org.osid.repository.RepositoryException { return this.type; } public boolean isRepeatable() throws org.osid.repository.RepositoryException { return false; } public boolean validateRecord(org.osid.repository.Record record) throws org.osid.repository.RepositoryException { return true; } public org.osid.repository.PartStructure getVUEDefaultViewPartStructure() throws org.osid.repository.RepositoryException { if (this.sVUEDefaultViewPartStructure == null) { throw new org.osid.repository.RepositoryException(org.osid.repository.RepositoryException.OPERATION_FAILED); } return this.sVUEDefaultViewPartStructure; } public org.osid.repository.PartStructure getMetadataElementPartStructure(String element) throws org.osid.repository.RepositoryException { Iterator i = partsVector.iterator(); try { while(i.hasNext()){ org.osid.repository.PartStructure partStructure = (org.osid.repository.PartStructure)i.next(); if(element.equals(partStructure.getId().getIdString())) return partStructure; } } catch (Throwable t) { t.printStackTrace(); } throw new org.osid.repository.RepositoryException(org.osid.repository.RepositoryException.OPERATION_FAILED); } public static Record createVUERecord(String pid , VUERecordStructure recordStructure , Repository repository , PID objectId , FedoraObjectAssetType assetType) throws org.osid.repository.RepositoryException { Record record = null; try { record = new Record(new PID(pid),recordStructure); if(assetType.getKeyword().equals(repository.getFedoraProperties().getProperty("type.image"))) { record.createPart(recordStructure.getVUEDefaultViewPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(),repository.getFedoraProperties().getProperty("assetDef.fullView"),repository)); } else { record.createPart(recordStructure.getVUEDefaultViewPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(),repository.getFedoraProperties().getProperty("assetDef.fullView"),repository)); } if(!(assetType.getKeyword().equals(Repository.BDEF) || assetType.getKeyword().equals(Repository.BMECH))){ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false); String url = Utilities.formatObjectUrl(objectId.getIdString(),repository.getFedoraProperties().getProperty("dissemination.dc"),repository); //System.out.println("DC URL:"+ url); URL dcUrl = new URL(url); if(dcUrl !=null) { InputStream dublinCoreInputStream = dcUrl.openStream(); Document document = factory.newDocumentBuilder().parse(dublinCoreInputStream); for(int i=0;i<Repository.DC_FIELDS.length;i++) { NodeList list = document.getElementsByTagName(Repository.DC_NAMESPACE+dcFields[i]); if(list != null && list.getLength() != 0) { // only picks the first element if(list.item(0).getFirstChild() != null) record.createPart(recordStructure.getMetadataElementPartStructure(Repository.DC_FIELDS[i]).getId(), list.item(0).getFirstChild().getNodeValue()); } } } } } catch (Throwable t) { t.printStackTrace(); } return record; } }