/* * ----------------------------------------------------------------------------- * * <p><b>License and Copyright: </b>The contents of this file are subject to the * Mozilla Public License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at <a href="http://www.mozilla.org/MPL">http://www.mozilla.org/MPL/.</a></p> * * <p>Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for * the specific language governing rights and limitations under the License.</p> * * <p>The entire file consists of original code. Copyright © 2003, 2004 * Tufts University. All rights reserved.</p> * * ----------------------------------------------------------------------------- */ package edu.tufts.osidimpl.testing.repository; import junit.framework.TestCase; public class GetAssetsBySearchTest extends TestCase { public GetAssetsBySearchTest(org.osid.repository.RepositoryManager repositoryManager, org.w3c.dom.Document document) throws org.osid.repository.RepositoryException, org.xml.sax.SAXParseException { // is there a mention of searching for assets from a specific repository? org.w3c.dom.NodeList assetsBySearchNodeList = document.getElementsByTagName(OsidTester.ASSETS_BY_SEARCH_TAG); int numSearches = assetsBySearchNodeList.getLength(); for (int i=0; i < numSearches; i++) { org.osid.shared.Type searchType = null; org.osid.repository.AssetIterator assetIterator = null; // is there a repository with the associated id org.w3c.dom.Element assetsBySearchElement = (org.w3c.dom.Element)assetsBySearchNodeList.item(i); String repositoryIdString = repositoryIdString = assetsBySearchElement.getAttribute(OsidTester.REPOSITORY_ID_ATTR); org.osid.shared.Id repositoryId = null; try { repositoryId = Utilities.getIdManager().getId(repositoryIdString); } catch (Throwable t) { fail("Trouble with Id Manager implentation"); } org.osid.repository.Repository repository = null; try { repository = repositoryManager.getRepository(repositoryId); } catch (Throwable t) { System.out.println("RepositoryManager " + repositoryManager); try { System.out.println("Repository Id " + repositoryId.getIdString()); } catch (Throwable t1) {} fail("No repositoryid attribute or no Repository found"); } // is there a search defined org.w3c.dom.NodeList searchNodeList = assetsBySearchElement.getElementsByTagName(OsidTester.SEARCH_TAG); int num = searchNodeList.getLength(); if (num > 0) { // does it have a type and criteria org.w3c.dom.Element element = (org.w3c.dom.Element)searchNodeList.item(0); String typeString = Utilities.expectedValue(element,OsidTester.TYPE_TAG); String criteria = Utilities.expectedValue(element,OsidTester.CRITERIA_TAG); if ((typeString != null) && (criteria != null)) { searchType = Utilities.stringToType(typeString); org.w3c.dom.NodeList assetsNodeList = document.getElementsByTagName(OsidTester.SEARCH_TAG); } // search properties support org.osid.shared.Properties searchProperties = new SharedProperties(); java.util.Map map = new java.util.HashMap(); org.w3c.dom.NodeList nl = element.getElementsByTagName(OsidTester.PROPERTIES_TAG); int numProperties = nl.getLength(); if (numProperties > 0) { org.w3c.dom.Element propertiesElement = (org.w3c.dom.Element)nl.item(0); nl = propertiesElement.getElementsByTagName(OsidTester.PROPERTY_TAG); numProperties = nl.getLength(); for (int p=0; p < numProperties; p++) { org.w3c.dom.Element el = (org.w3c.dom.Element)nl.item(p); String key = el.getAttribute(OsidTester.KEY_ATTR); // assume values are not encrypted String value = el.getAttribute(OsidTester.VALUE_ATTR); map.put(key,value); } String propertiesTypeString = Utilities.expectedValue(propertiesElement,OsidTester.TYPE_TAG); try { searchProperties = new SharedProperties(map,Utilities.stringToType(propertiesTypeString)); } catch (Throwable t) { } } // is there a set of assets expected org.w3c.dom.NodeList assetsNodeList = assetsBySearchElement.getElementsByTagName(OsidTester.ASSETS_TAG); num = assetsNodeList.getLength(); if (num > 0) { org.w3c.dom.Element assetsElement = (org.w3c.dom.Element)assetsNodeList.item(0); String anyTestOnly = assetsElement.getAttribute("any"); if (anyTestOnly.toLowerCase().trim().equals("true")) { // time to search (if we are looking for anything) assetIterator = repository.getAssetsBySearch(criteria, searchType, searchProperties); assert(assetIterator.hasNextAsset()); System.out.println("PASSED: Assets By Search - any result is sufficient"); } else { // are there specific assets (or just any assets will do) org.w3c.dom.NodeList assetNodeList = assetsElement.getElementsByTagName(OsidTester.ASSET_TAG); num = assetNodeList.getLength(); if (num > 0) { // we are ready to search for (int j=0; j < num; j++) { org.w3c.dom.Element assetElement = (org.w3c.dom.Element)assetNodeList.item(j); if (assetIterator == null) { assetIterator = repository.getAssetsBySearch(criteria, searchType, searchProperties); } if (assetIterator.hasNextAsset()) { org.osid.repository.Asset nextAsset = assetIterator.nextAsset(); // check asset metadata, if specified AssetMetadataTest amt = new AssetMetadataTest(nextAsset,assetElement,(new Integer(j)).toString()); } } } } } } } // is there a mention of searching for assets via manager? assetsBySearchNodeList = document.getElementsByTagName(OsidTester.ASSETS_BY_SEARCH_VIA_MANAGER_TAG); numSearches = assetsBySearchNodeList.getLength(); for (int i=0; i < numSearches; i++) { org.osid.shared.Type searchType = null; org.osid.repository.AssetIterator assetIterator = null; // find repository records org.w3c.dom.Element assetsBySearchElement = (org.w3c.dom.Element)assetsBySearchNodeList.item(i); org.w3c.dom.NodeList repositoriesNodeList = assetsBySearchElement.getElementsByTagName(OsidTester.REPOSITORIES_TAG); int numRepositories = repositoriesNodeList.getLength(); if (numRepositories != 0) { // only should be one of these org.w3c.dom.Element repositoriesElement = (org.w3c.dom.Element)repositoriesNodeList.item(0); org.w3c.dom.NodeList repositoryNodeList = repositoriesElement.getElementsByTagName(OsidTester.REPOSITORY_TAG); int numRepository = repositoryNodeList.getLength(); org.osid.repository.Repository repositoryArray[] = new org.osid.repository.Repository[numRepositories]; org.osid.id.IdManager idManager = Utilities.getIdManager(); for (int r=0; r < numRepositories; r++) { org.w3c.dom.Element repositoryElement = (org.w3c.dom.Element)repositoryNodeList.item(r); // don't decode String repositoryIdString = repositoryElement.getFirstChild().getNodeValue(); try { repositoryArray[r] = repositoryManager.getRepository(idManager.getId(repositoryIdString)); } catch (org.osid.repository.RepositoryException rex) { fail("No repository id or no Repository found"); } catch (Throwable t) { fail("Trouble with Id Manager implentation"); } } // is there a search defined org.w3c.dom.NodeList searchNodeList = assetsBySearchElement.getElementsByTagName(OsidTester.SEARCH_TAG); int num = searchNodeList.getLength(); if (num > 0) { // does it have a type and criteria org.w3c.dom.Element element = (org.w3c.dom.Element)searchNodeList.item(0); String typeString = Utilities.expectedValue(element,OsidTester.TYPE_TAG); String criteria = Utilities.expectedValue(element,OsidTester.CRITERIA_TAG); if ((typeString != null) && (criteria != null)) { searchType = Utilities.stringToType(typeString); org.w3c.dom.NodeList assetsNodeList = document.getElementsByTagName(OsidTester.SEARCH_TAG); } // search properties support org.osid.shared.Properties searchProperties = new SharedProperties(); java.util.Map map = new java.util.HashMap(); org.w3c.dom.NodeList nl = element.getElementsByTagName(OsidTester.PROPERTIES_TAG); int numProperties = nl.getLength(); if (numProperties > 0) { org.w3c.dom.Element propertiesElement = (org.w3c.dom.Element)nl.item(0); nl = propertiesElement.getElementsByTagName(OsidTester.PROPERTY_TAG); numProperties = nl.getLength(); for (int p=0; p < numProperties; p++) { org.w3c.dom.Element el = (org.w3c.dom.Element)nl.item(p); String key = el.getAttribute(OsidTester.KEY_ATTR); // assume values are not encrypted String value = el.getAttribute(OsidTester.VALUE_ATTR); map.put(key,value); } String propertiesTypeString = Utilities.expectedValue(propertiesElement,OsidTester.TYPE_TAG); try { searchProperties = new SharedProperties(map,Utilities.stringToType(propertiesTypeString)); } catch (Throwable t) { } } // is there a set of assets expected org.w3c.dom.NodeList assetsNodeList = assetsBySearchElement.getElementsByTagName(OsidTester.ASSETS_TAG); num = assetsNodeList.getLength(); if (num > 0) { org.w3c.dom.Element assetsElement = (org.w3c.dom.Element)assetsNodeList.item(0); String anyTestOnly = assetsElement.getAttribute("any"); if (anyTestOnly.toLowerCase().trim().equals("true")) { // time to search (if we are looking for anything) assetIterator = repositoryManager.getAssetsBySearch(repositoryArray, criteria, searchType, searchProperties); assert(assetIterator.hasNextAsset()); System.out.println("PASSED: Assets By Search via Manager - any result is sufficient"); } else { // are there specific assets (or just any assets will do) org.w3c.dom.NodeList assetNodeList = assetsElement.getElementsByTagName(OsidTester.ASSET_TAG); num = assetNodeList.getLength(); if (num > 0) { // we are ready to search for (int j=0; j < num; j++) { org.w3c.dom.Element assetElement = (org.w3c.dom.Element)assetNodeList.item(j); if (assetIterator == null) { assetIterator = repositoryManager.getAssetsBySearch(repositoryArray, criteria, searchType, searchProperties); } org.osid.repository.Asset nextAsset = assetIterator.nextAsset(); // check asset metadata, if specified AssetMetadataTest amt = new AssetMetadataTest(nextAsset,assetElement,(new Integer(j)).toString()); } } } } } } } } }