From e96851f1e6cbabea3c9b25f1b98bf39813fc721a Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Sat, 11 Jan 2020 13:23:55 +0100 Subject: [PATCH] TST: fix tests --- src/main/java/caosdb/server/CaosDBServer.java | 88 +++++++++---------- src/main/java/caosdb/server/FileSystem.java | 24 ++--- .../misc/AbstractContainerHelper.java | 22 ++--- .../misc/MultipartContainerConverter.java | 60 ++++++++----- .../xml/EntityXMLConverterHelper.java | 70 ++++++++------- .../server/converter/xml/XMLParser.java | 88 +++++++++---------- .../UnixFileSystemGetFileIterator.java | 6 +- .../java/caosdb/server/entity/Entity.java | 24 ++--- .../caosdb/server/entity/EntityInterface.java | 8 +- .../entity/container/DeleteContainer.java | 2 +- .../entity/container/InsertContainer.java | 2 +- .../entity/container/RetrieveContainer.java | 2 +- .../container/TransactionContainer.java | 12 +-- .../entity/container/UpdateContainer.java | 2 +- .../entity/container/WritableContainer.java | 2 +- .../server/entity/wrapper/EntityWrapper.java | 14 +-- src/main/java/caosdb/server/jobs/Job.java | 23 ++--- .../server/jobs/core/InsertFilesInDir.java | 16 ++-- .../AbstractCaosDBServerResource.java | 13 +-- .../resource/AuthenticationResource.java | 24 +++-- .../server/resource/DefaultResource.java | 6 +- .../server/resource/EntityOwnerResource.java | 5 +- .../server/resource/FileSystemResource.java | 25 +++--- .../caosdb/server/resource/InfoResource.java | 10 +-- .../server/resource/JdomRepresentation.java | 2 - .../server/resource/LogoutResource.java | 6 +- .../resource/PermissionRulesResource.java | 18 ++-- .../caosdb/server/resource/RolesResource.java | 70 +++++++-------- .../server/resource/ScriptingResource.java | 26 +++--- .../server/resource/ServerLogsResource.java | 8 +- .../resource/ServerPropertiesResource.java | 8 +- .../server/resource/SharedFileResource.java | 11 +-- .../server/resource/ThumbnailsResource.java | 7 +- .../caosdb/server/resource/UserResource.java | 50 +++++------ .../server/resource/UserRolesResource.java | 16 ++-- .../server/resource/XMLServerResource.java | 53 ++++++----- .../transaction/AbstractEntityResource.java | 75 ++++++++-------- .../resource/transaction/EntityResource.java | 20 ++--- ...etrieveGlobalEntityPermissionsHandler.java | 3 +- .../handlers/SimpleGetRequestHandler.java | 3 +- .../FileStorageConsistencyCheck.java | 27 +++--- .../caosdb/server/transaction/Insert.java | 2 +- .../caosdb/server/transaction/Update.java | 14 +-- .../server/permissions/EntityACLTest.java | 7 +- .../TestAbstractCaosDBServerResource.java | 55 ++++++------ .../resource/TestSharedFileResource.java | 73 +++++---------- 46 files changed, 540 insertions(+), 562 deletions(-) diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java index dd75071e..9ec790b2 100644 --- a/src/main/java/caosdb/server/CaosDBServer.java +++ b/src/main/java/caosdb/server/CaosDBServer.java @@ -19,49 +19,6 @@ */ package caosdb.server; -import java.io.BufferedReader; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Reader; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Properties; -import java.util.TimeZone; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.LogRecord; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.config.Ini; -import org.apache.shiro.config.Ini.Section; -import org.apache.shiro.config.IniSecurityManagerFactory; -import org.apache.shiro.mgt.SecurityManager; -import org.apache.shiro.subject.Subject; -import org.apache.shiro.util.Factory; -import org.apache.shiro.util.ThreadContext; -import org.restlet.Application; -import org.restlet.Component; -import org.restlet.Context; -import org.restlet.Request; -import org.restlet.Response; -import org.restlet.Restlet; -import org.restlet.Server; -import org.restlet.data.CookieSetting; -import org.restlet.data.Parameter; -import org.restlet.data.Protocol; -import org.restlet.data.Reference; -import org.restlet.data.ServerInfo; -import org.restlet.data.Status; -import org.restlet.engine.Engine; -import org.restlet.routing.Route; -import org.restlet.routing.Router; -import org.restlet.routing.Template; -import org.restlet.routing.TemplateRoute; -import org.restlet.routing.Variable; -import org.restlet.util.Series; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import caosdb.server.accessControl.AnonymousRealm; import caosdb.server.accessControl.AuthenticationUtils; import caosdb.server.accessControl.CaosDBAuthorizingRealm; @@ -108,6 +65,49 @@ import caosdb.server.utils.FileUtils; import caosdb.server.utils.Initialization; import caosdb.server.utils.NullPrintStream; import caosdb.server.utils.Utils; +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Properties; +import java.util.TimeZone; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.config.Ini; +import org.apache.shiro.config.Ini.Section; +import org.apache.shiro.config.IniSecurityManagerFactory; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.Factory; +import org.apache.shiro.util.ThreadContext; +import org.restlet.Application; +import org.restlet.Component; +import org.restlet.Context; +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.Restlet; +import org.restlet.Server; +import org.restlet.data.CookieSetting; +import org.restlet.data.Parameter; +import org.restlet.data.Protocol; +import org.restlet.data.Reference; +import org.restlet.data.ServerInfo; +import org.restlet.data.Status; +import org.restlet.engine.Engine; +import org.restlet.routing.Route; +import org.restlet.routing.Router; +import org.restlet.routing.Template; +import org.restlet.routing.TemplateRoute; +import org.restlet.routing.Variable; +import org.restlet.util.Series; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CaosDBServer extends Application { @@ -344,7 +344,7 @@ public class CaosDBServer extends Application { Integer.parseInt(getServerProperty(ServerProperties.KEY_MAX_CONNECTIONS)); init.release(); - + Engine.getInstance().getRegisteredConverters().add(new EntityXMLConverterHelper()); Engine.getInstance().getRegisteredConverters().add(new MultipartContainerConverter()); diff --git a/src/main/java/caosdb/server/FileSystem.java b/src/main/java/caosdb/server/FileSystem.java index 799ef5c1..f9df6e50 100644 --- a/src/main/java/caosdb/server/FileSystem.java +++ b/src/main/java/caosdb/server/FileSystem.java @@ -24,17 +24,6 @@ package caosdb.server; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Path; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.regex.Pattern; -import org.apache.commons.fileupload.FileItemStream; -import com.google.common.io.Files; import caosdb.server.database.access.Access; import caosdb.server.database.backend.transaction.GetFileRecordByPath; import caosdb.server.database.exceptions.EntityDoesNotExistException; @@ -45,6 +34,17 @@ import caosdb.server.entity.Message; import caosdb.server.utils.FileUtils; import caosdb.server.utils.ServerMessages; import caosdb.server.utils.Utils; +import com.google.common.io.Files; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Path; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.regex.Pattern; +import org.apache.commons.fileupload.FileItemStream; public class FileSystem { private static String filesystem = null; @@ -321,7 +321,7 @@ public class FileSystem { if (file.getFile() != null && file.getFile().equals(target)) { return true; } else if (target.isDirectory()) { - throw ServerMessages.TARGET_PATH_EXISTS; + throw ServerMessages.TARGET_PATH_EXISTS; } else { final GetFileRecordByPath t = new GetFileRecordByPath(file.getPath()); t.setAccess(access); diff --git a/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java b/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java index 6c352211..01afb30b 100644 --- a/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java +++ b/src/main/java/caosdb/server/converter/misc/AbstractContainerHelper.java @@ -1,7 +1,6 @@ package caosdb.server.converter.misc; - - +import caosdb.server.entity.container.TransactionContainer; import java.io.IOException; import java.util.Arrays; import java.util.Collections; @@ -13,7 +12,6 @@ import org.restlet.engine.resource.VariantInfo; import org.restlet.representation.Representation; import org.restlet.representation.Variant; import org.restlet.resource.Resource; -import caosdb.server.entity.container.TransactionContainer; public abstract class AbstractContainerHelper extends ConverterHelper { @@ -26,8 +24,8 @@ public abstract class AbstractContainerHelper extends ConverterHelper { } public final boolean isCompatibleSource(Variant source) { - for(VariantInfo v : variants) { - if(v.isCompatible(source)) { + for (VariantInfo v : variants) { + if (v.isCompatible(source)) { return true; } } @@ -38,11 +36,11 @@ public abstract class AbstractContainerHelper extends ConverterHelper { final String sRID = resource.getRequestAttributes().get("SRID").toString(); final long timestamp = resource.getRequest().getDate().getTime(); final Subject owner = SecurityUtils.getSubject(); - + final TransactionContainer result = new TransactionContainer(owner, timestamp, sRID); return result; } - + @Override public final List<Class<?>> getObjectClasses(Variant source) { if (isCompatibleSource(source)) { @@ -50,12 +48,11 @@ public abstract class AbstractContainerHelper extends ConverterHelper { } return null; } - + @Override public final <T> float score(Representation source, Class<T> target, Resource resource) { // this class only converts from multipart/form-data to Containers. - if (TransactionContainer.class.isAssignableFrom(target) - && isCompatibleSource(source)) { + if (TransactionContainer.class.isAssignableFrom(target) && isCompatibleSource(source)) { return 2.0F; } return -1.0F; @@ -66,10 +63,7 @@ public abstract class AbstractContainerHelper extends ConverterHelper { if (source != null && TransactionContainer.class.isAssignableFrom(source)) { return variants; } - + return null; } - - - } diff --git a/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java b/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java index 596eb6ac..7a336295 100644 --- a/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java +++ b/src/main/java/caosdb/server/converter/misc/MultipartContainerConverter.java @@ -1,5 +1,8 @@ package caosdb.server.converter.misc; +import caosdb.server.FileSystem; +import caosdb.server.entity.FileProperties; +import caosdb.server.entity.container.TransactionContainer; import java.io.IOException; import java.security.NoSuchAlgorithmException; import org.apache.commons.fileupload.FileItemIterator; @@ -17,25 +20,21 @@ import org.restlet.representation.Representation; import org.restlet.representation.Variant; import org.restlet.resource.Resource; import org.restlet.resource.ResourceException; -import caosdb.server.FileSystem; -import caosdb.server.entity.FileProperties; -import caosdb.server.entity.container.TransactionContainer; /** * Convert HTTP entities with media type "multipart/form-data" into Containers. - * - * The reverse conversion is not implemented. - * - * This conversion is mainly used for the FileUpload. - * - * @author Timm Fitschen (t.fitschen@indiscale.com) * + * <p>The reverse conversion is not implemented. + * + * <p>This conversion is mainly used for the FileUpload. + * + * @author Timm Fitschen (t.fitschen@indiscale.com) */ public class MultipartContainerConverter extends AbstractContainerHelper { private static final VariantInfo VARIANT_MULTIPART_FORMDATA = new VariantInfo(MediaType.MULTIPART_FORM_DATA); - + public MultipartContainerConverter() { super(VARIANT_MULTIPART_FORMDATA); } @@ -52,8 +51,7 @@ public class MultipartContainerConverter extends AbstractContainerHelper { T result = toContainer(source, target, resource); return result; } - - + @SuppressWarnings("unchecked") public <T> T toContainer(Representation source, Class<T> target, Resource resource) { TransactionContainer result = null; @@ -63,33 +61,50 @@ public class MultipartContainerConverter extends AbstractContainerHelper { try { FileItemIterator iter = upload.getItemIterator(source); FileItemStream item = iter.next(); - + // First part of the multi-part form data entity must be the container // Name of the form field: FileRepresentation if (item.isFormField()) { if (item.getFieldName().equals("FileRepresentation")) { MediaType mediaType = MediaType.valueOf(item.getContentType()); - if(mediaType.equals(MediaType.TEXT_PLAIN, true)) { + if (mediaType.equals(MediaType.TEXT_PLAIN, true)) { mediaType = MediaType.TEXT_XML; } Representation entities = new InputRepresentation(item.openStream(), mediaType); ConverterHelper helper = ConverterUtils.getBestHelper(entities, target, resource); if (helper == null) { - throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status( + Status.CLIENT_ERROR_BAD_REQUEST, + "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), + resource.getRequest(), + resource.getResponse()); } try { result = (TransactionContainer) helper.toObject(entities, target, resource); } catch (IOException e) { e.printStackTrace(); - throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), e, resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status( + Status.CLIENT_ERROR_BAD_REQUEST, + "Could not parse the FileRepresentation field. Probably it has an unsupported media type."), + e, + resource.getRequest(), + resource.getResponse()); } } else { - throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "No entities submitted."), resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status(Status.CLIENT_ERROR_BAD_REQUEST, "No entities submitted."), + resource.getRequest(), + resource.getResponse()); } } else { - throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Form contains unexpected content."), resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Form contains unexpected content."), + resource.getRequest(), + resource.getResponse()); } - + // Get files, store to tmp dir. while (iter.hasNext()) { item = iter.next(); @@ -97,7 +112,11 @@ public class MultipartContainerConverter extends AbstractContainerHelper { result.addFile(item.getName(), file); } } catch (FileUploadException | IOException | NoSuchAlgorithmException e) { - throw new ResourceException(new Status(Status.SERVER_ERROR_INTERNAL, "The file upload failed."), e, resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status(Status.SERVER_ERROR_INTERNAL, "The file upload failed."), + e, + resource.getRequest(), + resource.getResponse()); } return (T) result; } @@ -107,5 +126,4 @@ public class MultipartContainerConverter extends AbstractContainerHelper { throws IOException { return null; } - } diff --git a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java index 9abfd274..b3ac16f5 100644 --- a/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java +++ b/src/main/java/caosdb/server/converter/xml/EntityXMLConverterHelper.java @@ -1,5 +1,14 @@ 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; @@ -14,26 +23,18 @@ 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 { - + public static final VariantInfo VARIANT_TEXT_XML = new VariantInfo(MediaType.TEXT_XML); - public static final VariantInfo VARIANT_APPLICATION_XML = new VariantInfo(MediaType.APPLICATION_XML); + public static final VariantInfo VARIANT_APPLICATION_XML = + new VariantInfo(MediaType.APPLICATION_XML); private static final XMLParser xmlParser = new XMLParser(); - + public EntityXMLConverterHelper() { super(VARIANT_APPLICATION_XML, VARIANT_TEXT_XML); } - + @SuppressWarnings("unchecked") @Override public <T> T toObject(Representation source, Class<T> target, Resource resource) @@ -42,7 +43,11 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { try { xml = xmlParser.parse(source.getStream()); } catch (JDOMException e) { - throw new ResourceException(new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse XML."), e, resource.getRequest(), resource.getResponse()); + throw new ResourceException( + new Status(Status.CLIENT_ERROR_BAD_REQUEST, "Could not parse XML."), + e, + resource.getRequest(), + resource.getResponse()); } return (T) createContainer(xml, resource); } @@ -58,28 +63,28 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { @Override public Representation toRepresentation(Object source, Variant target, Resource resource) throws IOException { - + return toJdomRepresentation((TransactionContainer) source, resource); } - + private Representation toJdomRepresentation(TransactionContainer container, Resource resource) { Document doc = toDocument(container, resource); - + String xsl = resource.getAttribute("xsl"); - if(xsl != null) { + 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); } - + /** * Creates the XML root. * @@ -95,14 +100,14 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { */ protected Document toDocument(TransactionContainer container, Resource resource) { final Element root = new Element("Response"); - + addUserInfo(root, container.getOwner()); root.setAttribute("srid", container.getRequestId()); root.setAttribute("timestamp", container.getTimestamp().toString()); root.setAttribute("baseuri", resource.getRootRef().toString()); - + container.addToElement(root); - + return new Document(root); } @@ -162,32 +167,33 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { ********************************************************************** * The following function is stolen from {@link * org.restlet.engine.converter.StatusInfoHtmlConverter} and adapted. - * + * * Licensed under Apache 2.0. - * + * * Author: Manuel Boillod. * Copyright 2005-2019 Talend * ******************************************************************** */ /** * Indicates if the given variant is compatible with the media types supported by this converter. - * + * * @param variant The variant. * @return True if the given variant is compatible with the media types supported by this - * converter. + * converter. */ protected boolean isCompatible(Variant variant) { - return (variant != null) && (VARIANT_TEXT_XML.isCompatible(variant) - || VARIANT_APPLICATION_XML.isCompatible(variant)); + return (variant != null) + && (VARIANT_TEXT_XML.isCompatible(variant) + || VARIANT_APPLICATION_XML.isCompatible(variant)); } /* ********************************************************************** * The following function is stolen from {@link * org.restlet.engine.converter.StatusInfoHtmlConverter} and adapted. - * + * * Licensed under Apache 2.0. - * + * * Author: Manuel Boillod. * Copyright 2005-2019 Talend * ******************************************************************** @@ -202,6 +208,4 @@ public class EntityXMLConverterHelper extends AbstractContainerHelper { return result; } - - } diff --git a/src/main/java/caosdb/server/converter/xml/XMLParser.java b/src/main/java/caosdb/server/converter/xml/XMLParser.java index 1353ec9e..f2499e52 100644 --- a/src/main/java/caosdb/server/converter/xml/XMLParser.java +++ b/src/main/java/caosdb/server/converter/xml/XMLParser.java @@ -9,59 +9,59 @@ import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; public class XMLParser { - - private static final LinkedList<SAXBuilder> pool = new LinkedList<SAXBuilder>(); - private static final int max = 25; - private static final int init = 5; - private static final int min = 5; - private SAXBuilder getSAXBuilder() { - try { - synchronized (pool) { - return pool.removeFirst(); - } - } catch (final NoSuchElementException e) { - } - preLoad(min); - return new SAXBuilder(); - } + private static final LinkedList<SAXBuilder> pool = new LinkedList<SAXBuilder>(); + private static final int max = 25; + private static final int init = 5; + private static final int min = 5; - private int release(final SAXBuilder sb) { + private SAXBuilder getSAXBuilder() { + try { synchronized (pool) { - if (pool.size() <= max) { - pool.add(sb); - } - return pool.size(); + return pool.removeFirst(); } + } catch (final NoSuchElementException e) { } + preLoad(min); + return new SAXBuilder(); + } - public XMLParser() { - preLoad(init); + private int release(final SAXBuilder sb) { + synchronized (pool) { + if (pool.size() <= max) { + pool.add(sb); + } + return pool.size(); } + } - public Document parse(final InputStream is) throws JDOMException, IOException { - final SAXBuilder sb = getSAXBuilder(); - Document ret; - try { - ret = sb.build(is); - } finally { - release(sb); - } - return ret; + public XMLParser() { + preLoad(init); + } + + public Document parse(final InputStream is) throws JDOMException, IOException { + final SAXBuilder sb = getSAXBuilder(); + Document ret; + try { + ret = sb.build(is); + } finally { + release(sb); } + return ret; + } - public void preLoad(final int i) { - final Thread t = - new Thread() { - @Override - public void run() { - int j = 0; - while (j < i) { - final SAXBuilder sb = new SAXBuilder(); - j = release(sb); - } + public void preLoad(final int i) { + final Thread t = + new Thread() { + @Override + public void run() { + int j = 0; + while (j < i) { + final SAXBuilder sb = new SAXBuilder(); + j = release(sb); } - }; - t.start(); - } + } + }; + t.start(); } +} diff --git a/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java b/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java index 78fcac09..5bd6cd56 100644 --- a/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java +++ b/src/main/java/caosdb/server/database/backend/implementation/UnixFileSystem/UnixFileSystemGetFileIterator.java @@ -22,14 +22,14 @@ */ package caosdb.server.database.backend.implementation.UnixFileSystem; -import java.io.File; -import java.util.Arrays; -import java.util.Iterator; import caosdb.server.FileSystem; import caosdb.server.database.access.Access; import caosdb.server.database.backend.interfaces.GetFileIteratorImpl; import caosdb.server.database.exceptions.TransactionException; import caosdb.server.entity.Message; +import java.io.File; +import java.util.Arrays; +import java.util.Iterator; public class UnixFileSystemGetFileIterator extends UnixFileSystemTransaction implements GetFileIteratorImpl { diff --git a/src/main/java/caosdb/server/entity/Entity.java b/src/main/java/caosdb/server/entity/Entity.java index 20e84bbf..5c74dda1 100644 --- a/src/main/java/caosdb/server/entity/Entity.java +++ b/src/main/java/caosdb/server/entity/Entity.java @@ -22,17 +22,6 @@ */ package caosdb.server.entity; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.AuthorizationException; -import org.apache.shiro.authz.Permission; -import org.apache.shiro.subject.Subject; -import org.jdom2.Element; import caosdb.server.CaosDBException; import caosdb.server.database.proto.SparseEntity; import caosdb.server.database.proto.VerySparseEntity; @@ -58,6 +47,17 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.ServerMessages; import caosdb.server.utils.TransactionLogMessage; import caosdb.unit.Unit; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.AuthorizationException; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.subject.Subject; +import org.jdom2.Element; public class Entity extends AbstractObservable implements EntityInterface { @@ -1097,7 +1097,7 @@ public class Entity extends AbstractObservable implements EntityInterface { public boolean skipJob() { return skipOn != null && skipOn != getEntityStatus(); } - + @Override public void setSkip(EntityStatus e) { this.skipOn = e; diff --git a/src/main/java/caosdb/server/entity/EntityInterface.java b/src/main/java/caosdb/server/entity/EntityInterface.java index aba56548..5106da3f 100644 --- a/src/main/java/caosdb/server/entity/EntityInterface.java +++ b/src/main/java/caosdb/server/entity/EntityInterface.java @@ -22,9 +22,6 @@ */ package caosdb.server.entity; -import java.util.List; -import org.apache.shiro.authz.Permission; -import org.apache.shiro.subject.Subject; import caosdb.server.database.proto.SparseEntity; import caosdb.server.database.proto.VerySparseEntity; import caosdb.server.datatype.AbstractDatatype; @@ -41,6 +38,9 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.Observable; import caosdb.server.utils.TransactionLogMessage; import caosdb.unit.Unit; +import java.util.List; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.subject.Subject; public interface EntityInterface extends JobTarget, Observable, ToElementable, WriteEntity, TransactionEntity { @@ -177,6 +177,6 @@ public interface EntityInterface public abstract String getQueryTemplateDefinition(); public abstract void setQueryTemplateDefinition(String query); - + public abstract void setSkip(EntityStatus e); } diff --git a/src/main/java/caosdb/server/entity/container/DeleteContainer.java b/src/main/java/caosdb/server/entity/container/DeleteContainer.java index 907e6930..2dc46910 100644 --- a/src/main/java/caosdb/server/entity/container/DeleteContainer.java +++ b/src/main/java/caosdb/server/entity/container/DeleteContainer.java @@ -22,9 +22,9 @@ */ package caosdb.server.entity.container; +import caosdb.server.entity.DeleteEntity; import java.util.Map; import org.apache.shiro.subject.Subject; -import caosdb.server.entity.DeleteEntity; public class DeleteContainer extends EntityByIdContainer { diff --git a/src/main/java/caosdb/server/entity/container/InsertContainer.java b/src/main/java/caosdb/server/entity/container/InsertContainer.java index 2d7bd2a2..a2b5751d 100644 --- a/src/main/java/caosdb/server/entity/container/InsertContainer.java +++ b/src/main/java/caosdb/server/entity/container/InsertContainer.java @@ -22,10 +22,10 @@ */ package caosdb.server.entity.container; +import caosdb.server.entity.InsertEntity; import java.util.Map; import org.apache.shiro.subject.Subject; import org.jdom2.Element; -import caosdb.server.entity.InsertEntity; public class InsertContainer extends WritableContainer { diff --git a/src/main/java/caosdb/server/entity/container/RetrieveContainer.java b/src/main/java/caosdb/server/entity/container/RetrieveContainer.java index 04e67d1d..2a8a18d4 100644 --- a/src/main/java/caosdb/server/entity/container/RetrieveContainer.java +++ b/src/main/java/caosdb/server/entity/container/RetrieveContainer.java @@ -22,9 +22,9 @@ */ package caosdb.server.entity.container; +import caosdb.server.entity.RetrieveEntity; import java.util.Map; import org.apache.shiro.subject.Subject; -import caosdb.server.entity.RetrieveEntity; public class RetrieveContainer extends EntityByIdContainer { diff --git a/src/main/java/caosdb/server/entity/container/TransactionContainer.java b/src/main/java/caosdb/server/entity/container/TransactionContainer.java index 31143759..82b581be 100644 --- a/src/main/java/caosdb/server/entity/container/TransactionContainer.java +++ b/src/main/java/caosdb/server/entity/container/TransactionContainer.java @@ -22,12 +22,6 @@ */ package caosdb.server.entity.container; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import org.apache.shiro.subject.Subject; -import org.jdom2.Element; import caosdb.server.CaosDBServer; import caosdb.server.database.misc.TransactionBenchmark; import caosdb.server.entity.Entity; @@ -36,6 +30,12 @@ import caosdb.server.entity.FileProperties; import caosdb.server.entity.xml.ToElementable; import caosdb.server.jobs.JobTarget; import caosdb.server.utils.EntityStatus; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import org.apache.shiro.subject.Subject; +import org.jdom2.Element; public class TransactionContainer extends Container<Entity> implements ToElementable, JobTarget { diff --git a/src/main/java/caosdb/server/entity/container/UpdateContainer.java b/src/main/java/caosdb/server/entity/container/UpdateContainer.java index f09159a2..cf903763 100644 --- a/src/main/java/caosdb/server/entity/container/UpdateContainer.java +++ b/src/main/java/caosdb/server/entity/container/UpdateContainer.java @@ -22,10 +22,10 @@ */ package caosdb.server.entity.container; +import caosdb.server.entity.UpdateEntity; import java.util.Map; import org.apache.shiro.subject.Subject; import org.jdom2.Element; -import caosdb.server.entity.UpdateEntity; public class UpdateContainer extends WritableContainer { diff --git a/src/main/java/caosdb/server/entity/container/WritableContainer.java b/src/main/java/caosdb/server/entity/container/WritableContainer.java index e1a95a6d..b5989da5 100644 --- a/src/main/java/caosdb/server/entity/container/WritableContainer.java +++ b/src/main/java/caosdb/server/entity/container/WritableContainer.java @@ -22,10 +22,10 @@ */ package caosdb.server.entity.container; +import caosdb.server.entity.FileProperties; import java.util.Map; import org.apache.shiro.subject.Subject; import org.jdom2.Element; -import caosdb.server.entity.FileProperties; @Deprecated public abstract class WritableContainer extends TransactionContainer { diff --git a/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java index 4bdc78fb..a15c1e51 100644 --- a/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java +++ b/src/main/java/caosdb/server/entity/wrapper/EntityWrapper.java @@ -22,12 +22,6 @@ */ package caosdb.server.entity.wrapper; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.apache.shiro.authz.Permission; -import org.apache.shiro.subject.Subject; -import org.jdom2.Element; import caosdb.server.database.proto.SparseEntity; import caosdb.server.database.proto.VerySparseEntity; import caosdb.server.datatype.AbstractDatatype; @@ -47,6 +41,12 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.Observer; import caosdb.server.utils.TransactionLogMessage; import caosdb.unit.Unit; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.subject.Subject; +import org.jdom2.Element; public class EntityWrapper implements EntityInterface { @@ -541,7 +541,7 @@ public class EntityWrapper implements EntityInterface { public boolean skipJob() { return this.entity.skipJob(); } - + @Override public void setSkip(EntityStatus e) { this.entity.setSkip(e); diff --git a/src/main/java/caosdb/server/jobs/Job.java b/src/main/java/caosdb/server/jobs/Job.java index f22c92e1..da586470 100644 --- a/src/main/java/caosdb/server/jobs/Job.java +++ b/src/main/java/caosdb/server/jobs/Job.java @@ -22,15 +22,6 @@ */ package caosdb.server.jobs; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authz.Permission; -import org.apache.shiro.subject.Subject; -import org.reflections.Reflections; import caosdb.server.CaosDBException; import caosdb.server.database.BackendTransaction; import caosdb.server.database.backend.transaction.GetIDByName; @@ -53,6 +44,15 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.Observable; import caosdb.server.utils.Observer; import caosdb.server.utils.ServerMessages; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.Permission; +import org.apache.shiro.subject.Subject; +import org.reflections.Reflections; public abstract class Job extends AbstractObservable implements Observer { private Transaction<? extends TransactionContainer> transaction = null; @@ -141,9 +141,10 @@ public abstract class Job extends AbstractObservable implements Observer { TransactionContainer getContainer() { return getTransaction().getContainer(); } - + protected final boolean cache() { - return getContainer().getFlags() == null || !"false".equals(getContainer().getFlags().get("cache")); + return getContainer().getFlags() == null + || !"false".equals(getContainer().getFlags().get("cache")); } protected final boolean isValidSubType(final int child, final int parent) { diff --git a/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java b/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java index 7e0517b0..6b3144eb 100644 --- a/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java +++ b/src/main/java/caosdb/server/jobs/core/InsertFilesInDir.java @@ -22,12 +22,6 @@ */ package caosdb.server.jobs.core; -import java.io.File; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import caosdb.server.CaosDBException; import caosdb.server.CaosDBServer; import caosdb.server.FileSystem; @@ -48,6 +42,12 @@ import caosdb.server.utils.EntityStatus; import caosdb.server.utils.FileUtils; import caosdb.server.utils.Undoable; import caosdb.server.utils.Utils; +import java.io.File; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @JobAnnotation( flag = "InsertFilesInDir", @@ -276,9 +276,7 @@ public class InsertFilesInDir extends FlagJob { getContainer() .addMessage( new Message( - MessageType.Warning, - 2, - "Explicitly excluded file: " + sub.getCanonicalPath())); + MessageType.Warning, 2, "Explicitly excluded file: " + sub.getCanonicalPath())); return false; } } diff --git a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java index b72f9fc5..c947bf81 100644 --- a/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java +++ b/src/main/java/caosdb/server/resource/AbstractCaosDBServerResource.java @@ -23,13 +23,11 @@ */ package caosdb.server.resource; +import caosdb.server.utils.WebinterfaceUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; -import org.restlet.data.Header; import org.restlet.data.MediaType; import org.restlet.resource.ServerResource; -import org.restlet.util.Series; -import caosdb.server.utils.WebinterfaceUtils; /** * Base class for all CaosDB Server Resources. @@ -60,7 +58,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { */ @Override protected void doInit() { - + // wrap the request entity into an entity with proper logging if (getRequestEntity().isTransient() && !getRequestEntity().isEmpty()) { final ReReadableRepresentation r = new ReReadableRepresentation(getRequestEntity()); @@ -72,10 +70,8 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { this.setAttribute("xsl", getXSLScript()); MediaType mediaType = getRequest().getEntity().getMediaType(); - - Series<Header> headers = getRequest().getHeaders(); - - if(mediaType == null) { + + if (mediaType == null) { getRequest().getEntity().setMediaType(MediaType.TEXT_XML); } } @@ -90,5 +86,4 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { public final String getSRID() { return getRequest().getAttributes().get("SRID").toString(); } - } diff --git a/src/main/java/caosdb/server/resource/AuthenticationResource.java b/src/main/java/caosdb/server/resource/AuthenticationResource.java index 870ad5c2..556763b2 100644 --- a/src/main/java/caosdb/server/resource/AuthenticationResource.java +++ b/src/main/java/caosdb/server/resource/AuthenticationResource.java @@ -22,6 +22,11 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.accessControl.AuthenticationUtils; +import caosdb.server.accessControl.RealmUsernamePasswordToken; +import caosdb.server.accessControl.UserSources; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; @@ -37,11 +42,6 @@ import org.restlet.representation.Representation; import org.restlet.resource.Delete; import org.restlet.resource.Post; import org.restlet.resource.ResourceException; -import caosdb.server.CaosDBException; -import caosdb.server.accessControl.AuthenticationUtils; -import caosdb.server.accessControl.RealmUsernamePasswordToken; -import caosdb.server.accessControl.UserSources; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; public class AuthenticationResource extends AbstractCaosDBServerResource { @@ -91,11 +91,19 @@ public class AuthenticationResource extends AbstractCaosDBServerResource { } catch (final AuthenticationException e) { getLogger().log(Level.INFO, "LOGIN_FAILED", e); - throw new ResourceException(new Status(Status.CLIENT_ERROR_UNAUTHORIZED, "Login failed."), e, getRequest(), getResponse()); + throw new ResourceException( + new Status(Status.CLIENT_ERROR_UNAUTHORIZED, "Login failed."), + e, + getRequest(), + getResponse()); } } else { - throw new ResourceException(new Status(Status.CLIENT_ERROR_UNAUTHORIZED, "Login failed. Please provide a user name and a password."), getRequest(), getResponse()); + throw new ResourceException( + new Status( + Status.CLIENT_ERROR_UNAUTHORIZED, + "Login failed. Please provide a user name and a password."), + getRequest(), + getResponse()); } } - } diff --git a/src/main/java/caosdb/server/resource/DefaultResource.java b/src/main/java/caosdb/server/resource/DefaultResource.java index a199f986..4c076675 100644 --- a/src/main/java/caosdb/server/resource/DefaultResource.java +++ b/src/main/java/caosdb/server/resource/DefaultResource.java @@ -22,16 +22,16 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import org.jdom2.Document; import org.jdom2.Element; import org.restlet.representation.Representation; -import caosdb.server.CaosDBException; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -public class DefaultResource extends XMLServerResource { +public class DefaultResource extends XMLServerResource { private Element responseBody = null; diff --git a/src/main/java/caosdb/server/resource/EntityOwnerResource.java b/src/main/java/caosdb/server/resource/EntityOwnerResource.java index 2754760a..b5485ed0 100644 --- a/src/main/java/caosdb/server/resource/EntityOwnerResource.java +++ b/src/main/java/caosdb/server/resource/EntityOwnerResource.java @@ -22,16 +22,15 @@ */ package caosdb.server.resource; -import java.util.Map; import caosdb.server.resource.transaction.AbstractEntityResource; +import java.util.Map; public class EntityOwnerResource extends AbstractEntityResource { - + @Override public Map<String, String> getFlags() { Map<String, String> result = super.getFlags(); result.put("owner", null); return result; } - } diff --git a/src/main/java/caosdb/server/resource/FileSystemResource.java b/src/main/java/caosdb/server/resource/FileSystemResource.java index 8b78d617..cc8d8df7 100644 --- a/src/main/java/caosdb/server/resource/FileSystemResource.java +++ b/src/main/java/caosdb/server/resource/FileSystemResource.java @@ -24,17 +24,7 @@ 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; @@ -49,6 +39,17 @@ 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 @@ -56,7 +57,7 @@ import caosdb.server.utils.ServerMessages; * * @author Timm Fitschen */ -public class FileSystemResource extends XMLServerResource { +public class FileSystemResource extends XMLServerResource { public static Message ORPHANED_FILE_WARNING = new Message( diff --git a/src/main/java/caosdb/server/resource/InfoResource.java b/src/main/java/caosdb/server/resource/InfoResource.java index d706e9c6..a03dfe29 100644 --- a/src/main/java/caosdb/server/resource/InfoResource.java +++ b/src/main/java/caosdb/server/resource/InfoResource.java @@ -22,17 +22,17 @@ */ package caosdb.server.resource; -import org.jdom2.Document; -import org.jdom2.Element; -import org.jdom2.JDOMException; -import org.restlet.representation.Representation; import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import caosdb.server.database.misc.TransactionBenchmark; import caosdb.server.utils.FlagInfo; import caosdb.server.utils.Info; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.restlet.representation.Representation; /** This class represents the information retrieved by /Info requests (only GET) to CaosDB. */ -public class InfoResource extends XMLServerResource { +public class InfoResource extends XMLServerResource { /** * The response to the HTTP GET request is generated here. diff --git a/src/main/java/caosdb/server/resource/JdomRepresentation.java b/src/main/java/caosdb/server/resource/JdomRepresentation.java index 984bcc71..1eef69e6 100644 --- a/src/main/java/caosdb/server/resource/JdomRepresentation.java +++ b/src/main/java/caosdb/server/resource/JdomRepresentation.java @@ -66,8 +66,6 @@ public class JdomRepresentation extends WriterRepresentation { this.document = document; } - - @Override public void write(final Writer writer) throws IOException { if (this.document != null && this.document.hasRootElement()) { diff --git a/src/main/java/caosdb/server/resource/LogoutResource.java b/src/main/java/caosdb/server/resource/LogoutResource.java index 6c734d45..266d48a0 100644 --- a/src/main/java/caosdb/server/resource/LogoutResource.java +++ b/src/main/java/caosdb/server/resource/LogoutResource.java @@ -22,14 +22,14 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import org.restlet.representation.Representation; -import caosdb.server.CaosDBException; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -public class LogoutResource extends XMLServerResource { +public class LogoutResource extends XMLServerResource { @Override protected Representation httpGetInChildClass() diff --git a/src/main/java/caosdb/server/resource/PermissionRulesResource.java b/src/main/java/caosdb/server/resource/PermissionRulesResource.java index 98841db6..9a4a32c5 100644 --- a/src/main/java/caosdb/server/resource/PermissionRulesResource.java +++ b/src/main/java/caosdb/server/resource/PermissionRulesResource.java @@ -22,6 +22,14 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.accessControl.ACMPermissions; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.entity.Message; +import caosdb.server.permissions.PermissionRule; +import caosdb.server.transaction.RetrievePermissionRulesTransaction; +import caosdb.server.transaction.UpdatePermissionRulesTransaction; +import caosdb.server.utils.ServerMessages; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; @@ -31,16 +39,8 @@ import org.jdom2.Element; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; -import caosdb.server.CaosDBException; -import caosdb.server.accessControl.ACMPermissions; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.entity.Message; -import caosdb.server.permissions.PermissionRule; -import caosdb.server.transaction.RetrievePermissionRulesTransaction; -import caosdb.server.transaction.UpdatePermissionRulesTransaction; -import caosdb.server.utils.ServerMessages; -public class PermissionRulesResource extends XMLServerResource { +public class PermissionRulesResource extends XMLServerResource { @Override protected Representation httpGetInChildClass() diff --git a/src/main/java/caosdb/server/resource/RolesResource.java b/src/main/java/caosdb/server/resource/RolesResource.java index 09fb48da..d6415eff 100644 --- a/src/main/java/caosdb/server/resource/RolesResource.java +++ b/src/main/java/caosdb/server/resource/RolesResource.java @@ -22,16 +22,6 @@ */ package caosdb.server.resource; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.sql.SQLException; -import org.jdom2.Document; -import org.jdom2.Element; -import org.jdom2.JDOMException; -import org.restlet.data.Form; -import org.restlet.data.Status; -import org.restlet.representation.Representation; -import org.restlet.representation.StringRepresentation; import caosdb.server.CaosDBException; import caosdb.server.accessControl.ACMPermissions; import caosdb.server.accessControl.Role; @@ -42,8 +32,18 @@ import caosdb.server.transaction.InsertRoleTransaction; import caosdb.server.transaction.RetrieveRoleTransaction; import caosdb.server.transaction.UpdateRoleTransaction; import caosdb.server.utils.ServerMessages; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.restlet.data.Form; +import org.restlet.data.Status; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; -public class RolesResource extends XMLServerResource { +public class RolesResource extends XMLServerResource { @Override protected Representation httpGetInChildClass() @@ -52,21 +52,21 @@ public class RolesResource extends XMLServerResource { final Element root = generateRootElement(); final Document document = new Document(); - final String name = getSpecifier(); - if (name != null) { - getUser().checkPermission(ACMPermissions.PERMISSION_RETRIEVE_ROLE_DESCRIPTION(name)); - final RetrieveRoleTransaction t = new RetrieveRoleTransaction(name); - try { - t.execute(); - root.addContent(t.getRole().toElement()); - } catch (final Message m) { - if (m == ServerMessages.ROLE_DOES_NOT_EXIST) { - return error(m, Status.CLIENT_ERROR_NOT_FOUND); - } else { - throw m; - } + final String name = getSpecifier(); + if (name != null) { + getUser().checkPermission(ACMPermissions.PERMISSION_RETRIEVE_ROLE_DESCRIPTION(name)); + final RetrieveRoleTransaction t = new RetrieveRoleTransaction(name); + try { + t.execute(); + root.addContent(t.getRole().toElement()); + } catch (final Message m) { + if (m == ServerMessages.ROLE_DOES_NOT_EXIST) { + return error(m, Status.CLIENT_ERROR_NOT_FOUND); + } else { + throw m; } } + } document.setRootElement(root); return ok(document); @@ -76,19 +76,19 @@ public class RolesResource extends XMLServerResource { protected Representation httpDeleteInChildClass() throws ConnectionException, SQLException, CaosDBException, IOException, NoSuchAlgorithmException, Exception { - final String name = getSpecifier(); - if (name != null) { - final DeleteRoleTransaction t = new DeleteRoleTransaction(name); - try { - t.execute(); - } catch (final Message m) { - if (m == ServerMessages.ROLE_DOES_NOT_EXIST) { - return error(m, Status.CLIENT_ERROR_NOT_FOUND); - } else { - throw m; - } + final String name = getSpecifier(); + if (name != null) { + final DeleteRoleTransaction t = new DeleteRoleTransaction(name); + try { + t.execute(); + } catch (final Message m) { + if (m == ServerMessages.ROLE_DOES_NOT_EXIST) { + return error(m, Status.CLIENT_ERROR_NOT_FOUND); + } else { + throw m; } } + } return new StringRepresentation("ok"); } diff --git a/src/main/java/caosdb/server/resource/ScriptingResource.java b/src/main/java/caosdb/server/resource/ScriptingResource.java index 45e13f2b..e2db54db 100644 --- a/src/main/java/caosdb/server/resource/ScriptingResource.java +++ b/src/main/java/caosdb/server/resource/ScriptingResource.java @@ -24,6 +24,18 @@ package caosdb.server.resource; +import caosdb.server.FileSystem; +import caosdb.server.accessControl.Principal; +import caosdb.server.accessControl.SessionToken; +import caosdb.server.accessControl.UserSources; +import caosdb.server.entity.FileProperties; +import caosdb.server.entity.Message; +import caosdb.server.scripting.CallerSerializer; +import caosdb.server.scripting.ServerSideScriptingCaller; +import caosdb.server.utils.Serializer; +import caosdb.server.utils.ServerMessages; +import caosdb.server.utils.Utils; +import com.ibm.icu.text.Collator; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; @@ -45,20 +57,8 @@ import org.restlet.data.Status; import org.restlet.engine.header.ContentType; import org.restlet.ext.fileupload.RestletFileUpload; import org.restlet.representation.Representation; -import com.ibm.icu.text.Collator; -import caosdb.server.FileSystem; -import caosdb.server.accessControl.Principal; -import caosdb.server.accessControl.SessionToken; -import caosdb.server.accessControl.UserSources; -import caosdb.server.entity.FileProperties; -import caosdb.server.entity.Message; -import caosdb.server.scripting.CallerSerializer; -import caosdb.server.scripting.ServerSideScriptingCaller; -import caosdb.server.utils.Serializer; -import caosdb.server.utils.ServerMessages; -import caosdb.server.utils.Utils; -public class ScriptingResource extends XMLServerResource { +public class ScriptingResource extends XMLServerResource { private ServerSideScriptingCaller caller; private Collection<FileProperties> deleteFiles = new LinkedList<>(); diff --git a/src/main/java/caosdb/server/resource/ServerLogsResource.java b/src/main/java/caosdb/server/resource/ServerLogsResource.java index b9e72b63..f97aa4af 100644 --- a/src/main/java/caosdb/server/resource/ServerLogsResource.java +++ b/src/main/java/caosdb/server/resource/ServerLogsResource.java @@ -22,6 +22,9 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.transaction.RetrieveLogRecordTransaction; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; @@ -33,11 +36,8 @@ import org.restlet.data.Form; import org.restlet.data.MediaType; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; -import caosdb.server.CaosDBException; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.transaction.RetrieveLogRecordTransaction; -public class ServerLogsResource extends XMLServerResource { +public class ServerLogsResource extends XMLServerResource { @Override protected Representation httpGetInChildClass() diff --git a/src/main/java/caosdb/server/resource/ServerPropertiesResource.java b/src/main/java/caosdb/server/resource/ServerPropertiesResource.java index d69a0668..71644c20 100644 --- a/src/main/java/caosdb/server/resource/ServerPropertiesResource.java +++ b/src/main/java/caosdb/server/resource/ServerPropertiesResource.java @@ -1,14 +1,14 @@ package caosdb.server.resource; +import caosdb.server.CaosDBServer; +import caosdb.server.ServerPropertiesSerializer; +import caosdb.server.accessControl.ACMPermissions; import org.restlet.data.Form; import org.restlet.data.Parameter; import org.restlet.data.Status; import org.restlet.representation.Representation; -import caosdb.server.CaosDBServer; -import caosdb.server.ServerPropertiesSerializer; -import caosdb.server.accessControl.ACMPermissions; -public class ServerPropertiesResource extends XMLServerResource { +public class ServerPropertiesResource extends XMLServerResource { @Override protected void doInit() { diff --git a/src/main/java/caosdb/server/resource/SharedFileResource.java b/src/main/java/caosdb/server/resource/SharedFileResource.java index bded689b..b10f072b 100644 --- a/src/main/java/caosdb/server/resource/SharedFileResource.java +++ b/src/main/java/caosdb/server/resource/SharedFileResource.java @@ -25,6 +25,11 @@ package caosdb.server.resource; import static java.net.URLDecoder.decode; + +import caosdb.server.FileSystem; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.utils.FileUtils; +import caosdb.server.utils.ServerMessages; import java.io.File; import java.io.IOException; import org.jdom2.JDOMException; @@ -33,17 +38,13 @@ import org.restlet.data.MediaType; import org.restlet.data.Status; import org.restlet.representation.FileRepresentation; import org.restlet.representation.Representation; -import caosdb.server.FileSystem; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.utils.FileUtils; -import caosdb.server.utils.ServerMessages; /** * Download temporary files via GET method only. * * @author Daniel Hornung */ -public class SharedFileResource extends XMLServerResource { +public class SharedFileResource extends XMLServerResource { /** * Download a File from the tempfiles folder. Only one File per Request. diff --git a/src/main/java/caosdb/server/resource/ThumbnailsResource.java b/src/main/java/caosdb/server/resource/ThumbnailsResource.java index cde3b9f0..5694868e 100644 --- a/src/main/java/caosdb/server/resource/ThumbnailsResource.java +++ b/src/main/java/caosdb/server/resource/ThumbnailsResource.java @@ -23,6 +23,9 @@ package caosdb.server.resource; import static caosdb.server.FileSystem.getFromFileSystem; + +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.utils.ServerMessages; import java.io.File; import java.io.IOException; import org.jdom2.JDOMException; @@ -31,10 +34,8 @@ 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.utils.ServerMessages; -public class ThumbnailsResource extends XMLServerResource { +public class ThumbnailsResource extends XMLServerResource { /** * Download a File from the CaosDBFileSystem. Only one File per Request. diff --git a/src/main/java/caosdb/server/resource/UserResource.java b/src/main/java/caosdb/server/resource/UserResource.java index 51bf19b4..60e2293c 100644 --- a/src/main/java/caosdb/server/resource/UserResource.java +++ b/src/main/java/caosdb/server/resource/UserResource.java @@ -22,15 +22,6 @@ */ package caosdb.server.resource; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.sql.SQLException; -import org.jdom2.Document; -import org.jdom2.Element; -import org.jdom2.JDOMException; -import org.restlet.data.Form; -import org.restlet.data.Status; -import org.restlet.representation.Representation; import caosdb.server.CaosDBException; import caosdb.server.CaosDBServer; import caosdb.server.ServerProperties; @@ -44,13 +35,22 @@ import caosdb.server.transaction.InsertUserTransaction; import caosdb.server.transaction.RetrieveUserTransaction; import caosdb.server.transaction.UpdateUserTransaction; import caosdb.server.utils.ServerMessages; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.restlet.data.Form; +import org.restlet.data.Status; +import org.restlet.representation.Representation; /** * This class handles requests for Users. * * @author Timm Fitschen */ -public class UserResource extends XMLServerResource { +public class UserResource extends XMLServerResource { @Override protected Representation httpGetInChildClass() @@ -60,25 +60,25 @@ public class UserResource extends XMLServerResource { final Document doc = new Document(); final Element rootElem = generateRootElement(); - try { - final String username = getSpecifier(); - final String realm = - (getRequestAttributes().containsKey("realm") - ? (String) getRequestAttributes().get("realm") - : UserSources.guessRealm(username, UserSources.getDefaultRealm())); + try { + final String username = getSpecifier(); + final String realm = + (getRequestAttributes().containsKey("realm") + ? (String) getRequestAttributes().get("realm") + : UserSources.guessRealm(username, UserSources.getDefaultRealm())); - getUser().checkPermission(ACMPermissions.PERMISSION_RETRIEVE_USER_INFO(realm, username)); + getUser().checkPermission(ACMPermissions.PERMISSION_RETRIEVE_USER_INFO(realm, username)); - final RetrieveUserTransaction t = new RetrieveUserTransaction(realm, username); - t.execute(); + final RetrieveUserTransaction t = new RetrieveUserTransaction(realm, username); + t.execute(); - rootElem.addContent(t.getUserElement()); - } catch (final Message m) { - if (m == ServerMessages.ACCOUNT_DOES_NOT_EXIST) { - return error(ServerMessages.ACCOUNT_DOES_NOT_EXIST, Status.CLIENT_ERROR_NOT_FOUND); - } - throw m; + rootElem.addContent(t.getUserElement()); + } catch (final Message m) { + if (m == ServerMessages.ACCOUNT_DOES_NOT_EXIST) { + return error(ServerMessages.ACCOUNT_DOES_NOT_EXIST, Status.CLIENT_ERROR_NOT_FOUND); } + throw m; + } doc.setRootElement(rootElem); return ok(doc); diff --git a/src/main/java/caosdb/server/resource/UserRolesResource.java b/src/main/java/caosdb/server/resource/UserRolesResource.java index 7a85e4ad..8de1a952 100644 --- a/src/main/java/caosdb/server/resource/UserRolesResource.java +++ b/src/main/java/caosdb/server/resource/UserRolesResource.java @@ -22,6 +22,14 @@ */ package caosdb.server.resource; +import caosdb.server.CaosDBException; +import caosdb.server.accessControl.ACMPermissions; +import caosdb.server.accessControl.UserSources; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.entity.Message; +import caosdb.server.transaction.RetrieveUserRolesTransaction; +import caosdb.server.transaction.UpdateUserRolesTransaction; +import caosdb.server.utils.ServerMessages; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; @@ -32,14 +40,6 @@ import org.jdom2.Element; import org.jdom2.JDOMException; import org.restlet.data.Status; import org.restlet.representation.Representation; -import caosdb.server.CaosDBException; -import caosdb.server.accessControl.ACMPermissions; -import caosdb.server.accessControl.UserSources; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.entity.Message; -import caosdb.server.transaction.RetrieveUserRolesTransaction; -import caosdb.server.transaction.UpdateUserRolesTransaction; -import caosdb.server.utils.ServerMessages; public class UserRolesResource extends XMLServerResource { diff --git a/src/main/java/caosdb/server/resource/XMLServerResource.java b/src/main/java/caosdb/server/resource/XMLServerResource.java index 05b3e247..2650660a 100644 --- a/src/main/java/caosdb/server/resource/XMLServerResource.java +++ b/src/main/java/caosdb/server/resource/XMLServerResource.java @@ -19,6 +19,14 @@ */ 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; @@ -38,19 +46,11 @@ 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 * are hard-coded to deliver XML representations. - * + * * @author Timm Fitschen */ @Deprecated @@ -72,16 +72,15 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { /** * Creates the XML root. * - * <p> - * The XML root node contains: + * <p>The XML root node contains: * * <p> * * <ul> - * <li>User info as per addUserInfo - * <li>The sRID (server-side request ID) - * <li>A timestamp - * <li>The URI to this resource. + * <li>User info as per addUserInfo + * <li>The sRID (server-side request ID) + * <li>A timestamp + * <li>The URI to this resource. */ protected Element generateRootElement() { final Element retRoot = new Element("Response"); @@ -125,8 +124,7 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { */ private void addRoles(Element userInfo, Subject user) { Collection<String> roles = UserSources.resolve(user.getPrincipals()); - if (roles == null) - return; + if (roles == null) return; Element rs = new Element("Roles"); for (String role : roles) { Element r = new Element("Role"); @@ -155,8 +153,9 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } } - protected abstract Representation httpGetInChildClass() throws ConnectionException, IOException, - SQLException, CaosDBException, NoSuchAlgorithmException, Exception; + protected abstract Representation httpGetInChildClass() + throws ConnectionException, IOException, SQLException, CaosDBException, + NoSuchAlgorithmException, Exception; @Post public Representation httpPost(final Representation entity) { @@ -187,8 +186,9 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { return null; } - protected Representation httpDeleteInChildClass() throws ConnectionException, SQLException, - CaosDBException, IOException, NoSuchAlgorithmException, Exception { + protected Representation httpDeleteInChildClass() + throws ConnectionException, SQLException, CaosDBException, IOException, + NoSuchAlgorithmException, Exception { getResponse().setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED); return null; } @@ -204,7 +204,7 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { protected Representation httpPostInChildClass(final Representation entity) throws ConnectionException, SQLException, CaosDBException, IOException, - NoSuchAlgorithmException, xmlNotWellFormedException, JDOMException, Exception { + NoSuchAlgorithmException, xmlNotWellFormedException, JDOMException, Exception { getResponse().setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED); return null; } @@ -237,8 +237,8 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } /** - * Return a Representation containing the error message and set the {@link Response}'s - * {@link Status}. + * Return a Representation containing the error message and set the {@link Response}'s {@link + * Status}. * * @param m - the error message. * @param status - the response status @@ -266,8 +266,8 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } /** - * Return a Representation containing the warning message but leave the {@link Response}'s - * {@link Status} where it is - which is usually 200 - OK when this method happens to be called. + * Return a Representation containing the warning message but leave the {@link Response}'s {@link + * Status} where it is - which is usually 200 - OK when this method happens to be called. * * @param m - the warning message. * @return A Representation of the warning. @@ -325,5 +325,4 @@ public abstract class XMLServerResource extends AbstractCaosDBServerResource { } return root; } - } diff --git a/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java b/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java index d1f7a590..a1f07281 100644 --- a/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java +++ b/src/main/java/caosdb/server/resource/transaction/AbstractEntityResource.java @@ -1,9 +1,16 @@ package caosdb.server.resource.transaction; - - import static caosdb.server.utils.Utils.isNonNullInteger; import static java.net.URLDecoder.decode; + +import caosdb.server.CaosDBException; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; +import caosdb.server.entity.container.RetrieveContainer; +import caosdb.server.entity.container.TransactionContainer; +import caosdb.server.resource.AbstractCaosDBServerResource; +import caosdb.server.resource.transaction.handlers.RequestHandler; +import caosdb.server.resource.transaction.handlers.SimpleGetRequestHandler; +import caosdb.server.transaction.Retrieve; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; @@ -14,21 +21,12 @@ import java.util.Map; import org.restlet.data.Form; import org.restlet.data.Parameter; import org.restlet.resource.Get; -import caosdb.server.CaosDBException; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; -import caosdb.server.entity.container.RetrieveContainer; -import caosdb.server.entity.container.TransactionContainer; -import caosdb.server.resource.AbstractCaosDBServerResource; -import caosdb.server.resource.transaction.handlers.RequestHandler; -import caosdb.server.resource.transaction.handlers.SimpleGetRequestHandler; -import caosdb.server.transaction.Retrieve; public abstract class AbstractEntityResource extends AbstractCaosDBServerResource { - + private ArrayList<Integer> requestedIDs = new ArrayList<Integer>(); private ArrayList<String> requestedNames = new ArrayList<String>(); - public final ArrayList<Integer> getRequestedIDs() { return this.requestedIDs; } @@ -36,41 +34,40 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc public final ArrayList<String> getRequestedNames() { return this.requestedNames; } - + protected RequestHandler<RetrieveContainer> getGetRequestHandler() { return new SimpleGetRequestHandler(); } @Get - public final TransactionContainer httpGetInChildClass() throws ConnectionException, IOException, - SQLException, CaosDBException, NoSuchAlgorithmException, Exception { - - final long t1 = System.currentTimeMillis(); - - final RetrieveContainer entityContainer = - new RetrieveContainer(getUser(), getTimestamp(), getSRID(), getFlags()); - - getGetRequestHandler().handle(this, entityContainer); - - final Retrieve retrieve = new Retrieve(entityContainer); - retrieve.execute(); - - final long t2 = System.currentTimeMillis(); - entityContainer - .getTransactionBenchmark() - .addMeasurement(getClass().getSimpleName() + ".httpGetInChildClass", t2 - t1); - return entityContainer; - } + public final TransactionContainer httpGetInChildClass() + throws ConnectionException, IOException, SQLException, CaosDBException, + NoSuchAlgorithmException, Exception { + + final long t1 = System.currentTimeMillis(); + + final RetrieveContainer entityContainer = + new RetrieveContainer(getUser(), getTimestamp(), getSRID(), getFlags()); + + getGetRequestHandler().handle(this, entityContainer); + + final Retrieve retrieve = new Retrieve(entityContainer); + retrieve.execute(); + + final long t2 = System.currentTimeMillis(); + entityContainer + .getTransactionBenchmark() + .addMeasurement(getClass().getSimpleName() + ".httpGetInChildClass", t2 - t1); + return entityContainer; + } public Map<String, String> getFlags() { final Form queryAsForm = getRequest().getResourceRef().getQueryAsForm(true); final Map<String, String> result = new HashMap<>(); if (queryAsForm != null) { for (final Parameter p : queryAsForm) { - result - .put( - p.getName(), - (p.getValue() == null || p.getValue().isEmpty() ? null : p.getValue())); + result.put( + p.getName(), (p.getValue() == null || p.getValue().isEmpty() ? null : p.getValue())); } } return result; @@ -79,8 +76,7 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc @Override public void doInit() { super.doInit(); - - + String specifier = (String) getRequestAttributes().get("specifier"); if (specifier != null && !specifier.equals("")) { try { @@ -90,7 +86,7 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc e.printStackTrace(); System.exit(1); } - + String[] requestedItems = specifier.split("&"); for (final String requestedItem : requestedItems) { if (isNonNullInteger(requestedItem)) { @@ -109,5 +105,4 @@ public abstract class AbstractEntityResource extends AbstractCaosDBServerResourc } } } - } diff --git a/src/main/java/caosdb/server/resource/transaction/EntityResource.java b/src/main/java/caosdb/server/resource/transaction/EntityResource.java index e31b748d..8d04e649 100644 --- a/src/main/java/caosdb/server/resource/transaction/EntityResource.java +++ b/src/main/java/caosdb/server/resource/transaction/EntityResource.java @@ -22,8 +22,6 @@ */ package caosdb.server.resource.transaction; -import org.restlet.resource.Post; -import org.restlet.resource.Put; import caosdb.server.entity.container.DeleteContainer; import caosdb.server.entity.container.TransactionContainer; import caosdb.server.resource.transaction.handlers.IDHandler; @@ -31,15 +29,15 @@ import caosdb.server.resource.transaction.handlers.RequestHandler; import caosdb.server.transaction.Delete; import caosdb.server.transaction.Insert; import caosdb.server.transaction.Update; +import org.restlet.resource.Post; +import org.restlet.resource.Put; public class EntityResource extends AbstractEntityResource { - protected RequestHandler<DeleteContainer> getDeleteRequestHandler() { return new IDHandler<DeleteContainer>(); } - @org.restlet.resource.Delete public final TransactionContainer httpDeleteInChildClass() throws Exception { @@ -55,8 +53,8 @@ public class EntityResource extends AbstractEntityResource { } @Post - public final TransactionContainer httpPostInChildClass(final TransactionContainer entityContainer) throws Exception { - + public final TransactionContainer httpPostInChildClass(final TransactionContainer entityContainer) + throws Exception { entityContainer.setFlags(getFlags()); final Insert insert = new Insert(entityContainer); @@ -66,14 +64,12 @@ public class EntityResource extends AbstractEntityResource { } @Put - public final TransactionContainer httpPutInChildClass(final TransactionContainer entityContainer) throws Exception - { - + public final TransactionContainer httpPutInChildClass(final TransactionContainer entityContainer) + throws Exception { entityContainer.setFlags(getFlags()); final Update update = new Update(entityContainer); - update.execute(); - return entityContainer; - + update.execute(); + return entityContainer; } } diff --git a/src/main/java/caosdb/server/resource/transaction/handlers/RetrieveGlobalEntityPermissionsHandler.java b/src/main/java/caosdb/server/resource/transaction/handlers/RetrieveGlobalEntityPermissionsHandler.java index f6f0553d..e7b92f91 100644 --- a/src/main/java/caosdb/server/resource/transaction/handlers/RetrieveGlobalEntityPermissionsHandler.java +++ b/src/main/java/caosdb/server/resource/transaction/handlers/RetrieveGlobalEntityPermissionsHandler.java @@ -29,7 +29,8 @@ import caosdb.server.resource.transaction.AbstractEntityResource; public class RetrieveGlobalEntityPermissionsHandler extends SimpleGetRequestHandler { @Override - public void handle(final AbstractEntityResource t, final RetrieveContainer container) throws Exception { + public void handle(final AbstractEntityResource t, final RetrieveContainer container) + throws Exception { super.handle(t, container); container.addMessage(EntityPermission.getAllEntityPermissions()); } diff --git a/src/main/java/caosdb/server/resource/transaction/handlers/SimpleGetRequestHandler.java b/src/main/java/caosdb/server/resource/transaction/handlers/SimpleGetRequestHandler.java index 3e712885..e8778396 100644 --- a/src/main/java/caosdb/server/resource/transaction/handlers/SimpleGetRequestHandler.java +++ b/src/main/java/caosdb/server/resource/transaction/handlers/SimpleGetRequestHandler.java @@ -28,7 +28,8 @@ import caosdb.server.resource.transaction.AbstractEntityResource; public class SimpleGetRequestHandler extends IDHandler<RetrieveContainer> { @Override - public void handle(final AbstractEntityResource t, final RetrieveContainer container) throws Exception { + public void handle(final AbstractEntityResource t, final RetrieveContainer container) + throws Exception { super.handle(t, container); for (final String name : t.getRequestedNames()) { container.add(name); diff --git a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java index 01afe0fe..26cab30e 100644 --- a/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java +++ b/src/main/java/caosdb/server/transaction/FileStorageConsistencyCheck.java @@ -22,13 +22,6 @@ */ package caosdb.server.transaction; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; -import java.util.TimeZone; -import org.jdom2.Element; import caosdb.datetime.UTCDateTime; import caosdb.server.database.DatabaseMonitor; import caosdb.server.database.access.Access; @@ -42,6 +35,13 @@ import caosdb.server.database.proto.SparseEntity; import caosdb.server.entity.Message; import caosdb.server.entity.xml.ToElementable; import caosdb.server.utils.SHA512; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.TimeZone; +import org.jdom2.Element; public class FileStorageConsistencyCheck extends Thread implements ToElementable, TransactionInterface { @@ -91,10 +91,14 @@ public class FileStorageConsistencyCheck extends Thread final GetFileRecordByPath t = execute(new GetFileRecordByPath(path), this.access); final int result = execute( - new FileConsistencyCheck( - path, t.getSize(), t.getHash(), t.getLastConsistencyCheck(), new SHA512()), - this.access) - .getResult(); + new FileConsistencyCheck( + path, + t.getSize(), + t.getHash(), + t.getLastConsistencyCheck(), + new SHA512()), + this.access) + .getResult(); if (result != FileConsistencyCheck.OK) { this.results.put(path, result); @@ -105,7 +109,6 @@ public class FileStorageConsistencyCheck extends Thread this.results.put(path, FileConsistencyCheck.UNKNOWN_FILE); continue; } - } // test all remaining file records diff --git a/src/main/java/caosdb/server/transaction/Insert.java b/src/main/java/caosdb/server/transaction/Insert.java index 36ebf012..760485d1 100644 --- a/src/main/java/caosdb/server/transaction/Insert.java +++ b/src/main/java/caosdb/server/transaction/Insert.java @@ -22,7 +22,6 @@ */ package caosdb.server.transaction; -import org.apache.shiro.SecurityUtils; import caosdb.server.database.access.Access; import caosdb.server.database.backend.transaction.InsertEntity; import caosdb.server.entity.EntityInterface; @@ -31,6 +30,7 @@ import caosdb.server.entity.container.TransactionContainer; import caosdb.server.permissions.EntityACL; import caosdb.server.utils.EntityStatus; import caosdb.server.utils.ServerMessages; +import org.apache.shiro.SecurityUtils; public class Insert extends WriteTransaction<TransactionContainer> { diff --git a/src/main/java/caosdb/server/transaction/Update.java b/src/main/java/caosdb/server/transaction/Update.java index 0fc0e03c..83ba07ff 100644 --- a/src/main/java/caosdb/server/transaction/Update.java +++ b/src/main/java/caosdb/server/transaction/Update.java @@ -22,12 +22,6 @@ */ package caosdb.server.transaction; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.util.HashSet; -import java.util.Set; -import org.apache.shiro.authz.AuthorizationException; -import com.google.common.base.Objects; import caosdb.server.CaosDBException; import caosdb.server.database.access.Access; import caosdb.server.database.backend.transaction.RetrieveFullEntity; @@ -43,6 +37,12 @@ import caosdb.server.permissions.EntityPermission; import caosdb.server.permissions.Permission; import caosdb.server.utils.EntityStatus; import caosdb.server.utils.ServerMessages; +import com.google.common.base.Objects; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.util.HashSet; +import java.util.Set; +import org.apache.shiro.authz.AuthorizationException; public class Update extends WriteTransaction<TransactionContainer> { @@ -59,7 +59,7 @@ public class Update extends WriteTransaction<TransactionContainer> { final TransactionContainer oldContainer = new TransactionContainer(); for (final Entity entity : getContainer()) { entity.setSkip(EntityStatus.QUALIFIED); - + // entity has no id -> it cannot be updated. if (!entity.hasId()) { entity.addError(ServerMessages.ENTITY_HAS_NO_ID); diff --git a/src/test/java/caosdb/server/permissions/EntityACLTest.java b/src/test/java/caosdb/server/permissions/EntityACLTest.java index 53b15fe8..8d69d9b3 100644 --- a/src/test/java/caosdb/server/permissions/EntityACLTest.java +++ b/src/test/java/caosdb/server/permissions/EntityACLTest.java @@ -23,6 +23,10 @@ package caosdb.server.permissions; import static org.junit.Assert.assertNotNull; + +import caosdb.server.CaosDBServer; +import caosdb.server.converter.xml.XMLParser; +import caosdb.server.utils.Utils; import java.io.IOException; import java.util.BitSet; import java.util.LinkedList; @@ -31,9 +35,6 @@ import org.jdom2.JDOMException; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; -import caosdb.server.CaosDBServer; -import caosdb.server.converter.xml.XMLParser; -import caosdb.server.utils.Utils; public class EntityACLTest { diff --git a/src/test/java/caosdb/server/resource/TestAbstractCaosDBServerResource.java b/src/test/java/caosdb/server/resource/TestAbstractCaosDBServerResource.java index 1ae724bb..5529449b 100644 --- a/src/test/java/caosdb/server/resource/TestAbstractCaosDBServerResource.java +++ b/src/test/java/caosdb/server/resource/TestAbstractCaosDBServerResource.java @@ -2,27 +2,30 @@ package caosdb.server.resource; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; + +import caosdb.server.CaosDBException; +import caosdb.server.CaosDBServer; +import caosdb.server.ServerProperties; +import caosdb.server.accessControl.AnonymousAuthenticationToken; +import caosdb.server.accessControl.AnonymousRealm; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; +import java.util.Date; +import org.apache.shiro.SecurityUtils; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.subject.Subject; -import org.apache.shiro.subject.support.DelegatingSubject; import org.jdom2.Element; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; +import org.restlet.Request; import org.restlet.data.Reference; import org.restlet.representation.Representation; -import caosdb.server.CaosDBException; -import caosdb.server.CaosDBServer; -import caosdb.server.ServerProperties; -import caosdb.server.accessControl.AnonymousAuthenticationToken; -import caosdb.server.accessControl.AnonymousRealm; -import caosdb.server.database.backend.implementation.MySQL.ConnectionException; public class TestAbstractCaosDBServerResource { @@ -35,10 +38,19 @@ public class TestAbstractCaosDBServerResource { @Test public void testReponseRootElement() throws IOException { - final Subject user = new DelegatingSubject(new DefaultSecurityManager(new AnonymousRealm())); + SecurityUtils.setSecurityManager(new DefaultSecurityManager(new AnonymousRealm())); + Subject user = SecurityUtils.getSubject(); user.login(AnonymousAuthenticationToken.getInstance()); XMLServerResource s = - new XMLServerResource() { + new XMLServerResource() { + + private Request requ = new Request(); + + @Override + protected void doInit() { + getRequest().getAttributes().put("SRID", "TEST-SRID"); + getRequest().setDate(new Date(0)); + } @Override protected Representation httpGetInChildClass() @@ -48,41 +60,24 @@ public class TestAbstractCaosDBServerResource { return null; } - @Override - public String getSRID() { - return "TEST-SRID"; - } - - @Override - public String getCRID() { - return "TEST-CRID"; - } - - @Override - public Long getTimestamp() { - return 0L; - } - @Override public Reference getRootRef() { return new Reference("https://example.com/root/"); } @Override - public Subject getUser() { - // TODO Auto-generated method stub - return user; + public Request getRequest() { + return requ; } }; provideUserSourcesFile(); + s.doInit(); Element response = s.generateRootElement(); assertNotNull(response); assertEquals("TEST-SRID", response.getAttribute("srid").getValue()); - assertEquals("TEST-CRID", response.getAttribute("crid").getValue()); assertEquals("0", response.getAttribute("timestamp").getValue()); assertEquals("https://example.com/root/", response.getAttributeValue("baseuri")); - Element userInfo = response.getChild("UserInfo"); - assertNotNull(userInfo); + assertNotNull(response.getChild("UserInfo")); } /** Creates a dummy usersources.ini and injects it into the server properties. */ diff --git a/src/test/java/caosdb/server/resource/TestSharedFileResource.java b/src/test/java/caosdb/server/resource/TestSharedFileResource.java index 41e134d2..ba54c859 100644 --- a/src/test/java/caosdb/server/resource/TestSharedFileResource.java +++ b/src/test/java/caosdb/server/resource/TestSharedFileResource.java @@ -1,21 +1,18 @@ /* - * ** header v3.0 - * This file is a part of the CaosDB Project. + * ** header v3.0 This file is a part of the CaosDB Project. * * Copyright (C) 2019 IndiScale GmbH * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify it under the terms of the + * GNU Affero General Public License as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. * - * This program 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 Affero General Public License for more details. + * This program 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 + * Affero General Public License for more details. * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. + * You should have received a copy of the GNU Affero General Public License along with this program. + * If not, see <https://www.gnu.org/licenses/>. * * ** end header */ @@ -26,17 +23,20 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import caosdb.server.CaosDBException; import caosdb.server.CaosDBServer; import caosdb.server.FileSystem; import caosdb.server.ServerProperties; import caosdb.server.accessControl.AnonymousAuthenticationToken; import caosdb.server.accessControl.AnonymousRealm; +import caosdb.server.database.backend.implementation.MySQL.ConnectionException; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; +import java.security.NoSuchAlgorithmException; +import java.sql.SQLException; import java.util.concurrent.ConcurrentMap; import net.jcip.annotations.NotThreadSafe; import org.apache.shiro.mgt.DefaultSecurityManager; @@ -53,7 +53,6 @@ import org.restlet.data.Disposition; import org.restlet.data.MediaType; import org.restlet.data.Method; import org.restlet.data.Reference; -import org.restlet.data.Status; import org.restlet.representation.FileRepresentation; import org.restlet.representation.Representation; import org.restlet.representation.StringRepresentation; @@ -125,27 +124,12 @@ public class TestSharedFileResource { user.login(AnonymousAuthenticationToken.getInstance()); SharedFileResource resource = new SharedFileResource() { - // @Override - // protected Representation httpGetInChildClass() - // throws ConnectionException, IOException, SQLException, CaosDBException, - // NoSuchAlgorithmException, Exception { - // // TODO Auto-generated method stub - // return super.httpGetInChildClass(); - // } - - @Override - public String getSRID() { - return "TEST-SRID"; - } - @Override - public String getCRID() { - return "TEST-CRID"; - } - - @Override - public Long getTimestamp() { - return 0L; + protected Representation httpGetInChildClass() + throws ConnectionException, IOException, SQLException, CaosDBException, + NoSuchAlgorithmException, Exception { + // TODO Auto-generated method stub + return super.httpGetInChildClass(); } @Override @@ -157,35 +141,20 @@ public class TestSharedFileResource { public Reference getReference() { return new Reference("https://example.com/"); } - - @Override - public Subject getUser() { - // TODO Auto-generated method stub - return user; - } }; Representation entity = new StringRepresentation("lalala"); entity.setMediaType(MediaType.TEXT_ALL); Request req = new Request(Method.GET, "../Shared/", entity); + req.setHostRef("https://example.com"); ConcurrentMap<String, Object> attrs = req.getAttributes(); attrs.put("path", legalFileStringComplete); req.setAttributes(attrs); resource.init(null, req, new Response(null)); Representation repr = resource.handle(); Response resp = resource.getResponse(); - // No unit testing framework yet. - if (false) { - assertEquals(Status.SUCCESS_OK, resp.getStatus()); - } - FileRepresentation frep; - try { - frep = (FileRepresentation) repr; - } catch (Exception e) { - fail("Rsssource did not produce a FileRepresentation."); - // This line won't be reached, but is necessary for the compiler. - frep = (FileRepresentation) repr; - } + assertTrue(resp.getStatus().isSuccess()); + FileRepresentation frep = (FileRepresentation) repr; assertTrue(frep.getFile().toString().endsWith(legalFileStringComplete)); assertEquals(Disposition.TYPE_ATTACHMENT, frep.getDisposition().getType()); } -- GitLab