/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.catalog;
import java.io.Serializable;
import java.util.Map;
/**
* A store of geoaspatial resources.
*
* @author Justin Deoliveira, The Open Planning Project
*/
public interface StoreInfo extends CatalogInfo {
/**
* The catalog the store is part of.
*/
Catalog getCatalog();
/**
* The store name.
* <p>
* This value is unique among all stores and can be used to identify the
* store.
* </p>
*
* @uml.property name="name"
*/
String getName();
/**
* Sets the name of the store.
*
* @uml.property name="name"
*/
void setName(String name);
/**
* The store description.
* <p>
* This is usually something that is used in a user interface.
* </p>
*
* @uml.property name="description"
*/
String getDescription(); // FIXME: InternationalString ?
/**
* Sets the store description.
* <p>
* This is usually something that is used in a user interface.
* </p>
*
* @uml.property name="description"
*/
void setDescription(String description);
/**
* The store type.
* <p>
* This value is a well known string representing the nature of the store.
* Examples include "Shapefile", "Postgis", "GeoTIFF", etc...
* </p>
*/
String getType();
/**
* Sets the type of the store.
*/
void setType(String type);
/**
* Map of persistent properties associated with the store.
* <p>
* The intent of this map is for services to associate data with a
* particular store which must be persisted.
* </p>
* <p>
* Key values in this map are of type {@link String}, and values are of
* type {@link Serializable}.
* </p>
*
* @uml.property name="metadata"
*/
MetadataMap getMetadata();
/**
* Flag indicating wether or not teh store is enabled or not.
*
* @uml.property name="enabled"
*/
boolean isEnabled();
/**
* Sets the store enabled / disabled flag.
*
* @uml.property name="enabled"
*/
void setEnabled(boolean enabled);
/**
* The namespace the store is part of.
* <p>
* This value is often used to set the namespace of {@link ResourceInfo}objects
* which are associated to the store.
* </p>
*
* @uml.property name="namespace"
* @uml.associationEnd inverse="storeInfo:org.geoserver.catalog.NamespaceInfo"
*/
//NamespaceInfo getNamespace();
/**
* Sets the namespace the store is part of.
*
* @uml.property name="namespace"
*/
//void setNamespace(NamespaceInfo namespace);
/**
* The workspace the store is part of.
*
*/
WorkspaceInfo getWorkspace();
/**
* Sets the workspace the store is part of.
*/
void setWorkspace( WorkspaceInfo workspace );
/**
* The map of connection paramters specific to the store.
* <p>
* Key values in this map are of type {@link String}, and values are of
* type {@link Serializable}.
* </p>
*
* @uml.property name="connectionParameters"
*/
Map<String, Serializable> getConnectionParameters();
/**
* An error associated with the store.
* <p>
* This value is used to store a problem that occured while attemping to
* connect to the underlying resource of the store. It returns <code>null</code>
* if no such error exists.
* </p>
* <p>
* This is a transient property of the store.
* </p>
*/
Throwable getError();
/**
* Associates an error with the store.
*
* @see #getError()
*/
void setError(Throwable t);
/**
* Creates an adapter for the store.
* <p>
*
* </p>
*
* @param adapterClass
* The class of the adapter.
* @param hints
* Hints to use when creating the adapter.
*
* @return The adapter, an intsanceof adapterClass, or <code>null</code>.
*/
<T extends Object> T getAdapter(Class<T> adapterClass, Map<?,?> hints);
/**
* @return Returns a resource with the specified name that is provided by
* the store, or <code>null</code> if no such resource exists.
* <p>
* The monitor is used to report the progress of loading resoures
* and report any warnings / errors that occur in doing so. Monitor
* may also be null.
*</p>
*/
//<T extends Resource> T getResource( String name, ProgressListener monitor)
// throws IOException;
/**
* @return Returns the resources provided by this store.
* <p>
* The monitor is used to report the progress of loading resoures
* and report any warnings / errors that occur in doing so. Monitor
* may also be null.
*</p>
* @uml.property name="resources"
* @uml.associationEnd multiplicity="(0 -1)"
* inverse="storeInfo:org.geoserver.catalog.Resource"
*/
//<T extends Resource> Iterator<T> getResources(ProgressListener monitor) throws IOException;
}