/* * 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.artifact; import javax.xml.parsers.*; import org.w3c.dom.*; import edu.tufts.osidimpl.repository.fedora_2_2.PID; import java.io.*; import java.util.Properties; public class Repository implements org.osid.repository.Repository { public static final String DISPLAY_NAME = "Artifact"; private org.osid.shared.Id repositoryId = null; private org.osid.shared.Type repositoryType = null; private org.osid.shared.Type assetType = new Type("tufts.edu","asset","artifact"); private org.osid.shared.Type artifactSearchType = new Type("tufts.edu","search","artifact"); private org.osid.shared.Type keywordSearchType = new Type("mit.edu","search","keyword"); private org.osid.shared.Type artifactMultiFieldSearchType = new Type("tufts.edu","search","artifact-multifield"); private String displayName = DISPLAY_NAME; private String description = null; private String address = null; private String searchKeywordTypePrefix = "searchType=Any"; private java.util.Vector searchTypeVector = new java.util.Vector(); private java.util.Properties configuration; private static final String DEFAULT_ADDRESS = "http://artifact.tufts.edu/"; private static final String SEARCH_URL_PREFIX = DEFAULT_ADDRESS+"vue_xml/search2.asp?searchType=Any&max_return=10&query="; private static final String SEARCH_URL_SUFFIX = "&Submit=Submit"; private static final String QUESTION = "?"; private int maxReturn = 10; protected Repository(String displayName, String description, String address, String maxReturn, org.osid.shared.Id repositoryId, org.osid.shared.Type repositoryType, java.util.Vector searchTypeVector) throws org.osid.repository.RepositoryException { this.displayName = displayName; this.description = description; this.address = address; this.repositoryId = repositoryId; this.repositoryType = repositoryType; this.searchTypeVector = searchTypeVector; searchKeywordTypePrefix += "&max_return="+maxReturn+"&query="; } 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 void updateDescription(String description) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.shared.Id getId() throws org.osid.repository.RepositoryException { return this.repositoryId; } public org.osid.shared.Type getType() throws org.osid.repository.RepositoryException { return this.repositoryType; } public org.osid.repository.Asset createAsset(String displayName , String description , org.osid.shared.Type assetType) throws org.osid.repository.RepositoryException { if ( (displayName == null ) || (description == null) || (assetType == null) ) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } if (!assetType.isEqual(this.assetType)) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_TYPE); } throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public void deleteAsset(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { if (assetId == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.AssetIterator getAssets() throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.AssetIterator getAssetsByType(org.osid.shared.Type assetType) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.shared.TypeIterator getAssetTypes() throws org.osid.repository.RepositoryException { java.util.Vector results = new java.util.Vector(); try { results.addElement(this.assetType); return new TypeIterator(results); } catch (Throwable t) { Utilities.log(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.repository.RecordStructureIterator getRecordStructures() throws org.osid.repository.RepositoryException { java.util.Vector results = new java.util.Vector(); results.addElement(RecordStructure.getInstance()); return new RecordStructureIterator(results); } public org.osid.repository.RecordStructureIterator getMandatoryRecordStructures(org.osid.shared.Type assetType) throws org.osid.repository.RepositoryException { if (assetType == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } if (assetType.isEqual(this.assetType)) { java.util.Vector results = new java.util.Vector(); results.addElement(RecordStructure.getInstance()); return new RecordStructureIterator(results); } throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_TYPE); } public org.osid.shared.TypeIterator getSearchTypes() throws org.osid.repository.RepositoryException { java.util.Vector results = new java.util.Vector(); try { return new TypeIterator(this.searchTypeVector); } catch (Throwable t) { Utilities.log(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.shared.TypeIterator getStatusTypes() throws org.osid.repository.RepositoryException { java.util.Vector results = new java.util.Vector(); try { results.addElement(new Type("mit.edu","asset","valid")); return new TypeIterator(results); } catch (Throwable t) { Utilities.log(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.shared.Type getStatus(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { return new Type("mit.edu","asset","valid"); } public boolean validateAsset(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { return true; } public void invalidateAsset(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.Asset getAsset(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { if (assetId == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.Asset getAssetByDate(org.osid.shared.Id assetId , long date) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.shared.LongValueIterator getAssetDates(org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.AssetIterator getAssetsBySearch(java.io.Serializable searchCriteria , org.osid.shared.Type searchType , org.osid.shared.Properties searchProperties) throws org.osid.repository.RepositoryException { if (searchCriteria == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } if (searchType == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } if (!(searchCriteria instanceof String)) { // maybe change this to a new exception message Utilities.log("invalid criteria"); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } boolean knownType = false; for (int searchTypeNum = 0, size = this.searchTypeVector.size(); searchTypeNum < size; searchTypeNum++) { org.osid.shared.Type type = (org.osid.shared.Type)(this.searchTypeVector.elementAt(searchTypeNum)); if (type.isEqual(searchType)) { knownType = true; } } if (!knownType) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_TYPE); } java.util.Vector results = new java.util.Vector(); try { String criteria = (String)searchCriteria; String query = null; System.out.println("Artifact Search: Type "+ searchType.getKeyword()+" auth ="+searchType.getAuthority()); System.out.println(criteria); if (searchType.isEqual(this.artifactSearchType)) { query = criteria; } else if(searchType.isEqual(this.keywordSearchType) && this.address !=null) { query = this.address+QUESTION+searchKeywordTypePrefix+criteria; } else { query = SEARCH_URL_PREFIX + criteria + SEARCH_URL_SUFFIX; } Utilities.log("Artifact Query " + query); System.out.println("Address:"+address); System.out.println("Query:" +query); return new AssetIterator(query,this.repositoryId); } catch (Throwable t) { t.printStackTrace(); Utilities.log(t); if (t.getMessage().equals(org.osid.OsidException.PERMISSION_DENIED)) { t.printStackTrace(); throw new org.osid.repository.RepositoryException(org.osid.OsidException.PERMISSION_DENIED); } throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } private String xmlCriteriaToStringUrl(String criteria) throws Exception { String urlPart = new String(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); Document doc = factory.newDocumentBuilder().parse(new StringBufferInputStream(criteria)); NodeList list = doc.getElementsByTagName("field"); for(int i =0; i <list.getLength(); i++) { Element fieldElement = (Element)list.item(i); Node typeNode = fieldElement.getElementsByTagName("type").item(0); Node valueNode = fieldElement.getElementsByTagName("value").item(0); String key = new String(); String value = new String(); if(typeNode.getFirstChild() instanceof Text) { String s = typeNode.getFirstChild().getNodeValue(); key = s.substring(s.indexOf("/")+1,s.indexOf("@")); if(key.equalsIgnoreCase("keywords")) key = ""; else key = "&"+key+"="; } if(valueNode.getFirstChild() instanceof Text) { value = valueNode.getFirstChild().getNodeValue(); } urlPart = key+value; } return urlPart; } public org.osid.shared.Id copyAsset(org.osid.repository.Asset asset) throws org.osid.repository.RepositoryException { throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public org.osid.repository.RecordStructureIterator getRecordStructuresByType(org.osid.shared.Type recordStructureType) throws org.osid.repository.RepositoryException { if (recordStructureType == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } if (recordStructureType.isEqual(new Type("tufts.edu","recordStructure","artifact"))) { java.util.Vector results = new java.util.Vector(); results.addElement(RecordStructure.getInstance()); return new RecordStructureIterator(results); } throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_TYPE); } public org.osid.shared.PropertiesIterator getProperties() throws org.osid.repository.RepositoryException { try { return new PropertiesIterator(new java.util.Vector()); } catch (Throwable t) { Utilities.log(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.shared.Properties getPropertiesByType(org.osid.shared.Type propertiesType) throws org.osid.repository.RepositoryException { if (propertiesType == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } return (org.osid.shared.Properties) new Properties(); } public org.osid.shared.TypeIterator getPropertyTypes() throws org.osid.repository.RepositoryException { try { return new TypeIterator(new java.util.Vector()); } catch (Throwable t) { Utilities.log(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } protected void addAsset(org.osid.repository.Asset asset) throws org.osid.repository.RepositoryException { if (asset == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } throw new org.osid.repository.RepositoryException(org.osid.OsidException.UNIMPLEMENTED); } public boolean supportsUpdate() throws org.osid.repository.RepositoryException { return false; } public boolean supportsVersioning() throws org.osid.repository.RepositoryException { return false; } }