package edu.indiana.lib.osid.base.repository.http; import java.io.*; import java.util.*; import edu.indiana.lib.twinpeaks.search.*; import edu.indiana.lib.twinpeaks.util.*; /********************************************************************************** * $URL: https://source.sakaiproject.org/svn/citations/trunk/citations-osid/web2bridge/src/java/edu/indiana/lib/osid/base/repository/http/RepositoryManager.java $ * $Id: RepositoryManager.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ ********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2007, 2008 The Sakai Foundation * * 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.opensource.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. * **********************************************************************************/ /** * @author Massachusetts Institute of Techbology, Sakai Software Development Team * @version */ public class RepositoryManager extends edu.indiana.lib.osid.base.repository.RepositoryManager { private static org.apache.commons.logging.Log _log = edu.indiana.lib.twinpeaks.util.LogUtils.getLog(RepositoryManager.class); private org.osid.repository.Repository repository = null; private org.osid.id.IdManager idManager = null; private org.osid.OsidContext context = null; private java.util.Properties configuration = null; private java.util.Vector repositoryVector = new java.util.Vector(); public RepositoryManager() { } public org.osid.OsidContext getOsidContext() throws org.osid.repository.RepositoryException { return context; } private java.util.Vector asVector(Object value) { java.util.Vector vector = new java.util.Vector(1); vector.addElement(value); return vector; } public void assignOsidContext(org.osid.OsidContext context) throws org.osid.repository.RepositoryException { this.context = context; } /* * Phase two configuration */ public void assignConfiguration(java.util.Properties configuration) throws org.osid.repository.RepositoryException { java.io.InputStream configStream = null; org.osid.OsidContext osidContext = this.context; String contextName; /* * Establish our configuration */ try { configStream = getConfigStream("/searchsource.xml"); SearchSource.populate(configStream); } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } finally { if (configStream != null) try { configStream.close(); } catch (Throwable ignore) { } } /* * Verify mandatory configuration values */ try { String idImplementation = SearchSource.getMandatoryGlobalConfigurationValue("osid_20_Id_Implementation"); /* * Get our unique OSID context object */ osidContext = this.context; /* * Load the ID manager */ this.idManager = (org.osid.id.IdManager) edu.indiana.lib.osid.base.loader.OsidLoader.getManager( "org.osid.id.IdManager", idImplementation, osidContext, new java.util.Properties()); Managers.setIdManager(this.idManager); /* * Set up our Repositories */ if (!SearchSource.isSourceListPopulated()) { return; } /* * Add in the enabled choices */ for (Iterator i = SearchSource.getSearchListIterator(); i.hasNext(); ) { SearchSource ss = (SearchSource) i.next(); Type searchType; if (!ss.isEnabled()) { continue; } _log.debug("name = " + ss.getName()); _log.debug("description = " + ss.getDescription()); _log.debug("id = " + ss.getId()); _log.debug("authority = " + ss.getAuthority()); _log.debug("domain = " + ss.getDomain()); _log.debug("searchType = " + ss.getSearchType()); _log.debug("query handler = " + ss.getQueryHandlerClassName()); _log.debug("result handler = " + ss.getSearchResultHandlerClassName()); _log.debug("osid context = " + this.context); /* * Set up the search-type and add the new Repository */ searchType = new Type(ss.getAuthority(), ss.getDomain(), ss.getSearchType(), ss.getTypeDescription()); this.repositoryVector.addElement(new Repository(ss.getName(), ss.getDescription(), ss.getId(), asVector(searchType), asVector(ss.getQueryHandlerClassName()), asVector(ss.getSearchResultHandlerClassName()), this.idManager)); } } catch (Throwable t) { _log.error(t.getMessage()); if (t instanceof org.osid.repository.RepositoryException) { throw new org.osid.repository.RepositoryException(t.getMessage()); } else { throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } } public org.osid.repository.RepositoryIterator getRepositories() throws org.osid.repository.RepositoryException { return new RepositoryIterator(this.repositoryVector); } public org.osid.repository.RepositoryIterator getRepositoriesByType(org.osid.shared.Type repositoryType) throws org.osid.repository.RepositoryException { if (repositoryType == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } java.util.Vector result = new java.util.Vector(); org.osid.repository.RepositoryIterator repositoryIterator = getRepositories(); while (repositoryIterator.hasNextRepository()) { org.osid.repository.Repository nextRepository = repositoryIterator.nextRepository(); if (nextRepository.getType().isEqual(repositoryType)) { result.addElement(nextRepository); } } return new RepositoryIterator(result); } public org.osid.repository.Repository getRepository(org.osid.shared.Id repositoryId) throws org.osid.repository.RepositoryException { if (repositoryId == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } try { org.osid.repository.RepositoryIterator repositoryIterator = getRepositories(); while (repositoryIterator.hasNextRepository()) { org.osid.repository.Repository nextRepository = repositoryIterator.nextRepository(); if (nextRepository.getId().isEqual(repositoryId)) { return nextRepository; } } throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_ID); } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } 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); } try { org.osid.repository.RepositoryIterator repositoryIterator = getRepositories(); while (repositoryIterator.hasNextRepository()) { org.osid.repository.Repository nextRepository = repositoryIterator.nextRepository(); try { org.osid.repository.Asset asset = nextRepository.getAsset(assetId); return asset; } catch (Throwable t) {} } } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_ID); } public org.osid.repository.Asset getAssetByDate(org.osid.shared.Id assetId , long date) throws org.osid.repository.RepositoryException { if (assetId == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } try { org.osid.repository.RepositoryIterator repositoryIterator = getRepositories(); while (repositoryIterator.hasNextRepository()) { org.osid.repository.Repository nextRepository = repositoryIterator.nextRepository(); try { org.osid.repository.Asset asset = nextRepository.getAssetByDate(assetId,date); return asset; } catch (Throwable t) {} } } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.UNKNOWN_ID); } public org.osid.shared.LongValueIterator getAssetDates(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); } java.util.Vector result = new java.util.Vector(); try { org.osid.repository.RepositoryIterator repositoryIterator = getRepositories(); while (repositoryIterator.hasNextRepository()) { org.osid.repository.Repository nextRepository = repositoryIterator.nextRepository(); org.osid.shared.LongValueIterator longValueIterator = repository.getAssetDates(assetId); while (longValueIterator.hasNextLongValue()) { result.addElement(new Long(longValueIterator.nextLongValue())); } } return new LongValueIterator(result); } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.repository.AssetIterator getAssetsBySearch(org.osid.repository.Repository[] repositories , java.io.Serializable searchCriteria , org.osid.shared.Type searchType , org.osid.shared.Properties searchProperties) throws org.osid.repository.RepositoryException { if (repositories == null) { throw new org.osid.repository.RepositoryException(org.osid.shared.SharedException.NULL_ARGUMENT); } try { java.util.Vector results = new java.util.Vector(); for (int j=0; j < repositories.length; j++) { org.osid.repository.Repository nextRepository = repositories[j]; //optionally add a separate thread here try { org.osid.repository.AssetIterator assetIterator = nextRepository.getAssetsBySearch(searchCriteria,searchType,searchProperties); while (assetIterator.hasNextAsset()) { results.addElement(assetIterator.nextAsset()); } } catch (Throwable t) { _log.warn(t.getMessage()); } } return new AssetIterator(results); } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public org.osid.shared.Id copyAsset(org.osid.repository.Repository repository , org.osid.shared.Id assetId) throws org.osid.repository.RepositoryException { if ((repository == null) || (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.shared.TypeIterator getRepositoryTypes() throws org.osid.repository.RepositoryException { java.util.Vector results = new java.util.Vector(); try { results.addElement(new Type("sakaibrary", "repository", "metasearch")); return new TypeIterator(results); } catch (Throwable t) { _log.error(t.getMessage()); throw new org.osid.repository.RepositoryException(org.osid.OsidException.OPERATION_FAILED); } } public void osidVersion_2_0() throws org.osid.repository.RepositoryException { } public java.io.InputStream getConfigStream(String fileName) throws org.osid.repository.RepositoryException { InputStream fileIn = this.getClass().getResourceAsStream(fileName); if (fileIn == null) { /* * Not found */ throw new org.osid.repository.RepositoryException(org.osid.OsidException.CONFIGURATION_ERROR); } return fileIn; } }