From 15f2fb810fd5a1737bc6c73ce8da092071aaa99e Mon Sep 17 00:00:00 2001
From: gmantele <gmantele@ari.uni-heidelberg.de>
Date: Wed, 27 Sep 2017 16:45:31 +0200
Subject: [PATCH] [UWS] Add the UWS protocol version as attributes of the nodes
 <uws>, <jobs> and <job>.

This commit also:

    - set the version of the UWS protocol to 1.1 (cf UWS.VERSION)
	- add a static constant for the standardID (cf UWS.STANDARD_ID)
	- add a xlink:type and xlink:href for jobListRef in the uws XML
	- set the @version Javadoc attribute of all modified classes to 4.3
	  (scheduled version of the UWSLibrary supporting UWS-1.1)
---
 src/org/json/Json4Uws.java                |  5 ++++-
 src/uws/job/serializer/XMLSerializer.java | 18 +++++++++++-------
 src/uws/service/UWS.java                  |  8 ++++++--
 3 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/org/json/Json4Uws.java b/src/org/json/Json4Uws.java
index 676c237..e6a6b27 100644
--- a/src/org/json/Json4Uws.java
+++ b/src/org/json/Json4Uws.java
@@ -37,7 +37,7 @@ import uws.service.UWSUrl;
  * Useful conversion functions from UWS to JSON.
  *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.2 (09/2017)
+ * @version 4.3 (09/2017)
  */
 public final class Json4Uws {
 
@@ -55,6 +55,7 @@ public final class Json4Uws {
 		JSONObject json = new JSONObject();
 		if (uws != null){
 			json.put("name", uws.getName());
+			json.put("version", UWS.VERSION);
 			json.put("description", uws.getDescription());
 
 			JSONArray jobLists = new JSONArray();
@@ -83,6 +84,7 @@ public final class Json4Uws {
 		JSONObject json = new JSONObject();
 		if (jobsList != null){
 			json.put("name", jobsList.getName());
+			json.put("version", UWS.VERSION);
 			JSONArray jsonJobs = new JSONArray();
 			UWSUrl jobsListUrl = jobsList.getUrl();
 			Iterator<UWSJob> it = jobsList.getJobs(owner);
@@ -119,6 +121,7 @@ public final class Json4Uws {
 	public final static JSONObject getJson(final UWSJob job, final UWSUrl jobsListUrl, final boolean reference) throws JSONException{
 		JSONObject json = new JSONObject();
 		if (job != null){
+			json.put("version", UWS.VERSION);
 			json.put(UWSJob.PARAM_JOB_ID, job.getJobId());
 			json.put(UWSJob.PARAM_PHASE, job.getPhase());
 			if (reference){
diff --git a/src/uws/job/serializer/XMLSerializer.java b/src/uws/job/serializer/XMLSerializer.java
index 3386b61..b8a2e96 100644
--- a/src/uws/job/serializer/XMLSerializer.java
+++ b/src/uws/job/serializer/XMLSerializer.java
@@ -40,7 +40,7 @@ import uws.service.request.UploadFile;
  * Lets serializing any UWS resource in XML.
  *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.2 (09/2017)
+ * @version 4.3 (09/2017)
  */
 public class XMLSerializer extends UWSSerializer {
 	private static final long serialVersionUID = 1L;
@@ -150,7 +150,7 @@ public class XMLSerializer extends UWSSerializer {
 		String name = uws.getName(), description = uws.getDescription();
 		StringBuffer xml = new StringBuffer(getHeader());
 
-		xml.append("<uws").append(getUWSNamespace(true));
+		xml.append("<uws version=\"").append(UWS.VERSION).append('"').append(getUWSNamespace(true));
 		if (name != null)
 			xml.append(" name=\"").append(escapeXMLAttribute(name)).append('"');
 		xml.append(">\n");
@@ -161,10 +161,14 @@ public class XMLSerializer extends UWSSerializer {
 		xml.append("\t<jobLists>\n");
 		for(JobList jobList : uws){
 			UWSUrl jlUrl = jobList.getUrl();
-			xml.append("\t\t<jobListRef name=\"").append(escapeXMLAttribute(jobList.getName())).append("\" href=\"");
+			xml.append("\t\t<jobListRef name=\"").append(escapeXMLAttribute(jobList.getName())).append('"');
+
+			/* The XLink attributes are optional. So if no URL is available for
+			 * this Job List reference, none is written here: */
 			if (jlUrl != null && jlUrl.getRequestURL() != null)
-				xml.append(escapeXMLAttribute(jlUrl.getRequestURL()));
-			xml.append("\" />\n");
+				xml.append(" xlink:type=\"simple\" xlink:href=\"").append(escapeXMLAttribute(jlUrl.getRequestURL())).append('"');
+
+			xml.append(" />\n");
 		}
 		xml.append("\t</jobLists>\n");
 
@@ -177,7 +181,7 @@ public class XMLSerializer extends UWSSerializer {
 	public String getJobList(final JobList jobsList, final JobOwner owner, final boolean root){
 		StringBuffer xml = new StringBuffer(getHeader());
 
-		xml.append("<jobs").append(getUWSNamespace(true));
+		xml.append("<jobs version=\"").append(UWS.VERSION).append('"').append(getUWSNamespace(true));
 		/* NOTE: NO ATTRIBUTE "name" IN THE XML SCHEMA!
 		 * String name = jobsList.getName();
 		 * if (name != null)
@@ -201,7 +205,7 @@ public class XMLSerializer extends UWSSerializer {
 		String newLine = "\n\t";
 
 		// general information:
-		xml.append("<job").append(getUWSNamespace(root)).append('>');
+		xml.append("<job version=\"").append(UWS.VERSION).append('"').append(getUWSNamespace(root)).append('>');
 		xml.append(newLine).append(getJobID(job, false));
 		if (job.getRunId() != null)
 			xml.append(newLine).append(getRunID(job, false));
diff --git a/src/uws/service/UWS.java b/src/uws/service/UWS.java
index 08ce2c7..00c6e1d 100644
--- a/src/uws/service/UWS.java
+++ b/src/uws/service/UWS.java
@@ -64,13 +64,17 @@ import uws.service.request.UWSRequestParser;
  * </b></p>
  *
  * @author Gr&eacute;gory Mantelet (CDS;ARI)
- * @version 4.2 (09/2017)
+ * @version 4.3 (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";
+	public final static String VERSION = "1.1";
+
+	/** IVOA standardID of a UWS service currently generated by this library.
+	 * @since 4.2 */
+	public final static String STANDARD_ID = "ivo://ivoa.net/std/UWS#rest-1.1";
 
 	/** Attribute of the HttpServletRequest to set and to get in order to access the request ID set by the UWS library.
 	 * @since 4.1 */
-- 
GitLab