diff --git a/caosdb-proto b/caosdb-proto index 547771c7df79f5b0d6c4d73a3d7e8c9c9e73cb71..c01fd9ff1471adafa707fdb36bdaa49749079fa6 160000 --- a/caosdb-proto +++ b/caosdb-proto @@ -1 +1 @@ -Subproject commit 547771c7df79f5b0d6c4d73a3d7e8c9c9e73cb71 +Subproject commit c01fd9ff1471adafa707fdb36bdaa49749079fa6 diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityProperties.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityProperties.java index 7b02fbf003e49c18bc14a602f7e2f781b495c682..4072c1b2877cd9231424a98948fad32747870537 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityProperties.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteEntityProperties.java @@ -22,13 +22,12 @@ */ package org.caosdb.server.database.backend.transaction; -import static org.caosdb.server.transaction.Transaction.ERROR_INTEGRITY_VIOLATION; - import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.DeleteEntityPropertiesImpl; import org.caosdb.server.database.exceptions.IntegrityException; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.utils.EntityStatus; +import org.caosdb.server.utils.ServerMessages; public class DeleteEntityProperties extends BackendTransaction { @@ -50,7 +49,7 @@ public class DeleteEntityProperties extends BackendTransaction { try { ret.execute(this.entity.getId()); } catch (final IntegrityException exc) { - this.entity.addError(ERROR_INTEGRITY_VIOLATION); + this.entity.addError(ServerMessages.ERROR_INTEGRITY_VIOLATION); throw exc; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteSparseEntity.java index 55989d219ad738d5a866e0ef6f322368c8fc559b..e371cfe1f9caf3d4438e8801d4a6cee1119322f8 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/DeleteSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/DeleteSparseEntity.java @@ -24,13 +24,12 @@ */ package org.caosdb.server.database.backend.transaction; -import static org.caosdb.server.transaction.Transaction.ERROR_INTEGRITY_VIOLATION; - import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.DeleteSparseEntityImpl; import org.caosdb.server.database.exceptions.IntegrityException; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.utils.EntityStatus; +import org.caosdb.server.utils.ServerMessages; public class DeleteSparseEntity extends BackendTransaction { @@ -54,7 +53,7 @@ public class DeleteSparseEntity extends BackendTransaction { ret.execute(this.entity.getId()); } } catch (final IntegrityException exc) { - this.entity.addError(ERROR_INTEGRITY_VIOLATION); + this.entity.addError(ServerMessages.ERROR_INTEGRITY_VIOLATION); throw exc; } } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java index 182874d1f1e30ed8f5249e609dbbc42a724d94af..aa139e7db565ae82073d6983915c0c53e9cd8b51 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertEntityDatatype.java @@ -1,12 +1,11 @@ package org.caosdb.server.database.backend.transaction; -import static org.caosdb.server.transaction.Transaction.ERROR_INTEGRITY_VIOLATION; - import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.InsertEntityDatatypeImpl; import org.caosdb.server.database.exceptions.IntegrityException; import org.caosdb.server.database.proto.SparseEntity; import org.caosdb.server.entity.EntityInterface; +import org.caosdb.server.utils.ServerMessages; public class InsertEntityDatatype extends BackendTransaction { @@ -25,7 +24,7 @@ public class InsertEntityDatatype extends BackendTransaction { try { t.execute(e); } catch (final IntegrityException exc) { - this.entity.addError(ERROR_INTEGRITY_VIOLATION); + this.entity.addError(ServerMessages.ERROR_INTEGRITY_VIOLATION); throw exc; } diff --git a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java index 22720f836e5cbd4912f3aedccd25398e80a19324..213c7529766dcac4cc002f81380bf8d141cd8065 100644 --- a/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java +++ b/src/main/java/org/caosdb/server/database/backend/transaction/InsertSparseEntity.java @@ -22,8 +22,6 @@ */ package org.caosdb.server.database.backend.transaction; -import static org.caosdb.server.transaction.Transaction.ERROR_INTEGRITY_VIOLATION; - import org.caosdb.server.database.BackendTransaction; import org.caosdb.server.database.backend.interfaces.InsertSparseEntityImpl; import org.caosdb.server.database.exceptions.IntegrityException; @@ -31,6 +29,7 @@ import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.proto.SparseEntity; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.Version; +import org.caosdb.server.utils.ServerMessages; import org.caosdb.server.utils.Undoable; public class InsertSparseEntity extends BackendTransaction { @@ -52,7 +51,7 @@ public class InsertSparseEntity extends BackendTransaction { try { t.execute(e); } catch (final IntegrityException exc) { - this.entity.addError(ERROR_INTEGRITY_VIOLATION); + this.entity.addError(ServerMessages.ERROR_INTEGRITY_VIOLATION); throw exc; } diff --git a/src/main/java/org/caosdb/server/datatype/ReferenceDatatype.java b/src/main/java/org/caosdb/server/datatype/ReferenceDatatype.java index 42f60cebc116d23137d359c11015a2978233234e..769d3ebdd109e22dcbc41f2ae7bd478b709f0482 100644 --- a/src/main/java/org/caosdb/server/datatype/ReferenceDatatype.java +++ b/src/main/java/org/caosdb/server/datatype/ReferenceDatatype.java @@ -27,9 +27,6 @@ import org.caosdb.server.entity.Message; @DatatypeDefinition(name = "Reference") public class ReferenceDatatype extends AbstractDatatype { - public static final Message REFERENCE_ID_NOT_PARSABLE = - new Message(217, "The reference is not parsable. It must be an integer."); - @Override public ReferenceValue parseValue(final Object value) throws Message { return ReferenceValue.parseReference(value); diff --git a/src/main/java/org/caosdb/server/entity/Entity.java b/src/main/java/org/caosdb/server/entity/Entity.java index 0a60f9af59f731098a0e194e4848b578094d4e68..76ed7bf1ed2a16dfbade6d6effb162e391ce1c84 100644 --- a/src/main/java/org/caosdb/server/entity/Entity.java +++ b/src/main/java/org/caosdb/server/entity/Entity.java @@ -662,18 +662,6 @@ public class Entity extends AbstractObservable implements EntityInterface { return ret; } - @Override - public final Message getMessage(final String type, final Integer code) { - for (final ToElementable m : this.messages) { - if (m instanceof Message - && ((Message) m).getType().equalsIgnoreCase(type) - && ((Message) m).getCode() == code) { - return (Message) m; - } - } - return null; - } - @Override public final void addMessage(final ToElementable m) { this.messages.add(m); @@ -691,7 +679,7 @@ public class Entity extends AbstractObservable implements EntityInterface { @Override public void addInfo(final String description) { - final Message m = new Message(MessageType.Info, 0, description); + final Message m = new Message(description); addMessage(m); } diff --git a/src/main/java/org/caosdb/server/entity/Message.java b/src/main/java/org/caosdb/server/entity/Message.java index a1d9513f3d7a2068e10563fbc2d4fb447fe1964b..bdf6488d15a1d77b3038ece18541cab78ee9c805 100644 --- a/src/main/java/org/caosdb/server/entity/Message.java +++ b/src/main/java/org/caosdb/server/entity/Message.java @@ -21,17 +21,18 @@ */ package org.caosdb.server.entity; +import org.caosdb.api.entity.v1.MessageCode; import org.caosdb.server.entity.xml.ToElementable; import org.jdom2.Element; public class Message extends Exception implements Comparable<Message>, ToElementable { protected final String type; - private final Integer code; + private final MessageCode code; private final String description; private final String body; - private static final long serialVersionUID = -3005017964769041935L; + private static final long serialVersionUID = 1837110172902899264L; public enum MessageType { Warning, @@ -48,7 +49,7 @@ public class Message extends Exception implements Comparable<Message>, ToElement public String toString() { return this.type.toString() + " (" - + (this.code != null ? Integer.toString(this.code) : "") + + this.code.toString() + ") - " + (this.description != null ? this.description : ""); } @@ -74,33 +75,33 @@ public class Message extends Exception implements Comparable<Message>, ToElement this(type, null, description, body); } - public Message(final String type, final Integer code) { + public Message(final String type, final MessageCode code) { this(type, code, null, null); } - public Message(final Integer code, final String description) { + public Message(final MessageCode code, final String description) { this(MessageType.Info, code, description); } - public Message(final MessageType type, final Integer code, final String description) { + public Message(final MessageType type, final MessageCode code, final String description) { this(type.toString(), code, description, null); } public Message( - final MessageType type, final Integer code, final String description, final String body) { + final MessageType type, final MessageCode code, final String description, final String body) { this(type.toString(), code, description, body); } - public Message(final String type, final Integer code, final String description) { + public Message(final String type, final MessageCode code, final String description) { this(type, code, description, null); } public Message(final MessageType type, final String description) { - this(type.toString(), 0, description); + this(type.toString(), MessageCode.MESSAGE_CODE_UNKNOWN, description); } public Message( - final String type, final Integer code, final String description, final String body) { + final String type, final MessageCode code, final String description, final String body) { this.code = code; this.description = description; this.body = body; @@ -108,7 +109,7 @@ public class Message extends Exception implements Comparable<Message>, ToElement } public Message( - final Integer code, final String description, final String body, final MessageType type) { + final MessageCode code, final String description, final String body, final MessageType type) { this.code = code; this.description = description; this.body = body; @@ -122,14 +123,14 @@ public class Message extends Exception implements Comparable<Message>, ToElement this.type = MessageType.Info.toString(); } - public Integer getCode() { + public MessageCode getCode() { return this.code; } public Element toElement() { final Element e = new Element(this.type); if (this.code != null) { - e.setAttribute("code", Integer.toString(this.code)); + e.setAttribute("code", this.code.toString()); } if (this.description != null) { e.setAttribute("description", this.description); @@ -153,8 +154,7 @@ public class Message extends Exception implements Comparable<Message>, ToElement public final void print(final String indent) { System.out.println(indent + "+---| " + this.type + " |------------------------ "); - System.out.println( - indent + "| Code: " + (this.code != null ? Integer.toString(this.code) : "null")); + System.out.println(indent + "| Code: " + this.code.toString()); System.out.println(indent + "| Description: " + this.description); System.out.println(indent + "| Body: " + this.body); System.out.println(indent + "+------------------------------------------------------ "); diff --git a/src/main/java/org/caosdb/server/entity/TransactionEntity.java b/src/main/java/org/caosdb/server/entity/TransactionEntity.java index 2883c076f437520581037219a724020b47893424..7dd96b7f5ba8dc71c976731fed4d91e43688f919 100644 --- a/src/main/java/org/caosdb/server/entity/TransactionEntity.java +++ b/src/main/java/org/caosdb/server/entity/TransactionEntity.java @@ -59,8 +59,6 @@ public interface TransactionEntity { public abstract List<Message> getMessages(String type); - public abstract Message getMessage(String type, Integer code); - public abstract void addMessage(ToElementable m); public abstract void addError(Message m); diff --git a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java index c83cb67883f5a616109268fb6d62bae40cd73e6b..140bb207b61d6f50a593feb24a43b3e324ddcff7 100644 --- a/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java +++ b/src/main/java/org/caosdb/server/entity/wrapper/EntityWrapper.java @@ -340,11 +340,6 @@ public class EntityWrapper implements EntityInterface { return this.entity.getMessages(type); } - @Override - public Message getMessage(final String type, final Integer code) { - return this.entity.getMessage(type, code); - } - @Override public void addMessage(final ToElementable m) { this.entity.addMessage(m); diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java index 5d33ce0b553c9abe709c81dfba364e8d176a0ffd..eeba659aa5ab0bd2b7271a8bd1fa9987268197fc 100644 --- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java +++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java @@ -181,19 +181,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa } public static MessageCode getMessageCode(final Message m) { - if (m.equalsCore(ServerMessages.ENTITY_DOES_NOT_EXIST)) { - return MessageCode.MESSAGE_CODE_ENTITY_DOES_NOT_EXIST; - } else if (m.equalsCore(ServerMessages.ENTITY_HAS_NO_PROPERTIES)) { - return MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES; - } else if (m.equalsCore(ServerMessages.INTEGER_OUT_OF_RANGE)) { - return MessageCode.MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE; - } else if (m.equalsCore(ServerMessages.ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY)) { - return MessageCode.MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY; - } else if (m.getCode() == 0) { - return MessageCode.MESSAGE_CODE_UNSPECIFIED; - } else { - return MessageCode.MESSAGE_CODE_UNKNOWN; - } + return m.getCode(); } public Version convert(final org.caosdb.server.entity.Version from) { diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckFileStorageConsistency.java b/src/main/java/org/caosdb/server/jobs/core/CheckFileStorageConsistency.java index 8dc6fc0c60bc234d65f576377a89244d0a7a673e..e425649bb1bc43a9745120ed078c653f55af2e38 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckFileStorageConsistency.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckFileStorageConsistency.java @@ -127,8 +127,6 @@ public class CheckFileStorageConsistency extends FlagJob { getContainer() .addMessage( new Message( - "Info", - 0, "Test took too long. The results will be written to './ConsistencyTest.xml'")); } else { // add info/warning/error diff --git a/src/main/java/org/caosdb/server/jobs/core/CheckRefidIsaParRefid.java b/src/main/java/org/caosdb/server/jobs/core/CheckRefidIsaParRefid.java index 5b95840a13928040ee76198f793a85e2ad078a23..e739ffde01a38fb1539c97166014350e9f9c61d7 100644 --- a/src/main/java/org/caosdb/server/jobs/core/CheckRefidIsaParRefid.java +++ b/src/main/java/org/caosdb/server/jobs/core/CheckRefidIsaParRefid.java @@ -31,7 +31,6 @@ import org.caosdb.server.datatype.ReferenceValue; import org.caosdb.server.entity.Entity; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.entity.Role; import org.caosdb.server.entity.wrapper.Parent; import org.caosdb.server.jobs.EntityJob; @@ -143,8 +142,6 @@ public class CheckRefidIsaParRefid extends EntityJob implements Observer { getEntity() .addInfo( new Message( - MessageType.Info, - 0, "Could not resolve all parents of the entity with id " + child.toString() + ". Problematic parent: " diff --git a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java index 56ac72fab9f980581cf755c5018dad48ad841f96..78e89a53593e3f112650ed81e292d0c62f071e24 100644 --- a/src/main/java/org/caosdb/server/jobs/core/Inheritance.java +++ b/src/main/java/org/caosdb/server/jobs/core/Inheritance.java @@ -26,6 +26,7 @@ package org.caosdb.server.jobs.core; import java.util.ArrayList; import java.util.List; +import org.caosdb.api.entity.v1.MessageCode; import org.caosdb.server.database.backend.transaction.RetrieveFullEntityTransaction; import org.caosdb.server.entity.Entity; import org.caosdb.server.entity.EntityInterface; @@ -61,7 +62,7 @@ public class Inheritance extends EntityJob { public static final Message ILLEGAL_INHERITANCE_MODE = new Message( MessageType.Warning, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "Unknown value for flag \"inheritance\". None of the parent's properties have been transfered to the child."); @Override diff --git a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java index 8133e4659d55caf29faa56eeb80ced194cd26cfc..7f9cf9be2496344473b487b24ab90d2d37e86a5c 100644 --- a/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java +++ b/src/main/java/org/caosdb/server/jobs/core/InsertFilesInDir.java @@ -30,6 +30,7 @@ import java.util.LinkedList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.caosdb.api.entity.v1.MessageCode; import org.caosdb.server.CaosDBException; import org.caosdb.server.CaosDBServer; import org.caosdb.server.FileSystem; @@ -132,8 +133,6 @@ public class InsertFilesInDir extends FlagJob { getContainer() .addMessage( new Message( - MessageType.Info, - 0, "Files count in " + dir.getName() + "/: " @@ -147,7 +146,12 @@ public class InsertFilesInDir extends FlagJob { throw new TransactionException(e); } } else { - getContainer().addMessage(new Message(MessageType.Error, 0, "No such directory: " + dirStr)); + getContainer() + .addMessage( + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "No such directory: " + dirStr)); return; } } @@ -289,7 +293,7 @@ public class InsertFilesInDir extends FlagJob { .addMessage( new Message( MessageType.Warning, - 1, + MessageCode.MESSAGE_CODE_UNKNOWN, "Not explicitly included file: " + sub.getCanonicalPath())); return false; } @@ -297,7 +301,9 @@ public class InsertFilesInDir extends FlagJob { getContainer() .addMessage( new Message( - MessageType.Warning, 2, "Explicitly excluded file: " + sub.getCanonicalPath())); + MessageType.Warning, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Explicitly excluded file: " + sub.getCanonicalPath())); return false; } } @@ -305,14 +311,18 @@ public class InsertFilesInDir extends FlagJob { getContainer() .addMessage( new Message( - MessageType.Warning, 3, "Hidden directory or file: " + sub.getCanonicalPath())); + MessageType.Warning, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Hidden directory or file: " + sub.getCanonicalPath())); return false; } if (sub.isDirectory() && !sub.canExecute()) { getContainer() .addMessage( new Message( - MessageType.Warning, 4, "Unaccessible directory: " + sub.getCanonicalPath())); + MessageType.Warning, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Unaccessible directory: " + sub.getCanonicalPath())); return false; } if (!sub.canRead()) { @@ -320,7 +330,7 @@ public class InsertFilesInDir extends FlagJob { .addMessage( new Message( MessageType.Warning, - 5, + MessageCode.MESSAGE_CODE_UNKNOWN, "Unreadable directory or file: " + sub.getCanonicalPath())); return false; } @@ -329,7 +339,7 @@ public class InsertFilesInDir extends FlagJob { .addMessage( new Message( MessageType.Warning, - 6, + MessageCode.MESSAGE_CODE_UNKNOWN, "Directory or file is symbolic link: " + sub.getAbsolutePath())); if (!this.forceSymLinks) { return false; @@ -355,11 +365,15 @@ public class InsertFilesInDir extends FlagJob { // overlaps the directory to be inserted. if (!dir.isDirectory()) { - throw new Message(MessageType.Error, 0, "Dir is not a directory."); + throw new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Dir is not a directory."); } if (!dir.canRead() || !dir.canExecute()) { - throw new Message(MessageType.Error, 0, "Cannot read or enter the desired directory."); + throw new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Cannot read or enter the desired directory."); } final File base = new File(FileSystem.getBasepath()); @@ -375,7 +389,10 @@ public class InsertFilesInDir extends FlagJob { || isSubDir(tmp, dir) || isSubDir(dir, root) || isSubDir(root, dir)) { - throw new Message(MessageType.Error, 0, "Dir is not allowed: " + dir.toString()); + throw new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Dir is not allowed: " + dir.toString()); } for (final File f : getAllowedFolders()) { @@ -386,7 +403,7 @@ public class InsertFilesInDir extends FlagJob { } throw new Message( MessageType.Error, - 1, + MessageCode.MESSAGE_CODE_UNKNOWN, "Dir is not allowed: " + dir.toString() + " Allowed directories: " diff --git a/src/main/java/org/caosdb/server/jobs/core/TestMail.java b/src/main/java/org/caosdb/server/jobs/core/TestMail.java index fb3e87097fae44f3f1f609dd7e347c27c6d971c2..210a9f59b879529f5f96954250556e88f60454be 100644 --- a/src/main/java/org/caosdb/server/jobs/core/TestMail.java +++ b/src/main/java/org/caosdb/server/jobs/core/TestMail.java @@ -25,7 +25,6 @@ package org.caosdb.server.jobs.core; import org.caosdb.server.CaosDBServer; import org.caosdb.server.ServerProperties; import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.jobs.FlagJob; import org.caosdb.server.jobs.JobAnnotation; import org.caosdb.server.utils.ServerMessages; @@ -49,8 +48,7 @@ public class TestMail extends FlagJob { if (Utils.isRFC822Compliant(value)) { final Mail m = new Mail(NAME, EMAIL, null, value, "Test mail", "This is a test mail."); m.send(); - getContainer() - .addMessage(new Message(MessageType.Info, 0, "A mail has been send to " + value)); + getContainer().addMessage(new Message("A mail has been send to " + value)); } else { getContainer().addMessage(ServerMessages.EMAIL_NOT_WELL_FORMED); } diff --git a/src/main/java/org/caosdb/server/query/Query.java b/src/main/java/org/caosdb/server/query/Query.java index fa5754c65e0e89baf90774fa7def683ece66236b..95f853d607edffa29b69e4f84657560ba3a52a48 100644 --- a/src/main/java/org/caosdb/server/query/Query.java +++ b/src/main/java/org/caosdb/server/query/Query.java @@ -46,6 +46,7 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.apache.commons.jcs.access.behavior.ICacheAccess; import org.apache.shiro.subject.Subject; +import org.caosdb.api.entity.v1.MessageCode; import org.caosdb.server.CaosDBServer; import org.caosdb.server.ServerProperties; import org.caosdb.server.caching.Cache; @@ -754,7 +755,7 @@ public class Query implements QueryInterface, ToElementable, TransactionInterfac } private void addWarning(final String w) { - this.messages.add(new Message(MessageType.Warning, 0, w)); + this.messages.add(new Message(MessageType.Warning, MessageCode.MESSAGE_CODE_UNKNOWN, w)); } private void cleanUp() { diff --git a/src/main/java/org/caosdb/server/resource/ScriptingResource.java b/src/main/java/org/caosdb/server/resource/ScriptingResource.java index 35885bb4376b26fc04977389f4dbf1cd7c40decd..4629457f7bad9eeedfcaf680e6dc3fb5556e6726 100644 --- a/src/main/java/org/caosdb/server/resource/ScriptingResource.java +++ b/src/main/java/org/caosdb/server/resource/ScriptingResource.java @@ -96,7 +96,17 @@ public class ScriptingResource extends AbstractCaosDBServerResource { return null; } } catch (Message m) { - return error(m, Status.valueOf(m.getCode())); + if (m == ServerMessages.SERVER_SIDE_SCRIPT_DOES_NOT_EXIST) { + return error(m, Status.CLIENT_ERROR_NOT_FOUND); + } else if (m == ServerMessages.SERVER_SIDE_SCRIPT_MISSING_CALL) { + return error(m, Status.CLIENT_ERROR_BAD_REQUEST); + } else if (m == ServerMessages.SERVER_SIDE_SCRIPT_NOT_EXECUTABLE) { + return error(m, Status.CLIENT_ERROR_BAD_REQUEST); + } else if (m == ServerMessages.SERVER_SIDE_SCRIPT_TIMEOUT) { + return error(m, Status.CLIENT_ERROR_BAD_REQUEST); + } + + return error(m, Status.SERVER_ERROR_INTERNAL); } finally { deleteTmpFiles(); } diff --git a/src/main/java/org/caosdb/server/transaction/DeleteUserTransaction.java b/src/main/java/org/caosdb/server/transaction/DeleteUserTransaction.java index 0f2f5b7fb676e436b131ca69678214c2e34b974c..dc935adc9ea0236ce3c8d54b498ed5f6b15a8c42 100644 --- a/src/main/java/org/caosdb/server/transaction/DeleteUserTransaction.java +++ b/src/main/java/org/caosdb/server/transaction/DeleteUserTransaction.java @@ -30,7 +30,6 @@ import org.caosdb.server.database.backend.transaction.DeletePassword; import org.caosdb.server.database.backend.transaction.DeleteUser; import org.caosdb.server.database.backend.transaction.RetrievePasswordValidator; import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.utils.ServerMessages; import org.jdom2.Element; @@ -64,7 +63,7 @@ public class DeleteUserTransaction extends AccessControlTransaction { final Element ret = new Element("User"); ret.setAttribute("realm", this.realm); ret.setAttribute("name", this.user); - ret.addContent(new Message(MessageType.Info, 0, "This user has been deleted.").toElement()); + ret.addContent(new Message("This user has been deleted.").toElement()); return ret; } } diff --git a/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java b/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java index ed93812d22eaad6bf448fa1dede2d92cea1d50a6..bbd1bbd56c57612f62c427676e2bef692ea6ac5c 100644 --- a/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java +++ b/src/main/java/org/caosdb/server/transaction/FileStorageConsistencyCheck.java @@ -28,6 +28,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map.Entry; import java.util.TimeZone; +import org.caosdb.api.entity.v1.MessageCode; import org.caosdb.datetime.UTCDateTime; import org.caosdb.server.database.DatabaseAccessManager; import org.caosdb.server.database.access.Access; @@ -176,7 +177,13 @@ public class FileStorageConsistencyCheck extends Thread sb.append('\n').append(t.toString()); } - e.addContent(new Message("Error", 0, "An exception was thrown.", sb.toString()).toElement()); + e.addContent( + new Message( + "Error", + MessageCode.MESSAGE_CODE_UNKNOWN, + "An exception was thrown.", + sb.toString()) + .toElement()); } final List<Message> results2Messages = results2Messages(getResults(), this.location); @@ -196,24 +203,36 @@ public class FileStorageConsistencyCheck extends Thread final ArrayList<Message> ret = new ArrayList<Message>(); if (results.isEmpty()) { if (location.length() > 0) { - ret.add(new Message("Info", 0, "File system below " + location + " is consistent.")); + ret.add(new Message("File system below " + location + " is consistent.")); } else { - ret.add(new Message("Info", 0, "File system is consistent.")); + ret.add(new Message("File system is consistent.")); } } for (final Entry<String, Integer> r : results.entrySet()) { switch (r.getValue()) { case FileConsistencyCheck.FILE_DOES_NOT_EXIST: - ret.add(new Message("Error", 0, r.getKey() + ": File does not exist.")); + ret.add( + new Message( + "Error", + MessageCode.MESSAGE_CODE_FILE_NOT_FOUND, + r.getKey() + ": File does not exist.")); break; case FileConsistencyCheck.FILE_MODIFIED: - ret.add(new Message("Error", 0, r.getKey() + ": File was modified.")); + ret.add( + new Message( + "Error", MessageCode.MESSAGE_CODE_UNKNOWN, r.getKey() + ": File was modified.")); break; case FileConsistencyCheck.UNKNOWN_FILE: - ret.add(new Message("Warning", 0, r.getKey() + ": Unknown file.")); + ret.add( + new Message( + "Warning", MessageCode.MESSAGE_CODE_UNKNOWN, r.getKey() + ": Unknown file.")); break; case FileConsistencyCheck.NONE: - ret.add(new Message("Warning", 0, r.getKey() + ": Test result not available.")); + ret.add( + new Message( + "Warning", + MessageCode.MESSAGE_CODE_UNKNOWN, + r.getKey() + ": Test result not available.")); break; default: break; diff --git a/src/main/java/org/caosdb/server/transaction/Transaction.java b/src/main/java/org/caosdb/server/transaction/Transaction.java index 028afdd695652cbe912e1c48dd0ac2491ec59c3a..b4d63fbb293e0119cefe90db34b9cfb28f4e0ce1 100644 --- a/src/main/java/org/caosdb/server/transaction/Transaction.java +++ b/src/main/java/org/caosdb/server/transaction/Transaction.java @@ -33,7 +33,6 @@ import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.misc.TransactionBenchmark; import org.caosdb.server.entity.EntityInterface; import org.caosdb.server.entity.Message; -import org.caosdb.server.entity.Message.MessageType; import org.caosdb.server.entity.container.TransactionContainer; import org.caosdb.server.jobs.Job; import org.caosdb.server.jobs.Schedule; @@ -52,9 +51,6 @@ import org.caosdb.server.utils.Observer; public abstract class Transaction<C extends TransactionContainer> extends AbstractObservable implements TransactionInterface { - public static final Message ERROR_INTEGRITY_VIOLATION = - new Message(MessageType.Error, 0, "This entity caused an unexpected integrity violation."); - @Override public TransactionBenchmark getTransactionBenchmark() { return getContainer().getTransactionBenchmark(); diff --git a/src/main/java/org/caosdb/server/utils/ServerMessages.java b/src/main/java/org/caosdb/server/utils/ServerMessages.java index f8898ff47bd77cbb786287b4a676f10d8b398995..6280ca28eb0515ce395b51ea3e75fd7984385a58 100644 --- a/src/main/java/org/caosdb/server/utils/ServerMessages.java +++ b/src/main/java/org/caosdb/server/utils/ServerMessages.java @@ -28,296 +28,417 @@ import org.caosdb.server.entity.Message.MessageType; public class ServerMessages { public static final Message ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY = - new Message(MessageType.Info, 10, "This entity has been deleted successfully."); + new Message( + MessageType.Info, + MessageCode.MESSAGE_CODE_ENTITY_HAS_BEEN_DELETED_SUCCESSFULLY, + "This entity has been deleted successfully."); public static final Message ENTITY_DOES_NOT_EXIST = - new Message(MessageType.Error, 101, "Entity does not exist."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_DOES_NOT_EXIST, + "Entity does not exist."); public static final Message ENTITY_HAS_UNQUALIFIED_PROPERTIES = - new Message(MessageType.Error, 114, "Entity has unqualified properties."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PROPERTIES, + "Entity has unqualified properties."); public static final Message ENTITY_HAS_UNQUALIFIED_PARENTS = - new Message(MessageType.Error, 116, "Entity has unqualified parents."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_PARENTS, + "Entity has unqualified parents."); - public static final Message PARSING_FAILED = new Message(MessageType.Error, 2, "Parsing failed."); + public static final Message PARSING_FAILED = + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Parsing failed."); public static final Message UNKNOWN_DATATYPE = - new Message(MessageType.Error, 0, "Unknown datatype."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Unknown data type."); public static final Message UNKNOWN_IMPORTANCE = - new Message(MessageType.Error, 0, "Unknown importance."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Unknown importance."); public static final Message ENTITY_HAS_NO_ID = - new Message(MessageType.Error, 0, "Entity has no ID."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_ID, "Entity has no ID."); public static final Message REQUIRED_BY_PERSISTENT_ENTITY = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_REQUIRED_BY_PERSISTENT_ENTITY, "Entity is required by other entities which are not to be deleted."); public static final Message PROPERTY_HAS_NO_DATATYPE = - new Message(MessageType.Error, 110, "Property has no datatype."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_PROPERTY_HAS_NO_DATA_TYPE, + "Property has no data type."); public static final Message ENTITY_HAS_NO_DESCRIPTION = - new Message(MessageType.Error, 0, "Entity has no description."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_DESCRIPTION, + "Entity has no description."); public static final Message ENTITY_HAS_NO_NAME = - new Message(MessageType.Error, 0, "Entity has no name."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_NAME, "Entity has no name."); public static final Message OBLIGATORY_PROPERTY_MISSING = - new Message(MessageType.Error, 0, "An obligatory property is missing."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_OBLIGATORY_PROPERTY_MISSING, + "An obligatory property is missing."); public static final Message ENTITY_HAS_NO_PARENTS = - new Message(MessageType.Error, 0, "Entity has no parents."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_PARENTS, + "Entity has no parents."); public static final Message ENTITY_HAS_NO_PROPERTIES = - new Message(MessageType.Error, 0, "Entity has no properties."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_PROPERTIES, + "Entity has no properties."); public static final Message FILE_HAS_NO_TARGET_PATH = - new Message(MessageType.Error, 0, "No target path specified."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_FILE_HAS_NO_TARGET_PATH, + "No target path specified."); public static final Message TARGET_PATH_NOT_ALLOWED = - new Message(MessageType.Error, 0, "This target path is not allowed."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_TARGET_PATH_NOT_ALLOWED, + "This target path is not allowed."); public static final Message TARGET_PATH_EXISTS = - new Message(MessageType.Error, 0, "This target path does already exist."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_TARGET_PATH_EXISTS, + "This target path already exists and is owned by another entity."); public static final Message PROPERTY_HAS_NO_UNIT = - new Message(MessageType.Error, 0, "Property has no unit."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_PROPERTY_HAS_NO_UNIT, + "Property has no unit."); public static final Message CANNOT_PARSE_VALUE = - new Message(MessageType.Error, 0, "Cannot parse value."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_VALUE, + "Cannot parse the value."); public static final Message CHECKSUM_TEST_FAILED = - new Message(MessageType.Error, 0, "Checksum test failed. File is corrupted."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CHECKSUM_TEST_FAILED, + "Checksum test failed. File is corrupted."); public static final Message SIZE_TEST_FAILED = - new Message(MessageType.Error, 0, "Size test failed. File is corrupted."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_SIZE_TEST_FAILED, + "Size test failed. File is corrupted."); public static final Message CANNOT_CREATE_PARENT_FOLDER = - new Message(MessageType.Error, 0, "Could not create parent folder in the file system."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_CREATE_PARENT_FOLDER, + "Could not create parent folder in the file system."); public static final Message FILE_HAS_NOT_BEEN_UPLOAED = - new Message(MessageType.Error, 0, "File has not been uploaded."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_FILE_HAS_NOT_BEEN_UPLOAED, + "File has not been uploaded."); public static final Message THUMBNAIL_HAS_NOT_BEEN_UPLOAED = - new Message(MessageType.Error, 0, "Thumbnail has not been uploaded."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Thumbnail has not been uploaded."); public static final Message CANNOT_MOVE_FILE_TO_TARGET_PATH = - new Message(MessageType.Error, 0, "Could not move file to it's target folder."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_MOVE_FILE_TO_TARGET_PATH, + "Could not move file to it's target folder."); public static final Message CANNOT_PARSE_DATETIME_VALUE = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_DATETIME_VALUE, "Cannot parse value to datetime format (yyyy-mm-dd'T'hh:mm:ss[.fffffffff][TimeZone])."); public static final Message CANNOT_PARSE_DOUBLE_VALUE = - new Message(MessageType.Error, 0, "Cannot parse value to double."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_DOUBLE_VALUE, + "Cannot parse value to double."); public static final Message CANNOT_PARSE_INT_VALUE = - new Message(MessageType.Error, 0, "Cannot parse value to integer."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_INT_VALUE, + "Cannot parse value to integer."); public static final Message CANNOT_PARSE_BOOL_VALUE = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_BOOL_VALUE, "Cannot parse value to boolean (either 'true' or 'false', ignoring case)."); public static final Message CANNOT_CONNECT_TO_DATABASE = - new Message(MessageType.Error, 0, "Could not connect to MySQL server."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Could not connect to MySQL server."); public static final Message REQUEST_BODY_NOT_WELLFORMED = - new Message(MessageType.Error, 0, "Request Body was not a well-formed xml."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Request Body was not a well-formed xml."); public static final Message REQUEST_BODY_EMPTY = - new Message(MessageType.Error, 0, "Request body was empty."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Request body was empty."); public static final Message REQUEST_DOESNT_CONTAIN_EXPECTED_ELEMENTS = - new Message(MessageType.Error, 0, "Request body didn't contain the expected Elements."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Request body didn't contain the expected Elements."); public static final Message FILE_NOT_IN_DROPOFFBOX = - new Message(MessageType.Error, 0, "File is not in drop-off box."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "File is not in drop-off box."); public static final Message FILE_NOT_FOUND = - new Message(MessageType.Error, 0, "File could not be found."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_FILE_NOT_FOUND, "File could not be found."); public static final Message CANNOT_MOVE_FILE_TO_TMP = - new Message(MessageType.Error, 0, "Could not move file to tmp folder."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Could not move file to tmp folder."); public static final Message CANNOT_READ_FILE = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "Insufficient read permission for this file. Please make it readable."); public static final Message CANNOT_READ_THUMBNAIL = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "Insufficient read permission for this file's thumbnail. Please make it readable."); public static final Message NO_FILE_REPRESENTATION_SUBMITTED = - new Message(MessageType.Error, 0, "No file representation submitted."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "No file representation submitted."); public static final Message FORM_CONTAINS_UNSUPPORTED_CONTENT = - new Message(MessageType.Error, 0, "The form contains unsupported content"); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "The form contains unsupported content"); public static final Message WARNING_OCCURED = new Message( MessageType.Error, - 128, + MessageCode.MESSAGE_CODE_WARNING_OCCURED, "A warning occured while processing an entity with the strict flag."); public static final Message ENTITY_NAME_IS_NOT_UNIQUE = new Message( MessageType.Error, - 152, + MessageCode.MESSAGE_CODE_ENTITY_NAME_IS_NOT_UNIQUE, "Name is already in use. Choose a different name or reuse an existing entity."); public static final Message ROLE_NAME_IS_NOT_UNIQUE = - new Message(MessageType.Error, 1152, "Role name is already in use. Choose a different name."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "Role name is already in use. Choose a different name."); public static final Message QUERY_EXCEPTION = - new Message(MessageType.Error, 13, "This query finished with errors."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_QUERY_EXCEPTION, + "This query finished with errors."); public static final Message LOGOUT_INFO = - new Message(MessageType.Info, 201, "You have successfully logged out."); + new Message( + MessageType.Info, MessageCode.MESSAGE_CODE_UNKNOWN, "You have successfully logged out."); public static final Message ENTITY_IS_EMPTY = - new Message(MessageType.Error, 0, "This entity is empty."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "This entity is empty."); public static final Message TRANSACTION_ROLL_BACK = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_TRANSACTION_ROLL_BACK, "An unknown error occured during the transaction and it was rolled back."); public static final Message FILE_UPLOAD_FAILED = - new Message(MessageType.Error, 0, "The file upload failed for an unknown reason."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "The file upload failed for an unknown reason."); public static final Message ACCOUNT_CANNOT_BE_ACTIVATED = - new Message(MessageType.Error, 0, "This account cannot be activated."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "This account cannot be activated."); public static final Message ACCOUNT_DOES_NOT_EXIST = - new Message(MessageType.Error, 0, "This account does not exist."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "This account does not exist."); public static final Message ACCOUNT_CANNOT_BE_RESET = - new Message(MessageType.Error, 0, "This account cannot be reset."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "This account cannot be reset."); public static final Message UNKNOWN_UNIT = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN_UNIT, "Unknown unit. Values with this unit cannot be converted to other units when used in search queries."); public static final Message ACCOUNT_NAME_NOT_UNIQUE = - new Message(MessageType.Error, 0, "This user name is yet in use. Please choose another one."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This user name is yet in use. Please choose another one."); public static final Message ACCOUNT_HAS_BEEN_DELETED = - new Message(MessageType.Info, 10, "This user has been deleted successfully."); + new Message( + MessageType.Info, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This user has been deleted successfully."); public static final Message PLEASE_SET_A_PASSWORD = - new Message(MessageType.Info, 0, "Please set a password."); + new Message(MessageType.Info, MessageCode.MESSAGE_CODE_UNKNOWN, "Please set a password."); public static final Message USER_HAS_BEEN_ACTIVATED = new Message( MessageType.Info, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "User has been activated. You can now log in with your username and password."); public static final Message UNAUTHENTICATED = - new Message(MessageType.Error, 401, "Sign in, please."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Sign in, please."); public static final Message AUTHORIZATION_ERROR = - new Message(MessageType.Error, 403, "You are not allowed to do this."); + new Message( + MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "You are not allowed to do this."); public static final Message REFERENCE_IS_NOT_ALLOWED_BY_DATATYPE = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_REFERENCE_IS_NOT_ALLOWED_BY_DATA_TYPE, "Reference not qualified. The value of this Reference Property is to be a child of its data type."); public static final Message CANNOT_PARSE_ENTITY_ACL = - new Message(MessageType.Error, 0, "Cannot parse EntityACL."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "Cannot parse EntityACL."); public static final Message ROLE_DOES_NOT_EXIST = - new Message(MessageType.Error, 1104, "User Role does not exist."); + new Message(MessageType.Error, MessageCode.MESSAGE_CODE_UNKNOWN, "User Role does not exist."); public static final Message ENTITY_NAME_DUPLICATES = - new Message(MessageType.Error, 0, "This entity cannot be identified due to name duplicates."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_NAME_DUPLICATES, + "This entity cannot be identified due to name duplicates."); public static final Message DATA_TYPE_NAME_DUPLICATES = new Message( - MessageType.Error, 0, "This data type cannot be identified due to name duplicates."); + MessageType.Error, + MessageCode.MESSAGE_CODE_DATA_TYPE_NAME_DUPLICATES, + "This data type cannot be identified due to name duplicates."); public static final Message ENTITY_HAS_NO_NAME_OR_ID = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_ENTITY_HAS_NO_NAME_OR_ID, "This entity cannot be identified as it didn't come with a name or id."); public static final Message EMAIL_NOT_WELL_FORMED = - new Message(MessageType.Error, 0, "This email address is not RFC822 compliant."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This email address is not RFC822 compliant."); public static final Message PASSWORD_TOO_WEAK = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "This password is too weak. It should be longer than 8 characters and sufficiently random. "); public static final Message AFFILIATION_ERROR = new Message( - MessageType.Error, 0, "Affiliation is not defined for this child-parent constellation."); + MessageType.Error, + MessageCode.MESSAGE_CODE_AFFILIATION_ERROR, + "Affiliation is not defined for this child-parent constellation."); public static final Message QUERY_TEMPLATE_HAS_NO_QUERY_DEFINITION = - new Message(MessageType.Error, 0, "This QueryTemplate has no query definition."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This QueryTemplate has no query definition."); public static final Message QUERY_TEMPLATE_WITH_COUNT = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "QueryTemplates may not be defined by 'COUNT...' queries for consistency reasons."); public static final Message QUERY_TEMPLATE_WITH_SELECT = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_UNKNOWN, "QueryTemplates may not be defined by 'SELECT... FROM...' queries for consistency reasons."); public static final Message QUERY_PARSING_ERROR = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_QUERY_PARSING_ERROR, "An error occured during the parsing of this query. Maybe you use a wrong syntax?"); public static final Message NAME_PROPERTIES_MUST_BE_TEXT = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_NAME_PROPERTIES_MUST_BE_TEXT, "A property which has 'name' as its parent must have a TEXT data type."); public static final Message PARENT_DUPLICATES_WARNING = new Message( MessageType.Warning, - 0, + MessageCode.MESSAGE_CODE_PARENT_DUPLICATES_WARNING, "This entity had parent duplicates. That is meaningless and only one parent had been inserted."); public static final Message PARENT_DUPLICATES_ERROR = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_PARENT_DUPLICATES_ERROR, "This entity had parent duplicates. Parent duplicates are meaningless and would be ignored (and inserted only once). But these parents had diverging inheritance instructions which cannot be processed."); public static final Message ATOMICITY_ERROR = new Message( MessageType.Error, - 12, + MessageCode.MESSAGE_CODE_ATOMICITY_ERROR, "One or more entities are not qualified. None of them have been inserted/updated/deleted."); public static final Message NO_SUCH_ENTITY_ROLE(final String role) { - return new Message(MessageType.Error, 0, "There is no such role '" + role + "'."); + return new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_NO_SUCH_ENTITY_ROLE, + "There is no such role '" + role + "'."); } public static Message UNKNOWN_ERROR(final String requestID) { @@ -338,78 +459,124 @@ public class ServerMessages { + " and include the SRID into your report."; } - return new Message(MessageType.Error, 500, description, body.isEmpty() ? null : body); + return new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + description, + body.isEmpty() ? null : body); } public static final Message REQUIRED_BY_UNQUALIFIED = new Message( - MessageType.Error, 192, "This entity cannot be deleted due to dependency problems"); + MessageType.Error, + MessageCode.MESSAGE_CODE_REQUIRED_BY_UNQUALIFIED, + "This entity cannot be deleted due to dependency problems"); public static final Message ENTITY_HAS_UNQUALIFIED_REFERENCE = - new Message(MessageType.Error, 0, "This entity has an unqualified reference."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_ENTITY_HAS_UNQUALIFIED_REFERENCE, + "This entity has an unqualified reference."); public static final Message REFERENCED_ENTITY_DOES_NOT_EXIST = - new Message(MessageType.Error, 235, "Referenced entity does not exist."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_REFERENCED_ENTITY_DOES_NOT_EXIST, + "Referenced entity does not exist."); public static final Message REFERENCE_NAME_DUPLICATES = new Message( - MessageType.Error, 0, "This reference cannot be identified due to name duplicates."); + MessageType.Error, + MessageCode.MESSAGE_CODE_REFERENCE_NAME_DUPLICATES, + "This reference cannot be identified due to name duplicates."); public static final Message DATATYPE_INHERITANCE_AMBIGUOUS = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_DATA_TYPE_INHERITANCE_AMBIGUOUS, "The datatype which is to be inherited could not be detected due to divergent datatypes of at least two parents."); public static final Message DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES = new Message( MessageType.Error, - 0, + MessageCode.MESSAGE_CODE_DATA_TYPE_DOES_NOT_ACCEPT_COLLECTION_VALUES, "This datatype does not accept collections of values (e.g. Lists)."); public static final Message CANNOT_PARSE_UNIT = - new Message(MessageType.Error, 0, "This unit cannot be parsed."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_CANNOT_PARSE_UNIT, + "This unit cannot be parsed."); public static final Message SERVER_SIDE_SCRIPT_DOES_NOT_EXIST = new Message( - MessageType.Error, 404, "This server-side script does not exist. Did you install it?"); + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This server-side script does not exist. Did you install it?"); public static final Message SERVER_SIDE_SCRIPT_NOT_EXECUTABLE = - new Message(MessageType.Error, 400, "This server-side script is not executable."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This server-side script is not executable."); public static final Message SERVER_SIDE_SCRIPT_ERROR = - new Message(MessageType.Error, 500, "The invocation of this server-side script failed."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "The invocation of this server-side script failed."); public static final Message SERVER_SIDE_SCRIPT_SETUP_ERROR = new Message( MessageType.Error, - 500, + MessageCode.MESSAGE_CODE_UNKNOWN, "The setup routine for the server-side script failed. This might indicate a misconfiguration of the server. Please contact the administrator."); public static final Message SERVER_SIDE_SCRIPT_TIMEOUT = - new Message(MessageType.Error, 400, "This server-side script did not finish in time."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "This server-side script did not finish in time."); public static final Message SERVER_SIDE_SCRIPT_MISSING_CALL = - new Message(MessageType.Error, 400, "You must specify the `call` field."); + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_UNKNOWN, + "You must specify the `call` field."); public static final Message ADDITIONAL_PROPERTY = new Message( MessageType.Warning, - 0, + MessageCode.MESSAGE_CODE_ADDITIONAL_PROPERTY, "This property is an additional property which has no corresponding property among the properties of the parents."); public static final Message PROPERTY_WITH_DATATYPE_OVERRIDE = - new Message(MessageType.Warning, 0, "This property overrides the datatype."); + new Message( + MessageType.Warning, + MessageCode.MESSAGE_CODE_PROPERTY_WITH_DATA_TYPE_OVERRIDE, + "This property overrides the datatype."); public static final Message PROPERTY_WITH_DESC_OVERRIDE = - new Message(MessageType.Warning, 0, "This property overrides the description."); + new Message( + MessageType.Warning, + MessageCode.MESSAGE_CODE_PROPERTY_WITH_DESCRIPTION_OVERRIDE, + "This property overrides the description."); public static final Message PROPERTY_WITH_NAME_OVERRIDE = - new Message(MessageType.Warning, 0, "This property overrides the name."); + new Message( + MessageType.Warning, + MessageCode.MESSAGE_CODE_PROPERTY_WITH_NAME_OVERRIDE, + "This property overrides the name."); public static final Message INTEGER_OUT_OF_RANGE = new Message( MessageType.Error, - MessageCode.MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE_VALUE, + MessageCode.MESSAGE_CODE_INTEGER_VALUE_OUT_OF_RANGE, "The integer value is out of range. This server only supports signed 32 bit integers."); + + public static final Message ERROR_INTEGRITY_VIOLATION = + new Message( + MessageType.Error, + MessageCode.MESSAGE_CODE_INTEGRITY_VIOLOATION, + "This entity caused an unexpected integrity violation. This is a strong indicator for a server bug. Please report."); }