001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2005-2006, GeoTools Project Managment Committee (PMC)
005: * (C) 2005, Refractions Research Inc.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation;
010: * version 2.1 of the License.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: */
017: package org.geotools.catalog;
018:
019: import java.io.IOException;
020: import java.util.List;
021: import java.util.Map;
022: import org.geotools.util.ProgressListener;
023:
024: /**
025: * Represents a geo spatial service handle. Follows the same design as IResource.
026: * <p>
027: * Represents a spatial service, which may be lazily loaded. The existance of this object does not
028: * ensure that the advertized data is guaranteed to exist, nor does this interface guarantee that
029: * the service exists based on this object's existance. We should also note the resource management
030: * is left to the user, and that resolve() is not guaranteed to return the same instance object from
031: * two subsequent calls, but may. This is merely a handle to some information about a service, and a
032: * method of aquiring an instance of the service ...
033: * </p>
034: * <p>
035: * NOTE: This may be the result of communications with a metadata service, and as such this service
036: * handle may not have been validated yet. Remember to check the service status.
037: * </p>
038: *
039: * @author David Zwiers, Refractions Research
040: * @author Justin Deoliveira, The Open Planning Project
041: * @since 0.6
042: * @see ServiceInfo
043: * @see ServiceFinder
044: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/api/src/main/java/org/geotools/catalog/Service.java $
045: */
046: public interface Service extends Resolve {
047: /**
048: * Return list of IGeoResources managed by this service. This method must
049: * return the same result as the following:
050: *
051: * <pre>
052: * <code>
053: * (List)resolve(List.class,monitor);
054: * </code>
055: * </pre>
056: * <p>
057: * Many file based serivces will just contain a single IGeoResource.
058: * </p>
059: *
060: * @return A list of type GeoResource.
061: */
062: List members(ProgressListener monitor) throws IOException;
063:
064: /**
065: * Will attempt to morph into the adaptee, and return that object.
066: * Required adaptions:
067: * <ul>
068: * <li>IServiceInfo.class
069: * <li>List.class <IGeoResource>
070: * </ul>
071: * May Block.
072: *
073: * @param adaptee
074: * @param monitor
075: * @return instance of adaptee, or null if unavailable (IServiceInfo and List<IGeoResource>
076: * must be supported)
077: * @see ServiceInfo
078: * @see GeoResource
079: * @see IResolve#resolve(Class, ProgressListener)
080: */
081: Object resolve(Class adaptee, ProgressListener monitor)
082: throws IOException;
083:
084: /**
085: * Accessor to the set of params used to create this entry. There is no guarantee that these
086: * params created a usable service (@see getStatus() ). These params may have been modified
087: * within the factory during creation. This method is intended to be used for cloning (@see
088: * IServiceFactory) or for persistence between sessions.
089: *
090: * @see ServiceFinder
091: *
092: * @return A map with key of type String, and value of type Serializable.
093: */
094: Map getConnectionParams();
095:
096: /**
097: * @return IServiceInfo resolve(IServiceInfo.class,ProgressListener monitor);
098: * @see IService#resolve(Class, ProgressListener)
099: */
100: ServiceInfo getInfo(ProgressListener monitor) throws IOException;
101: }
|