Skip to content
Snippets Groups Projects
Commit 70dc3a14 authored by gmantele's avatar gmantele
Browse files

[TAP,UWS] Add a protocol version number for UWS and TAP:

  - uws.service.UWS.VERSION  (static final)
  - tap.resource.TAP.VERSION (static final)

Dealing with several protocol versions in the same time is quite difficult and
may significantly alter the libraries API in an unstable way. That's why, for
the TAP and UWS libraries, only one version is implemented (i.e. the last one).
To use a older version of the protocol, one must use an older version of the
corresponding library.

About the versioning of the ADQL standard, there is no need to set any version
number somewhere because a different ADQL version implies a different grammar.
It means that a different parser is required for each ADQL version. For the
moment, there is only one version, so no need to change anything to the ADQL
library about ADQL version. Later, ADQLParser should become an interface and
a factory will have to be used in order to get the parser corresponding to the
desired ADQL version.
parent 8102b083
No related branches found
No related tags found
No related merge requests found
......@@ -2,20 +2,20 @@ package tap.resource;
/*
* This file is part of TAPLibrary.
*
*
* TAPLibrary is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* TAPLibrary is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public License
* along with TAPLibrary. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
* Astronomisches Rechen Institut (ARI)
*/
......@@ -52,14 +52,18 @@ import uws.service.log.UWSLog.LogLevel;
/**
* <p>Root/Home of the TAP service. It is also the resource (HOME) which gathers all the others of the same TAP service.</p>
*
*
* <p>At its creation it is creating and configuring the other resources in function of the given description of the TAP service.</p>
*
*
* @author Gr&eacute;gory Mantelet (CDS;ARI)
* @version 2.1 (09/2017)
*/
public class TAP implements VOSIResource {
/** Version of the TAP protocol used in this library.
* @since 2.1 */
public final static String VERSION = "1.0";
/** <p>Name of the TAP AVAILABILITY resource.
* This resource tells whether the TAP service is available (i.e. whether it accepts queries or not).</p>
* <p><i>Note: this name is suffixing the root TAP URL in order to access one of its resources.</i></p>
......@@ -124,9 +128,9 @@ public class TAP implements VOSIResource {
/**
* Build a HOME resource of a TAP service whose the description is given in parameter.
* All the other TAP resources will be created and configured here thanks to the given {@link ServiceConnection}.
*
*
* @param serviceConnection Description of the TAP service.
*
*
* @throws UWSException If an error occurs while creating the /async resource.
* @throws TAPException If any other error occurs.
*/
......@@ -161,7 +165,7 @@ public class TAP implements VOSIResource {
/**
* Get the logger used by this resource and all the other resources managed by it.
*
*
* @return The used logger.
*/
public final TAPLog getLogger(){
......@@ -170,13 +174,13 @@ public class TAP implements VOSIResource {
/**
* <p>Let initialize this resource and all the other managed resources.</p>
*
*
* <p>This function is called by the library just once: when the servlet is initialized.</p>
*
*
* @param config Configuration of the servlet.
*
*
* @throws ServletException If any error occurs while reading the given configuration.
*
*
* @see TAPResource#init(ServletConfig)
*/
public void init(final ServletConfig config) throws ServletException{
......@@ -186,9 +190,9 @@ public class TAP implements VOSIResource {
/**
* <p>Free all the resources used by this resource and the other managed resources.</p>
*
*
* <p>This function is called by the library just once: when the servlet is destroyed.</p>
*
*
* @see TAPResource#destroy()
*/
public void destroy(){
......@@ -208,16 +212,16 @@ public class TAP implements VOSIResource {
/**
* <p>Set the base URL of this TAP service.</p>
*
*
* <p>
* This URL must be the same as the one of this resource ; it corresponds to the
* URL of the root (or home) of the TAP service.
* </p>
*
*
* <p>The given URL will be propagated to the other TAP resources automatically.</p>
*
*
* @param baseURL URL of this resource.
*
*
* @see TAPResource#setTAPBaseURL(String)
*/
public void setTAPBaseURL(final String baseURL){
......@@ -228,11 +232,11 @@ public class TAP implements VOSIResource {
/**
* <p>Build the base URL from the given HTTP request, and use it to set the base URL of this TAP service.</p>
*
*
* <p>The given URL will be propagated to the other TAP resources automatically.</p>
*
*
* @param request HTTP request from which a TAP service's base URL will be extracted.
*
*
* @see #setTAPBaseURL(String)
*/
public void setTAPBaseURL(final HttpServletRequest request){
......@@ -245,9 +249,9 @@ public class TAP implements VOSIResource {
/**
* Get the description of this service.
*
*
* @return Description/Configuration of this TAP service.
*
*
* @since 2.0
*/
public final ServiceConnection getServiceConnection(){
......@@ -256,7 +260,7 @@ public class TAP implements VOSIResource {
/**
* Get the /availability resource of this TAP service.
*
*
* @return The /availability resource.
*/
public final Availability getAvailability(){
......@@ -265,7 +269,7 @@ public class TAP implements VOSIResource {
/**
* Get the /capabilities resource of this TAP service.
*
*
* @return The /capabilities resource.
*/
public final Capabilities getCapabilities(){
......@@ -274,7 +278,7 @@ public class TAP implements VOSIResource {
/**
* Get the /sync resource of this TAP service.
*
*
* @return The /sync resource.
*/
public final Sync getSync(){
......@@ -283,7 +287,7 @@ public class TAP implements VOSIResource {
/**
* Get the /async resource of this TAP service.
*
*
* @return The /async resource.
*/
public final ASync getASync(){
......@@ -292,7 +296,7 @@ public class TAP implements VOSIResource {
/**
* Get the UWS service used for the /async service.
*
*
* @return The used UWS service.
*/
public final UWSService getUWS(){
......@@ -306,9 +310,9 @@ public class TAP implements VOSIResource {
/**
* <p>Get the object managing all the metadata (information about the published columns and tables)
* of this TAP service.</p>
*
*
* <p>This object is also to the /tables resource.</p>
*
*
* @return List of all metadata of this TAP service.
*/
public final TAPMetadata getTAPMetadata(){
......@@ -317,24 +321,24 @@ public class TAP implements VOSIResource {
/**
* <p>Add the given resource in this TAP service.</p>
*
*
* <p>The ID of this resource (which is also its URI) will be its name (given by {@link TAPResource#getName()}).</p>
*
*
* <p><b>WARNING:
* If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten!
* You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI.
* If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI.
* </b></p>
*
*
* <p><i>Note:
* This function is equivalent to {@link #addResource(String, TAPResource)} with {@link TAPResource#getName()} in first parameter.
* </i></p>
*
*
* @param newResource Resource to add in the service.
*
*
* @return <i>true</i> if the given resource has been successfully added,
* <i>false</i> otherwise (and particularly if the given resource is NULL).
*
*
* @see #addResource(String, TAPResource)
*/
public final boolean addResource(final TAPResource newResource){
......@@ -343,20 +347,20 @@ public class TAP implements VOSIResource {
/**
* <p>Add the given resource in this TAP service with the given ID (which will be also the URI to access this resource).</p>
*
*
* <p><b>WARNING:
* If another resource with an ID strictly identical (case sensitively) to the name of the given resource, it will be overwritten!
* You should check (thanks to {@link #hasResource(String)}) before calling this function that no resource is associated with the same URI.
* If it is the case, you should then use the function {@link #addResource(String, TAPResource)} with a different ID/URI.
* </b></p>
*
*
* <p><i>Note:
* If the given ID is NULL, the name of the resource will be used.
* </i></p>
*
*
* @param resourceId ID/URI of the resource to add.
* @param newResource Resource to add.
*
*
* @return <i>true</i> if the given resource has been successfully added to this service with the given ID/URI,
* <i>false</I> otherwise (and particularly if the given resource is NULL).
*/
......@@ -369,7 +373,7 @@ public class TAP implements VOSIResource {
/**
* Get the number of all resources managed by this TAP service (this resource - HOME - excluded).
*
*
* @return Number of managed resources.
*/
public final int getNbResources(){
......@@ -378,13 +382,13 @@ public class TAP implements VOSIResource {
/**
* <p>Get the specified resource.</p>
*
*
* <p><i>Note:
* The research is case sensitive.
* </i></p>
*
*
* @param resourceId Exact ID/URI of the resource to get.
*
*
* @return The corresponding resource,
* or NULL if no match can be found.
*/
......@@ -394,7 +398,7 @@ public class TAP implements VOSIResource {
/**
* Let iterate over the full list of the TAP resources managed by this TAP service.
*
*
* @return Iterator over the available TAP resources.
*/
public final Iterator<TAPResource> getResources(){
......@@ -403,7 +407,7 @@ public class TAP implements VOSIResource {
/**
* Let iterate over the full list of the TAP resources managed by this TAP service.
*
*
* @return Iterator over the available TAP resources.
* @deprecated The name of this function has been normalized. So now, you should use {@link #getResources()}
* which is doing exactly the same thing.
......@@ -415,13 +419,13 @@ public class TAP implements VOSIResource {
/**
* <p>Tell whether a resource is already associated with the given ID/URI.</p>
*
*
* <p><i>Note:
* The research is case sensitive.
* </i></p>
*
*
* @param resourceId Exact ID/URI of the resource to find.
*
*
* @return <i>true</i> if a resource is already associated with the given ID/URI,
* <i>false</i> otherwise.
*/
......@@ -431,13 +435,13 @@ public class TAP implements VOSIResource {
/**
* <p>Remove the resource associated with the given ID/URI.</p>
*
*
* <p><i>Note:
* The research is case sensitive.
* </i></p>
*
*
* @param resourceId Exact ID/URI of the resource to remove.
*
*
* @return The removed resource, if associated with the given ID/URI,
* otherwise, NULL is returned.
*/
......@@ -451,7 +455,7 @@ public class TAP implements VOSIResource {
/**
* Get the object to use in order to report errors to the user in replacement of the expected result.
*
*
* @return Used error writer.
*/
public final ServiceErrorWriter getErrorWriter(){
......@@ -460,7 +464,7 @@ public class TAP implements VOSIResource {
/**
* Set the object to use in order to report errors to the user in replacement of the expected result.
*
*
* @param errorWriter Error writer to use. (if NULL, nothing will be done)
*/
public final void setErrorWriter(final ServiceErrorWriter errorWriter){
......@@ -631,27 +635,27 @@ public class TAP implements VOSIResource {
/**
* List and declare all IVOA Data Models supported by this TAP service.
*
*
* <p>Currently, only the following DMs are natively supported:</p>
* <ul>
* <li>Obscore (1.0 and PR-1.1)</li>
* <li>RegTAP (1.0)</li>
* </ul>
*
*
* <p>
* More can be supported by extending this function
* (but not overwriting it completely otherwise the above
* supported DMs won't be anymore).
* </p>
*
*
* <p>A DM declaration should follow this XML syntax:</p>
* <pre>&lt;dataModel ivo-id="{DM-IVO_ID}"&gt;{DM-NAME}&lt;/dataModel&gt;</pre>
*
*
* @param xml The <code>/capabilities</code> in-progress content in which
* implemented DMs can be declared.
* @param linePrefix Tabulations/Spaces that should prefix all lines
* (for human readability).
*
*
* @since 2.1
*/
protected void appendDataModels(final StringBuffer xml, final String linePrefix){
......@@ -664,14 +668,14 @@ public class TAP implements VOSIResource {
/**
* <p>Append the ObsCore DM declaration in the given {@link StringBuffer}
* if an <code>ivoa.Obscore</code> table can be found in <code>TAP_SCHEMA</code>.</p>
*
*
* <p>
* This function has no effect if <code>ivoa.Obscore</code> can not
* be found. The <code>ivoa</code> schema is searched case sensitively,
* but not the table name <code>Obscore</code> which can be written
* in any possible case.
* </p>
*
*
* <p>
* If an <code>ivoa.Obscore</code> table is found, this function
* detects automatically which version of Obscore is implemented.
......@@ -680,14 +684,14 @@ public class TAP implements VOSIResource {
* <code>t_xel</code>, <code>em_xel</code> and <code>pol_xel</code>.
* If not, the Obscore table will be declared as Obscore 1.0.
* </p>
*
*
* @param xml The <code>/capabilities</code> in-progress content
* in which Obscore-DM should be declared if found.
* @param linePrefix Tabulations/Spaces that should prefix all lines
* (for human readability).
*
*
* @see TAPMetadata#getObsCoreTable()
*
*
* @since 2.1
*/
protected void appendObsCoreDM(final StringBuffer xml, final String linePrefix){
......@@ -723,26 +727,26 @@ public class TAP implements VOSIResource {
* <p>Append the RegTAP DM declaration in the given {@link StringBuffer}
* if a schema <code>rr</code> can be found in <code>TAP_SCHEMA</code>
* with all its required tables.</p>
*
*
* <p>
* This function has no effect if the schema <code>rr</code> or its
* mandatory children tables can not be found. The research is done
* case sensitively by {@link TAPMetadata#getRegTAPSchema()}.
* </p>
*
*
* <p>
* If there is a valid schema <code>rr</code>, this function
* detects automatically which version of RegTAP is implemented. For the
* moment only one is supported: RegTAP-1.0.
* </p>
*
*
* @param xml The <code>/capabilities</code> in-progress content
* in which RegTAP-DM should be declared if found.
* @param linePrefix Tabulations/Spaces that should prefix all lines
* (for human readability).
*
*
* @see TAPMetadata#getRegTAPTable()
*
*
* @since 2.1
*/
protected void appendRegTAPDM(final StringBuffer xml, final String linePrefix){
......@@ -760,9 +764,9 @@ public class TAP implements VOSIResource {
/**
* Get the HOME PAGE resource of this TAP service.
*
*
* @return The HOME PAGE resource.
*
*
* @since 2.0
*/
public final HomePage getHomePage(){
......@@ -771,13 +775,13 @@ public class TAP implements VOSIResource {
/**
* <p>Change the whole behavior of the TAP home page.</p>
*
*
* <p><i>Note:
* If the given resource is NULL, the default home page (i.e. {@link HomePage}) is set.
* </i></p>
*
*
* @param newHomePageResource The new HOME PAGE resource for this TAP service.
*
*
* @since 2.0
*/
public final void setHomePage(final HomePage newHomePageResource){
......@@ -790,14 +794,14 @@ public class TAP implements VOSIResource {
/**
* <p>Get the URL or the file path of a custom home page.</p>
*
*
* <p>The home page will be displayed when this resource is directly requested.</p>
*
*
* <p><i>Note:
* This function has a sense only if the HOME PAGE resource of this TAP service
* is still the default home page (i.e. {@link HomePage}).
* </i></p>
*
*
* @return URL or file path of the file to display as home page,
* or NULL if no custom home page has been specified.
*/
......@@ -807,14 +811,14 @@ public class TAP implements VOSIResource {
/**
* <p>Set the URL or the file path of a custom home page.</p>
*
*
* <p>The home page will be displayed when this resource is directly requested.</p>
*
*
* <p><i>Note:
* This function has a sense only if the HOME PAGE resource of this TAP service
* is still the default home page (i.e. {@link HomePage}).
* </i></p>
*
*
* @param uri URL or file path of the file to display as home page, or NULL to display the default home page.
*/
public final void setHomePageURI(final String uri){
......@@ -825,14 +829,14 @@ public class TAP implements VOSIResource {
/**
* <p>Get the MIME type of the custom home page.</p>
*
*
* <p>By default, it is the same as the default home page: "text/html".</p>
*
*
* <p><i>Note:
* This function has a sense only if the HOME PAGE resource of this TAP service
* is still the default home page (i.e. {@link HomePage}).
* </i></p>
*
*
* @return MIME type of the custom home page.
*/
public final String getHomePageMimeType(){
......@@ -841,14 +845,14 @@ public class TAP implements VOSIResource {
/**
* <p>Set the MIME type of the custom home page.</p>
*
*
* <p>A NULL value will be considered as "text/html".</p>
*
*
* <p><i>Note:
* This function has a sense only if the HOME PAGE resource of this TAP service
* is still the default home page (i.e. {@link HomePage}).
* </i></p>
*
*
* @param mime MIME type of the custom home page.
*/
public final void setHomePageMimeType(final String mime){
......@@ -857,13 +861,13 @@ public class TAP implements VOSIResource {
/**
* <p>Generate a unique ID for the given request.</p>
*
*
* <p>By default, a timestamp is returned.</p>
*
*
* @param request Request whose an ID is asked.
*
*
* @return The ID of the given request.
*
*
* @since 2.0
*/
protected synchronized String generateRequestID(final HttpServletRequest request){
......@@ -878,7 +882,7 @@ public class TAP implements VOSIResource {
/**
* <p>Execute the given request in the TAP service by forwarding it to the appropriate resource.</p>
*
*
* <h3>Home page</h3>
* <p>
* If the appropriate resource is the home page, the request is propagated to a {@link TAPResource}
......@@ -888,24 +892,24 @@ public class TAP implements VOSIResource {
* Those are well documented in the Javadoc of {@link HomePage}. What you should know, is that sometimes it is
* using the following attributes of this class: {@link #getHomePage()}, {@link #getHomePageURI()}, {@link #getHomePageMimeType()}.
* </p>
*
*
* <h3>Error/Exception management</h3>
* <p>
* Only this resource (the root) should write any errors in the response. For that, it catches any {@link Throwable} and
* write an appropriate message in the HTTP response. The format and the content of this message is designed by the {@link ServiceErrorWriter}
* set in this class. By changing it, it is then possible to change, for instance, the format of the error responses.
* </p>
*
*
* <h3>Request ID &amp; Log</h3>
* <p>
* Each request is identified by a unique identifier (see {@link #generateRequestID(HttpServletRequest)}).
* This ID is used only for logging purpose. Request and jobs/threads can then be associated more easily in the logs.
* Besides, every requests and their response are logged as INFO with this ID.
* </p>
*
*
* @param request Request of the user to execute in this TAP service.
* @param response Object in which the result of the request must be written.
*
*
* @throws ServletException If any grave/fatal error occurs.
* @throws IOException If any error occurs while reading or writing from or into a stream (and particularly the given request or response).
*/
......
......@@ -2,20 +2,20 @@ package uws.service;
/*
* This file is part of UWSLibrary.
*
*
* UWSLibrary is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* UWSLibrary is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
*
* You should have received a copy of the GNU Lesser General Public License
* along with UWSLibrary. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
* Astronomisches Rechen Institut (ARI)
*/
......@@ -34,12 +34,12 @@ import uws.service.request.UWSRequestParser;
* Minimal API of a UWS service.
* Basically, an instance of this interface is supposed to manage one or several jobs lists.
* </p>
*
*
* <p><i><u>note:</u>
* All the functions of this interface are required by {@link JobList}, {@link uws.job.UWSJob}
* and all the other classes available in this library.
* </i></p>
*
*
* <p>Two default implementations of this interface are provided in this library:</p>
* <ul>
* <li>{@link UWSService}: this class represents an object which is able to receive, to interpret
......@@ -51,23 +51,27 @@ import uws.service.request.UWSRequestParser;
* Indeed, for each HTTP method, a servlet has one function (i.e. doGet(...), doPost(...)). So, for each UWS action, a {@link UWSServlet}
* has one function: doAddJob(...), doDestroyJob(...), doGetJob(...), ...</li>
* </ul>
*
*
* <p>
* These two classes already implement all standard actions and behaviors of UWS 1.0. Nothing really change between them except the
* way they lets creating and managing a UWS. The second implementation is the most simple to use because it gathers
* the UWS and the servlet.
* </p>
*
*
* <p><b>IMPORTANT:
* All implementations of this interface should implement properly the function {@link #destroy()} and should call it
* when the JVM or the HTTP server application is closing.
* </b></p>
*
*
* @author Gr&eacute;gory Mantelet (CDS;ARI)
* @version 4.2 (06/2017)
* @version 4.2 (09/2017)
*/
public interface UWS extends Iterable<JobList> {
/** Version of the UWS protocol used in this library.
* @since 4.2 */
public final static String VERSION = "1.0";
/** Attribute of the HttpServletRequest to set and to get in order to access the request ID set by the UWS library.
* @since 4.1 */
public static final String REQ_ATTRIBUTE_ID = "UWS_REQUEST_ID";
......@@ -87,14 +91,14 @@ public interface UWS extends Iterable<JobList> {
/**
* Gets the name of this UWS.
*
*
* @return Its name (MAY BE NULL).
*/
public String getName();
/**
* Gets the description of this UWS.
*
*
* @return Its description (MAY BE NULL).
*/
public String getDescription();
......@@ -109,14 +113,14 @@ public interface UWS extends Iterable<JobList> {
* open files and database connections should be closed, etc...
* In brief, this function should release all used resources.
* </p>
*
*
* <p><b>IMPORTANT: This function should be called only when the JVM or the Web Application Server is stopping.</b></p>
*
*
* <p><i>Note:
* A call to this function may prevent this instance of {@link UWS} to execute any subsequent HTTP request, or the behavior
* would be unpredictable.
* </i></p>
*
*
* @since 4.1
*/
public void destroy();
......@@ -127,9 +131,9 @@ public interface UWS extends Iterable<JobList> {
/**
* Adds a jobs list to this UWS.
*
*
* @param newJL The jobs list to add.
*
*
* @return <i>true</i> if the jobs list has been successfully added,
* <i>false</i> if the given jobs list is <i>null</i> or if a jobs list with this name already exists
* or if a UWS is already associated with another UWS.
......@@ -138,17 +142,17 @@ public interface UWS extends Iterable<JobList> {
/**
* Gets the jobs list whose the name matches exactly the given one.
*
*
* @param name Name of the jobs list to get.
* @return The corresponding jobs list.
*
*
* @throws UWSException If the given name is <i>null</i> or empty, or if no jobs list matches.
*/
public JobList getJobList(final String name) throws UWSException;
/**
* Gets the number of managed jobs lists.
*
*
* @return The number of jobs lists.
*/
public int getNbJobList();
......@@ -156,9 +160,9 @@ public interface UWS extends Iterable<JobList> {
/**
* <p>Destroys the specified jobs list.</p>
* <p><i><u>note:</u> After the call of this function, the UWS reference of the given jobs list should be removed (see {@link JobList#setUWS(UWS)}).</i></p>
*
*
* @param name Name of the jobs list to destroy.
*
*
* @return <i>true</i> if the given jobs list has been destroyed, <i>false</i> otherwise.
*/
public boolean destroyJobList(final String name) throws UWSException;
......@@ -170,13 +174,13 @@ public interface UWS extends Iterable<JobList> {
/**
* <p>Gets the serializer whose the MIME type is the same as the given one.</p>
* <p><i><u>Note:</u> If this UWS has no corresponding serializer, a default one should be returned !</i></p>
*
*
* @param mimeTypes The MIME type of the searched serializer (may be more than one MIME types
* - comma separated ; see the format of the Accept header of a HTTP-Request).
* @return The corresponding serializer
* or the default serializer of this UWS if no corresponding serializer has been found.
* @throws UWSException If there is no corresponding serializer AND if the default serializer of this UWS can not be found.
*
*
* @see uws.AcceptHeader#AcceptHeader(String)
* @see uws.AcceptHeader#getOrderedMimeTypes()
*/
......@@ -189,9 +193,9 @@ public interface UWS extends Iterable<JobList> {
/**
* <p>Gets the object which is able to interpret and to build any UWS URL.
* It MUST be loaded with the root URL of this UWS: see {@link UWSUrl#load(javax.servlet.http.HttpServletRequest)} and {@link UWSUrl#load(java.net.URL)}.</p>
*
*
* <p><i><u>note:</u> This getter is particularly used to serialize the jobs lists and their jobs.</i></p>
*
*
* @return Its UWS URL interpreter (SHOULD BE NOT NULL).
*/
public UWSUrl getUrlInterpreter();
......@@ -205,7 +209,7 @@ public interface UWS extends Iterable<JobList> {
* <p><i><u>note:</u>A UWS logger is used to watch the HTTP requests received by the UWS and their responses.
* The activity of the UWS is also logged and particularly the life of the different jobs and their threads.
* A default implementation is available: {@link uws.service.log.DefaultUWSLog}.</i></p>
*
*
* @return Its logger <u><b>(MUST BE NOT NULL)</b></u>.
*/
public UWSLog getLogger();
......@@ -216,7 +220,7 @@ public interface UWS extends Iterable<JobList> {
/**
* Gets the object which is able to identify a user from an HTTP request.
*
*
* @return Its user identifier.
*/
public UserIdentifier getUserIdentifier();
......@@ -230,7 +234,7 @@ public interface UWS extends Iterable<JobList> {
* <p><i><u>note:</u> This objects is the only one to know how to extract job parameters from an HTTP request,
* how to create a job and how to create its respective thread. A partial implementation which answers to
* the 2 first questions is available: {@link AbstractUWSFactory}</i></p>
*
*
* @return Its job factory.
*/
public UWSFactory getFactory();
......@@ -244,9 +248,9 @@ public interface UWS extends Iterable<JobList> {
* <p><i><u>note:</u> This parser is the only one to be able to extract UWS and TAP parameters from any HTTP request.
* Its behavior is adapted in function of the used HTTP method and of the content-type. A default implementation is
* provided by the UWS library: {@link UWSRequestParser}.</i></p>
*
*
* @return Its request parser.
*
*
* @since 4.1
*/
public RequestParser getRequestParser();
......@@ -259,7 +263,7 @@ public interface UWS extends Iterable<JobList> {
* <p>Gets its file manager.</p>
* <p><i><u>note:</u> A file manager tells to a UWS how to create, read and write the different managed files
* (i.e. log, result, errors, backup). A default implementation is available: {@link uws.service.file.LocalUWSFileManager}.</i></p>
*
*
* @return Its file manager.
*/
public UWSFileManager getFileManager();
......@@ -272,7 +276,7 @@ public interface UWS extends Iterable<JobList> {
* <p>Gets its backup manager.</p>
* <p><i><u>note:</u> This object should be used at the initialization of the UWS to restore a previous "session" (see {@link UWSBackupManager#restoreAll()})
* and must be used each time the list of jobs of a user (see {@link UWSBackupManager#saveOwner(uws.job.user.JobOwner)}) or all the jobs of this UWS must be saved (see {@link UWSBackupManager#saveAll()}).</i></p>
*
*
* @return Its backup manager.
*/
public UWSBackupManager getBackupManager();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment