From 4e3c4f85c07a72ad38520c84a6239a2a48a50ad1 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Mon, 13 Jan 2020 11:59:28 +0100 Subject: [PATCH] WIP: refactoring --- .../xml/EntityXMLConverterHelper.java | 20 +++---- .../AbstractCaosDBServerResource.java | 2 +- .../server/resource/FileSystemResource.java | 24 ++++----- .../server/resource/XMLServerResource.java | 53 +++++++++++++------ 4 files changed, 59 insertions(+), 40 deletions(-) diff --git a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java index b3ac16f5..5baaea4c 100644 --- a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java +++ b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java @@ -1,14 +1,5 @@ package caosdb.server.converter.xml; -import caosdb.server.accessControl.AuthenticationUtils; -import caosdb.server.accessControl.Principal; -import caosdb.server.accessControl.UserSources; -import caosdb.server.converter.misc.AbstractContainerHelper; -import caosdb.server.entity.Entity; -import caosdb.server.entity.EntityInterface; -import caosdb.server.entity.container.Container; -import caosdb.server.entity.container.TransactionContainer; -import caosdb.server.resource.JdomRepresentation; import java.io.IOException; import java.util.Collection; import org.apache.shiro.subject.Subject; @@ -23,6 +14,15 @@ import org.restlet.representation.Representation; import org.restlet.representation.Variant; import org.restlet.resource.Resource; import org.restlet.resource.ResourceException; +import caosdb.server.accessControl.AuthenticationUtils; +import caosdb.server.accessControl.Principal; +import caosdb.server.accessControl.UserSources; +import caosdb.server.converter.misc.AbstractContainerHelper; +import caosdb.server.entity.Entity; +import caosdb.server.entity.EntityInterface; +import caosdb.server.entity.container.Container; +import caosdb.server.entity.container.TransactionContainer; +import caosdb.server.resource.JdomRepresentation; public class EntityXMLConverterHelper extends AbstractContainerHelper { @@ -70,7 +70,7 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { private Representation toJdomRepresentation(TransactionContainer container, Resource resource) { Document doc = toDocument(container, resource); - String xsl = resource.getAttribute("xsl"); + String xsl = resource.getResponseAttributes().get("xsl").toString(); if (xsl != null) { addStyleSheet(doc, xsl); } diff --git a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java index 7e2a483a..339e6ac0 100644 --- a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java +++ b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java @@ -74,7 +74,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { this.utils = WebinterfaceUtils.getInstance(getHostRef()); - this.setAttribute("xsl", getXSLScript()); + this.getResponseAttributes().put("xsl", getXSLScript()); MediaType mediaType = getRequest().getEntity().getMediaType(); diff --git a/src/main/java/caosdb/server/resource/FileSystemResource.java b/src/main/java/caosdb/server/resource/FileSystemResource.java index cc8d8df7..c066e1a7 100644 --- a/src/main/java/caosdb/server/resource/FileSystemResource.java +++ b/src/main/java/caosdb/server/resource/FileSystemResource.java @@ -24,7 +24,17 @@ package caosdb.server.resource; import static caosdb.server.FileSystem.getFromFileSystem; import static java.net.URLDecoder.decode; - +import java.io.File; +import java.io.IOException; +import org.jdom2.Attribute; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.restlet.data.Disposition; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.restlet.representation.FileRepresentation; +import org.restlet.representation.Representation; import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import caosdb.server.database.exceptions.EntityDoesNotExistException; import caosdb.server.database.misc.TransactionBenchmark; @@ -39,17 +49,6 @@ import caosdb.server.transaction.RetrieveSparseEntityByPath; import caosdb.server.transaction.Transaction; import caosdb.server.utils.FileUtils; import caosdb.server.utils.ServerMessages; -import java.io.File; -import java.io.IOException; -import org.jdom2.Attribute; -import org.jdom2.Document; -import org.jdom2.Element; -import org.jdom2.JDOMException; -import org.restlet.data.Disposition; -import org.restlet.data.MediaType; -import org.restlet.data.Status; -import org.restlet.representation.FileRepresentation; -import org.restlet.representation.Representation; /** * Download files via GET method from the file system directly without making the detour through the @@ -222,4 +221,5 @@ public class FileSystemResource extends XMLServerResource { this.setStatus(org.restlet.data.Status.CLIENT_ERROR_METHOD_NOT_ALLOWED); return null; } + } diff --git a/src/main/java/caosdb/server/resource/XMLServerResource.java b/src/main/java/caosdb/server/resource/XMLServerResource.java index 2650660a..70b69b8d 100644 --- a/src/main/java/caosdb/server/resource/XMLServerResource.java +++ b/src/main/java/caosdb/server/resource/XMLServerResource.java @@ -19,14 +19,6 @@ */ package caosdb.server.resource; -import caosdb.server.CaosDBException; -import caosdb.server.accessControl.AuthenticationUtils; -import caosdb.server.accessControl.Principal; -import caosdb.server.accessControl.UserSources; -import caosdb.server.converter.xml.XMLParser; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.entity.Message; -import caosdb.server.utils.ServerMessages; import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; @@ -40,12 +32,21 @@ import org.apache.shiro.subject.Subject; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; +import org.jdom2.ProcessingInstruction; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.resource.Delete; import org.restlet.resource.Get; import org.restlet.resource.Post; import org.restlet.resource.Put; +import caosdb.server.CaosDBException; +import caosdb.server.accessControl.AuthenticationUtils; +import caosdb.server.accessControl.Principal; +import caosdb.server.accessControl.UserSources; +import caosdb.server.converter.xml.XMLParser; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.entity.Message; +import caosdb.server.utils.ServerMessages; /** * This is a temporary bridge class. It contains all code which is necessary for any resources that @@ -224,7 +225,7 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } /** Wrap an element for an "OK" response. */ - protected JdomRepresentation ok(Element root) { + protected Representation ok(Element root) { return ok(new Document(root)); } @@ -232,8 +233,8 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { * Return a JDomRepresentation of the document and leave the {@link Response}'s {@link Status} * where it is - which is usually 200 - OK when this method happens to be called. */ - protected JdomRepresentation ok(final Document doc) { - return new JdomRepresentation(doc, " "); + protected Representation ok(final Document doc) { + return toJdomRepresentation(doc); } /** @@ -249,12 +250,12 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { final Element root = generateRootElement(); root.addContent(m.toElement().setName("Error")); doc.setRootElement(root); - return error(new JdomRepresentation(doc, " "), status); + return error(doc, status); } - protected Representation error(Representation entity, Status status) { + protected Representation error(Document doc, Status status) { getResponse().setStatus(status); - return entity; + return toJdomRepresentation(doc); } protected Representation error(final Message m) { @@ -262,7 +263,7 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } protected Representation error(final Status status) { - return error((Representation) null, status); + return error(new Message(status), status); } /** @@ -272,12 +273,12 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { * @param m - the warning message. * @return A Representation of the warning. */ - protected JdomRepresentation warning(final Message m) { + protected Representation warning(final Message m) { final Document doc = new Document(); final Element root = generateRootElement(); root.addContent(m.toElement().setName("Warning")); doc.setRootElement(root); - return new JdomRepresentation(doc, " "); + return toJdomRepresentation(doc); } protected Representation noWellFormedNess() { @@ -325,4 +326,22 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } return root; } + + public Representation toJdomRepresentation(Document doc) { + String xsl = getXSLScript(); + if(xsl!=null) { + addStyleSheet(doc, xsl); + } + return new JdomRepresentation(doc, " "); + + } + + /** adds the xslt processing instruction to the document. */ + private void addStyleSheet(Document document, String xslPath) { + final ProcessingInstruction pi = + new ProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"" + xslPath + "\" "); + document.getContent().add(0, pi); + } + + } -- GitLab