/**
* Copyright 2006 OCLC Online Computer Library Center Licensed under the Apache
* 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.apache.org/licenses/LICENSE-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 info.openurl.oom;
import info.openurl.oom.entities.ServiceType;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.xml.sax.SAXException;
/**
* If you think of a service in terms of pure business logic,
* this class provides a simple bridge providing access to it
* from the web. To use another analogy, if the business logic
* is a coat, and OpenURL is a coatrack, this class represents
* a loop of cloth sewn into the collar of the coat.
* <p />
* Installing new Services can be as easy as dropping them on
* the classpath, if your Transport is smart enough to deduce
* the package and classname from information in the
* HttpServletRequest. If the Transport can't deduce everything
* it needs from the HTTP request, it could use a config
* file to locate and configure Service classes instead.
*
* @author Jeffrey A. Young
*/
public interface Service {
/**
* This is a unique identifier assigned to a service.
* It is easy to imagine a Service being used in
* multiple CommunityProfiles, so it might be nice to
* keep track of them in a registry someday. These
* IDs could be used to represent the service in a
* language independent way.
*
* @return the Service identifier
* @throws URISyntaxException
*/
public URI getServiceID() throws URISyntaxException;
/**
* This method is responsible for pulling what (Referent),
* why (ServiceType), who (Requester), etc. information
* out of the ContextObject and using it to call any Java
* classes and methods needed to produce a result. Having
* obtained a result of some sort from the business logic,
* this method is then responsible for transforming it
* into an OpenURLResponse that acts as a proxy for
* HttpServletResponse.
*
* @param serviceType the current ServiceType in sequence as
* enumerated in the ContextObject
* @param contextObject the current ContextObject in sequence
* as enumerated in the OpenURLRequest
* @param openURLRequest the entire request from the client,
* represented according to the OpenURL Object Model
* @return null to have the ServiceType processing loop move
* on to the next ServiceType or non-null to abort the
* ServiceType processing loop and return a result.
* @throws UnsupportedEncodingException
* @throws OpenURLException
* @throws SAXException
* @throws IOException
* @throws ParserConfigurationException
* @throws TransformerException
* @throws SecurityException
* @throws IllegalArgumentException
* @throws ClassNotFoundException
* @throws NoSuchMethodException
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
public OpenURLResponse resolve(
// OpenURLRequestProcessor processor,
ServiceType serviceType,
ContextObject contextObject,
OpenURLRequest openURLRequest,
OpenURLRequestProcessor openURLProcessor)
throws UnsupportedEncodingException, OpenURLException, SAXException,
IOException, ParserConfigurationException, TransformerException,
SecurityException, IllegalArgumentException, ClassNotFoundException,
NoSuchMethodException, InstantiationException, IllegalAccessException,
InvocationTargetException;
}