Commit 6ad03a80 authored by gmantele's avatar gmantele
Browse files

[UWS] Fix missing xlink:type (though it is optional) in jobRef (in XML job list).

This commit also includes the 2 following points:

    - for (really really tiny) optimisation purpose, replace String by a
	  char when there is only one character to append to a StringBuffer

	- add a bit more details about Result.type in the Javadoc (it should be
	  a xlink:type and not a random custom type)
parent 81c567c8
Loading
Loading
Loading
Loading
+38 −29
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ package uws.job;
 * 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,2014 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 * Copyright 2012-2017 - UDS/Centre de Données astronomiques de Strasbourg (CDS),
 *                       Astronomisches Rechen Institut (ARI)
 */

@@ -29,7 +29,7 @@ import uws.service.UWSUrl;
 * This class gives a short description (mainly an ID and a URL) of a job result.
 *
 * @author Gr&eacute;gory Mantelet (CDS;ARI)
 * @version 4.1 (08/2014)
 * @version 4.1 (09/2017)
 */
public class Result extends SerializableUWSObject {
	private static final long serialVersionUID = 1L;
@@ -110,6 +110,7 @@ public class Result extends SerializableUWSObject {
	 * @param job			Job which will own this result.
	 * @param name			Name or ID or the result.
	 * @param resultType	Type of result.
	 *                  	<i>Note: it should be a XLINK URL type (one among simple (default), extended, locator, arc, resource, title or none ; see http://www.w3.org/TR/xlink/#linking-elements for more details).</i>
	 * @param resultUrl		Result file URL.
	 *
	 * @see #Result(UWSJob, String, String)
@@ -124,6 +125,7 @@ public class Result extends SerializableUWSObject {
	 *
	 * @param name			Name or ID or the result.
	 * @param resultType	Type of result.
	 *                  	<i>Note: it should be a XLINK URL type (one among simple (default), extended, locator, arc, resource, title or none ; see http://www.w3.org/TR/xlink/#linking-elements for more details).</i>
	 * @param resultUrl		Result file URL.
	 * @param redirection	<i>true</i> if a redirection toward the given URL is required to get the result content, <i>false</i> otherwise.
	 * 						<i><u>note:</u> This parameter is ignored if the given URL is NULL or empty ! In this case, redirection = FALSE.</i>
@@ -208,7 +210,14 @@ public class Result extends SerializableUWSObject {
	}

	/**
	 * Gets the type of this result.
	 * Get the type of this result.
	 *
	 * <p><i>Note:
	 * 	The returned type should be a XLINK URL type
	 * 	(one among simple (default), extended, locator, arc, resource, title or
	 * 	none ; see http://www.w3.org/TR/xlink/#linking-elements for more
	 * 	details).
	 * </i></p>
	 *
	 * @return	The result type.
	 */
+58 −55
Original line number Diff line number Diff line
@@ -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 (06/2017)
 * @version 4.2 (09/2017)
 */
public class XMLSerializer extends UWSSerializer {
	private static final long serialVersionUID = 1L;
@@ -152,7 +152,7 @@ public class XMLSerializer extends UWSSerializer {

		xml.append("<uws").append(getUWSNamespace(true));
		if (name != null)
			xml.append(" name=\"").append(escapeXMLAttribute(name)).append("\"");
			xml.append(" name=\"").append(escapeXMLAttribute(name)).append('"');
		xml.append(">\n");

		if (description != null)
@@ -183,7 +183,7 @@ public class XMLSerializer extends UWSSerializer {
		 * if (name != null)
		 * 	xml.append(" name=\"").append(escapeXMLAttribute(name)).append("\"");
		 */
		xml.append(">");
		xml.append('>');

		UWSUrl jobsListUrl = jobsList.getUrl();
		Iterator<UWSJob> it = jobsList.getJobs(owner);
@@ -201,7 +201,7 @@ public class XMLSerializer extends UWSSerializer {
		String newLine = "\n\t";

		// general information:
		xml.append("<job").append(getUWSNamespace(root)).append(">");
		xml.append("<job").append(getUWSNamespace(root)).append('>');
		xml.append(newLine).append(getJobID(job, false));
		if (job.getRunId() != null)
			xml.append(newLine).append(getRunID(job, false));
@@ -243,22 +243,25 @@ public class XMLSerializer extends UWSSerializer {
		}

		StringBuffer xml = new StringBuffer("<jobref id=\"");
		xml.append(escapeXMLAttribute(job.getJobId()));
		xml.append(escapeXMLAttribute(job.getJobId())).append('"');
		/* NOTE: NO ATTRIBUTE "runId" IN THE XML SCHEMA!
		 * if (job.getRunId() != null && job.getRunId().length() > 0)
		 * 	xml.append("\" runId=\"").append(escapeXMLAttribute(job.getRunId()));
		 */
		xml.append("\" xlink:href=\"");

		/* The XLink attributes are optional. So if no URL is available for this
		 * Job reference, none is written here: */
		if (url != null)
			xml.append(escapeXMLAttribute(url));
		xml.append("\">\n\t\t").append(getPhase(job, false)).append("\n\t</jobref>");
			xml.append(" xlink:type=\"simple\" xlink:href=\"").append(escapeXMLAttribute(url)).append('"');

		xml.append(">\n\t\t").append(getPhase(job, false)).append("\n\t</jobref>");

		return xml.toString();
	}

	@Override
	public String getJobID(final UWSJob job, final boolean root){
		return (new StringBuffer(root ? getHeader() : "")).append("<jobId").append(getUWSNamespace(root)).append(">").append(escapeXMLData(job.getJobId())).append("</jobId>").toString();
		return (new StringBuffer(root ? getHeader() : "")).append("<jobId").append(getUWSNamespace(root)).append('>').append(escapeXMLData(job.getJobId())).append("</jobId>").toString();
	}

	@Override
@@ -266,7 +269,7 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getRunId() != null){
			StringBuffer xml = new StringBuffer(root ? getHeader() : "");
			xml.append("<runId").append(getUWSNamespace(root));
			xml.append(">").append(escapeXMLData(job.getRunId())).append("</runId>");
			xml.append('>').append(escapeXMLData(job.getRunId())).append("</runId>");
			return xml.toString();
		}else
			return "";
@@ -279,13 +282,13 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getOwner() == null)
			xml.append(" xsi:nil=\"true\" />");
		else
			xml.append(">").append(escapeXMLData(job.getOwner().getPseudo())).append("</ownerId>");
			xml.append('>').append(escapeXMLData(job.getOwner().getPseudo())).append("</ownerId>");
		return xml.toString();
	}

	@Override
	public String getPhase(final UWSJob job, final boolean root){
		return (new StringBuffer(root ? getHeader() : "")).append("<phase").append(getUWSNamespace(root)).append(">").append(job.getPhase()).append("</phase>").toString();
		return (new StringBuffer(root ? getHeader() : "")).append("<phase").append(getUWSNamespace(root)).append('>').append(job.getPhase()).append("</phase>").toString();
	}

	@Override
@@ -295,7 +298,7 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getQuote() <= 0)
			xml.append(" xsi:nil=\"true\" />");
		else
			xml.append(">").append(job.getQuote()).append("</quote>");
			xml.append('>').append(job.getQuote()).append("</quote>");
		return xml.toString();
	}

@@ -306,7 +309,7 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getStartTime() == null)
			xml.append(" xsi:nil=\"true\" />");
		else
			xml.append(">").append(ISO8601Format.format(job.getStartTime())).append("</startTime>");
			xml.append('>').append(ISO8601Format.format(job.getStartTime())).append("</startTime>");
		return xml.toString();
	}

@@ -317,7 +320,7 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getEndTime() == null)
			xml.append(" xsi:nil=\"true\" />");
		else
			xml.append(">").append(ISO8601Format.format(job.getEndTime())).append("</endTime>");
			xml.append('>').append(ISO8601Format.format(job.getEndTime())).append("</endTime>");
		return xml.toString();
	}

