/* * 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 java.util.*; public class DefaultRecordStructure implements org.osid.repository.RecordStructure { public static final String MEDIUM_RES = "bdef:TuftsImage/getMediumRes/"; public static final String THUMBNAIL = "bdef:TuftsImage/getThumbnail/"; public static final String FULLVIEW = "bdef:AssetDef/getFullView/"; public static final String DEFAULT_DC_DS = "DC"; public static final String DEFAULT_RESOURCE_DS ="RESOURCE"; public static final String DEFAULT_MAP_DS = "map.vue"; private java.util.Vector partsVector = new java.util.Vector(); private String displayName = "Image Specific Data"; private String description = "Provides information about and image (thumbnail and view URLs)"; private org.osid.shared.Id id = null; private String schema = null; private String format = "Plain Text"; private org.osid.shared.Type type = new Type("mit.edu","recordStructure","default"); private org.osid.repository.PartStructure sThumbnailPartStructure = null; private org.osid.repository.PartStructure sURLPartStructure = null; private org.osid.repository.PartStructure sMediumImagePartStructure = null; protected DefaultRecordStructure(Repository repository) throws org.osid.repository.RepositoryException { try { this.id = new PID("DefaultRecordStructureId"); } catch (org.osid.shared.SharedException sex) { } this.sURLPartStructure = new URLPartStructure(this, repository); this.partsVector.add(this.sURLPartStructure); this.partsVector.add(ContributorPartStructure.getInstance()); this.partsVector.add(CoveragePartStructure.getInstance()); this.partsVector.add(CreatorPartStructure.getInstance()); this.partsVector.add(DatePartStructure.getInstance()); this.partsVector.add(DescriptionPartStructure.getInstance()); this.partsVector.add(FormatPartStructure.getInstance()); this.partsVector.add(IdentifierPartStructure.getInstance()); this.partsVector.add(LanguagePartStructure.getInstance()); this.partsVector.add(LargeImagePartStructure.getInstance()); this.partsVector.add(PublisherPartStructure.getInstance()); this.partsVector.add(RelationPartStructure.getInstance()); this.partsVector.add(RightsPartStructure.getInstance()); this.partsVector.add(SourcePartStructure.getInstance()); this.partsVector.add(SubjectPartStructure.getInstance()); this.partsVector.add(TitlePartStructure.getInstance()); this.partsVector.add(TypePartStructure.getInstance()); } 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 getThumbnailPartStructure() throws org.osid.repository.RepositoryException { if (this.sThumbnailPartStructure == null) { throw new org.osid.repository.RepositoryException(org.osid.repository.RepositoryException.OPERATION_FAILED); } return this.sThumbnailPartStructure; } public org.osid.repository.PartStructure getURLPartStructure() throws org.osid.repository.RepositoryException { if (this.sURLPartStructure == null) { throw new org.osid.repository.RepositoryException(org.osid.repository.RepositoryException.OPERATION_FAILED); } return this.sURLPartStructure; } public org.osid.repository.PartStructure getMediumImagePartStructure() throws org.osid.repository.RepositoryException { if (this.sThumbnailPartStructure == null) { throw new org.osid.repository.RepositoryException(org.osid.repository.RepositoryException.OPERATION_FAILED); } return this.sMediumImagePartStructure; } public static Record createDefaultRecord(String pid,DefaultRecordStructure recordStructure,Repository repository , PID objectId , FedoraObjectAssetType assetType , String displayName , String identifier) throws org.osid.repository.RepositoryException { Record record = null; try { record = new Record(new PID(pid),recordStructure); String listDSUrl= Utilities.getRESTUrl(objectId.getIdString(),"listDatastreams", "?xml=true", repository); List<String> dataStreams = FedoraRESTSearchAdapter.getDataStreams(listDSUrl); if(dataStreams.contains(DEFAULT_MAP_DS)) { record.createPart(recordStructure.getURLPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(), DEFAULT_MAP_DS, repository)); } else if(dataStreams.contains(DEFAULT_RESOURCE_DS)) { record.createPart(recordStructure.getURLPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(), DEFAULT_RESOURCE_DS, repository)); }else if(repository.getConfiguration() != null && repository.getConfiguration().getProperty("linkSuffix")!=null && repository.getConfiguration().getProperty("linkSuffix").length() >0) { record.createPart(recordStructure.getURLPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(), repository.getConfiguration().getProperty("linkSuffix"), repository)); } else { record.createPart(recordStructure.getURLPartStructure().getId(), Utilities.formatObjectUrl(objectId.getIdString(),"",repository)); } if(dataStreams.contains(DEFAULT_DC_DS)) { String dcURL = Utilities.formatObjectUrl(objectId.getIdString(),DEFAULT_DC_DS,repository); String contributor = ""; String coverage = ""; String creator = ""; String date = ""; String description = ""; String format = ""; String language = ""; String publisher = ""; String relation = ""; String rights = ""; String source = ""; String subject = ""; String type = ""; try { java.net.URL url = new java.net.URL(dcURL); java.net.URLConnection connection = url.openConnection(); java.net.HttpURLConnection http = (java.net.HttpURLConnection)connection; java.io.InputStreamReader in = new java.io.InputStreamReader(http.getInputStream()); StringBuffer xml = new StringBuffer(); try { int i = 0; while ( (i = in.read()) != -1 ) { xml.append(Character.toString((char)i)); } } catch (Throwable t) {} //System.out.println("xml " + xml); javax.xml.parsers.DocumentBuilderFactory dbf = null; javax.xml.parsers.DocumentBuilder db = null; org.w3c.dom.Document document = null; dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); db = dbf.newDocumentBuilder(); document = db.parse(new java.io.ByteArrayInputStream(xml.toString().getBytes())); // for each DOC (maps 1-to-1 with Asset) org.w3c.dom.NodeList dcs = document.getElementsByTagName("dc:contributor"); int numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { contributor = dc.getFirstChild().getNodeValue(); record.createPart(ContributorPartStructure.getInstance().getId(),contributor); } } dcs = document.getElementsByTagName("dc:creator"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { creator = dc.getFirstChild().getNodeValue(); record.createPart(CreatorPartStructure.getInstance().getId(),creator); } } dcs = document.getElementsByTagName("dc:date"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { date = dc.getFirstChild().getNodeValue(); record.createPart(DatePartStructure.getInstance().getId(),date); } } dcs = document.getElementsByTagName("dc:description"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { description = dc.getFirstChild().getNodeValue(); record.createPart(DescriptionPartStructure.getInstance().getId(),description); } } dcs = document.getElementsByTagName("dc:format"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { format = dc.getFirstChild().getNodeValue(); record.createPart(FormatPartStructure.getInstance().getId(),format); } } dcs = document.getElementsByTagName("dc:language"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { language = dc.getFirstChild().getNodeValue(); record.createPart(LanguagePartStructure.getInstance().getId(),language); } } dcs = document.getElementsByTagName("dc:publisher"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { publisher = dc.getFirstChild().getNodeValue(); record.createPart(PublisherPartStructure.getInstance().getId(),publisher); } } dcs = document.getElementsByTagName("dc:relation"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { relation = dc.getFirstChild().getNodeValue(); record.createPart(RelationPartStructure.getInstance().getId(),relation); } } dcs = document.getElementsByTagName("dc:rights"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { rights = dc.getFirstChild().getNodeValue(); record.createPart(RightsPartStructure.getInstance().getId(),rights); } } dcs = document.getElementsByTagName("dc:source"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { source = dc.getFirstChild().getNodeValue(); record.createPart(SourcePartStructure.getInstance().getId(),source); } } dcs = document.getElementsByTagName("dc:subject"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { subject = dc.getFirstChild().getNodeValue(); record.createPart(SubjectPartStructure.getInstance().getId(),subject); } } dcs = document.getElementsByTagName("dc:type"); numDCs = dcs.getLength(); for (int i=0; i < numDCs; i++) { org.w3c.dom.Element dc = (org.w3c.dom.Element)dcs.item(i); if (dc.hasChildNodes()) { type = dc.getFirstChild().getNodeValue(); record.createPart(TypePartStructure.getInstance().getId(),type); } } } catch (Throwable t) { t.printStackTrace(); } } } catch (Throwable t) { t.printStackTrace(); } return record; } }