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