@@ -328,13 +331,13 @@ public class XMLSerializer extends UWSSerializer {
		if (job.getDestructionTime() == null)
			xml.append(" xsi:nil=\"true\" />");
		else
			xml.append(">").append(ISO8601Format.format(job.getDestructionTime())).append("</destruction>");
			xml.append('>').append(ISO8601Format.format(job.getDestructionTime())).append("</destruction>");
		return xml.toString();
	}

	@Override
	public String getExecutionDuration(final UWSJob job, final boolean root){
		return (new StringBuffer(root ? getHeader() : "")).append("<executionDuration").append(getUWSNamespace(root)).append(">").append(job.getExecutionDuration()).append("</executionDuration>").toString();
		return (new StringBuffer(root ? getHeader() : "")).append("<executionDuration").append(getUWSNamespace(root)).append('>').append(job.getExecutionDuration()).append("</executionDuration>").toString();
	}

	@Override
@@ -342,9 +345,9 @@ public class XMLSerializer extends UWSSerializer {
		if (error != null){
			StringBuffer xml = new StringBuffer(root ? getHeader() : "");
			xml.append(tabPrefix).append("<errorSummary").append(getUWSNamespace(root));
			xml.append(" type=\"").append(error.getType()).append("\"").append(" hasDetail=\"").append(error.hasDetail()).append("\">");
			xml.append(" type=\"").append(error.getType()).append('"').append(" hasDetail=\"").append(error.hasDetail()).append("\">");
			xml.append("\n\t").append(tabPrefix).append("<message>").append(escapeXMLData(error.getMessage())).append("</message>");
			xml.append("\n").append(tabPrefix).append("</errorSummary>");
			xml.append('\n').append(tabPrefix).append("</errorSummary>");
			return xml.toString();
		}else
			return "";
@@ -357,7 +360,7 @@ public class XMLSerializer extends UWSSerializer {
		String newLine = "\n\t" + tabPrefix;
		for(String paramName : job.getAdditionalParameters())
			xml.append(newLine).append(getAdditionalParameter(paramName, job.getAdditionalParameterValue(paramName), false));
		xml.append("\n").append(tabPrefix).append("</parameters>");
		xml.append('\n').append(tabPrefix).append("</parameters>");
		return xml.toString();
	}

@@ -412,18 +415,18 @@ public class XMLSerializer extends UWSSerializer {
		String newLine = "\n\t" + tabPrefix;
		while(it.hasNext())
			xml.append(newLine).append(getResult(it.next(), false));
		xml.append("\n").append(tabPrefix).append("</results>");
		xml.append('\n').append(tabPrefix).append("</results>");
		return xml.toString();
	}

	@Override
	public String getResult(final Result result, final boolean root){
		StringBuffer xml = new StringBuffer(root ? getHeader() : "");
		xml.append("<result").append(getUWSNamespace(root)).append(" id=\"").append(escapeXMLAttribute(result.getId())).append("\"");
		xml.append("<result").append(getUWSNamespace(root)).append(" id=\"").append(escapeXMLAttribute(result.getId())).append('"');
		if (result.getHref() != null){
			if (result.getType() != null)
				xml.append(" xlink:type=\"").append(escapeXMLAttribute(result.getType())).append("\"");
			xml.append(" xlink:href=\"").append(escapeXMLAttribute(result.getHref())).append("\"");
				xml.append(" xlink:type=\"").append(escapeXMLAttribute(result.getType())).append('"');
			xml.append(" xlink:href=\"").append(escapeXMLAttribute(result.getHref())).append('"');
		}

		/* NOTE: THE FOLLOWING ATTRIBUTES MAY PROVIDE USEFUL INFORMATION TO USERS, BUT THEY ARE NOT ALLOWED BY THE CURRENT UWS STANDARD.