diff --git a/caosdb-proto b/caosdb-proto index 640b1dd5a085a3f1ed26880103da0148c017e28f..75e826bd318c39e63d324f71e035f08355ffc51f 160000 --- a/caosdb-proto +++ b/caosdb-proto @@ -1 +1 @@ -Subproject commit 640b1dd5a085a3f1ed26880103da0148c017e28f +Subproject commit 75e826bd318c39e63d324f71e035f08355ffc51f diff --git a/pom.xml b/pom.xml index 83345a86cc2135633f606ed12bb5550e6de1303a..5f2de9983dfb3ebed941fcb6756687ac7ebf8e01 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.caosdb</groupId> <artifactId>caosdb-server</artifactId> - <version>0.5.0-GRPC0.0.14</version> + <version>0.5.0-GRPC0.0.15</version> <packaging>jar</packaging> <name>CaosDB Server</name> <scm> diff --git a/src/main/java/org/caosdb/server/datatype/GenericValue.java b/src/main/java/org/caosdb/server/datatype/GenericValue.java index 90641b1a03400edbc221935bf2b493c5534a1f49..02d735abcc36297e61b08f99455f077d832a3a4b 100644 --- a/src/main/java/org/caosdb/server/datatype/GenericValue.java +++ b/src/main/java/org/caosdb/server/datatype/GenericValue.java @@ -58,6 +58,10 @@ public class GenericValue implements SingleValue { this.table = Table.text_data; } + public GenericValue(final long value) { + this((Integer) Math.toIntExact(value)); + } + @Override public void addToElement(final Element e) { if (this.value instanceof String && ((String) this.value).isEmpty()) { diff --git a/src/main/java/org/caosdb/server/datatype/IntegerDatatype.java b/src/main/java/org/caosdb/server/datatype/IntegerDatatype.java index b5ac2d971c7edd1eaf3947eacf1d1f94f967d808..0b1116ed5cbc135f846b5c7fbc0e1d497576380f 100644 --- a/src/main/java/org/caosdb/server/datatype/IntegerDatatype.java +++ b/src/main/java/org/caosdb/server/datatype/IntegerDatatype.java @@ -32,10 +32,13 @@ public class IntegerDatatype extends AbstractDatatype { public SingleValue parseValue(final Object value) throws Message { try { if (value instanceof GenericValue) { - return new GenericValue(Integer.parseInt(((GenericValue) value).toDatabaseString())); + return new GenericValue(Long.parseLong(((GenericValue) value).toDatabaseString())); } else { - return new GenericValue(Integer.parseInt(value.toString())); + return new GenericValue(Long.parseLong(value.toString())); } + + } catch (final ArithmeticException e) { + throw ServerMessages.INTEGER_OUT_OF_RANGE; } catch (final NumberFormatException e) { throw ServerMessages.CANNOT_PARSE_INT_VALUE; } diff --git a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java index 10d2b01ed38c02c6d30d9d52e9b336a5797d2f82..d0c659679390fa0dbf2ff3f939b7062c38a63f90 100644 --- a/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java +++ b/src/main/java/org/caosdb/server/grpc/EntityTransactionServiceImpl.java @@ -184,6 +184,10 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa 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 { @@ -825,7 +829,7 @@ public class EntityTransactionServiceImpl extends EntityTransactionServiceImplBa case DOUBLE_VALUE: return new GenericValue(value.getDoubleValue()); case INTEGER_VALUE: - return new GenericValue(Math.toIntExact(value.getIntegerValue())); + return new GenericValue(Long.toString(value.getIntegerValue())); case SPECIAL_VALUE: return convertSpecial(value.getSpecialValue()); case STRING_VALUE: diff --git a/src/main/java/org/caosdb/server/utils/ServerMessages.java b/src/main/java/org/caosdb/server/utils/ServerMessages.java index 2801218aa47a18ec1494ee8ef76607eb9b962130..cbca0b2dca1d967536be596547f57c20a2e7593f 100644 --- a/src/main/java/org/caosdb/server/utils/ServerMessages.java +++ b/src/main/java/org/caosdb/server/utils/ServerMessages.java @@ -19,6 +19,7 @@ */ package org.caosdb.server.utils; +import org.caosdb.api.entity.v1alpha1.MessageCode; import org.caosdb.server.CaosDBServer; import org.caosdb.server.ServerProperties; import org.caosdb.server.entity.Message; @@ -366,7 +367,7 @@ 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, 500, description, body.isEmpty() ? null : body); } public static final Message REQUIRED_BY_UNQUALIFIED = @@ -434,4 +435,10 @@ public class ServerMessages { public static final Message PROPERTY_WITH_NAME_OVERRIDE = new Message(MessageType.Warning, 0, "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, + "The integer value is out of range. This server only supports signed 32 bit integers."); }