/**********************************************************************************
*
* Copyright (c) 2003, 2004, 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.
*
**********************************************************************************/
package edu.indiana.lib.twinpeaks.search;
import edu.indiana.lib.twinpeaks.util.DomUtils;
import edu.indiana.lib.twinpeaks.util.LogUtils;
import edu.indiana.lib.twinpeaks.util.StringUtils;
import java.util.ArrayList;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.w3c.dom.html.*;
import org.xml.sax.*;
/**
* Preferred URL handling - reference implementation for the Sirsi Web2 Bridge.
*<p>
* Examine each search result record: based on the connector in use, locate the
* preferred URL (if any) provided.
*<p>
* Add your own handler logic here.
*/
public class PreferredUrlHandler
{
private static org.apache.commons.logging.Log _log = LogUtils.getLog(PreferredUrlHandler.class);
/**
* American Social History Online
*/
public static final String ASHO_CONNECTOR = "SRU_0001";
/**
* Connectors that can provide "preferred URLs"
*/
public static final ArrayList _preferredUrlConnectors = new ArrayList();
/****************************************************************************
* Uncomment this static block to define the "preferred URL" provider(s)
*
static
{
_preferredUrlConnectors.add(ASHO_CONNECTOR);
}
*
****************************************************************************/
/**
* Fetch the preferred URL. This method is invoked for every result record.
*
* @param connector Connector name
* @param dataElement The result record (DATA element) to inspect
* @return The preferred URL (null if none)
*/
public static String getUrl(String connector, Element dataElement)
{
/*
* Stop now if this connector can't provide a preferred URL
*/
if (!_preferredUrlConnectors.contains(connector))
{
return null;
}
/*
* American Social History Online
*
* An example:
*
* <DATA>
* ...
* <IDENTIFIER scheme="URL>http://preferred/url/here</IDENTIFIER>
* ...
* </DATA>
*
* We know each result record will have only one of these.
*/
if (connector.equals(ASHO_CONNECTOR))
{
NodeList nodeList = DomUtils.getElementList(dataElement, "IDENTIFIER");
String url = null;
for (int i = 0; i < nodeList.getLength(); i++)
{
Element element = (Element) nodeList.item(i);
if (element.getAttribute("scheme").equals("URL"))
{
url = DomUtils.getText(element);
if (StringUtils.isNull(url))
{
url = null;
}
break;
}
}
return url;
}
/*
* A known connector and we didn't handle it?
*/
return null;
}
}