diff --git a/src/tap/data/LimitedTableIterator.java b/src/tap/data/LimitedTableIterator.java index 4adeb237d2a6318a591171dfbcce3ca64d1ca228..a5b9c64ea15c9cccdda97605f3f13f7bb534b562 100644 --- a/src/tap/data/LimitedTableIterator.java +++ b/src/tap/data/LimitedTableIterator.java @@ -55,7 +55,7 @@ import com.oreilly.servlet.multipart.ExceededSizeException; * </p> * * @author Grégory Mantelet (ARI) - * @version 2.0 (12/2014) + * @version 2.0 (01/2015) * @since 2.0 */ public class LimitedTableIterator implements TableIterator { @@ -119,9 +119,9 @@ public class LimitedTableIterator implements TableIterator { public < T extends TableIterator > LimitedTableIterator(final Class<T> classIt, final InputStream input, final LimitUnit type, final int limit) throws DataReadException{ try{ Constructor<T> construct = classIt.getConstructor(InputStream.class); - if (type == LimitUnit.bytes && limit > 0){ + if (LimitUnit.bytes.isCompatibleWith(type) && limit > 0){ maxNbRows = -1; - innerIt = construct.newInstance(new LimitedSizeInputStream(input, limit)); + innerIt = construct.newInstance(new LimitedSizeInputStream(input, limit * type.bytesFactor())); }else{ innerIt = construct.newInstance(input); maxNbRows = (type == null || type != LimitUnit.rows) ? -1 : limit; diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java index 6bfc38e625ad900ddcbc0ca06c657d19cf8d6db6..2341dd98bea7bd29dc3c5faacc871421189b33cf 100644 --- a/src/tap/resource/TAP.java +++ b/src/tap/resource/TAP.java @@ -521,10 +521,17 @@ public class TAP implements VOSIResource { if (outputLimit != null && outputLimit.length >= 2 && outputLimitType != null && outputLimitType.length >= 2){ if (outputLimit[0] > -1 || outputLimit[1] > -1){ xml.append("\t<outputLimit>\n"); - if (outputLimit[0] > -1) - xml.append("\t\t<default ").append(VOSerializer.formatAttribute("unit", outputLimitType[0].toString())).append(">").append(outputLimit[0]).append("</default>\n"); - if (outputLimit[1] > -1) - xml.append("\t\t<hard ").append(VOSerializer.formatAttribute("unit", outputLimitType[1].toString())).append(">").append(outputLimit[1]).append("</hard>\n"); + String limitType; + if (outputLimit[0] > -1){ + long limit = outputLimit[0] * outputLimitType[0].bytesFactor(); + limitType = (outputLimitType[0] == null || outputLimitType[0] == LimitUnit.rows) ? LimitUnit.rows.toString() : LimitUnit.bytes.toString(); + xml.append("\t\t<default ").append(VOSerializer.formatAttribute("unit", limitType)).append(">").append(limit).append("</default>\n"); + } + if (outputLimit[1] > -1){ + long limit = outputLimit[1] * outputLimitType[1].bytesFactor(); + limitType = (outputLimitType[1] == null || outputLimitType[1] == LimitUnit.rows) ? LimitUnit.rows.toString() : LimitUnit.bytes.toString(); + xml.append("\t\t<hard ").append(VOSerializer.formatAttribute("unit", limitType)).append(">").append(limit).append("</hard>\n"); + } xml.append("\t</outputLimit>\n"); } } @@ -537,48 +544,15 @@ public class TAP implements VOSIResource { if (uploadLimit != null && uploadLimit.length >= 2 && uploadLimitType != null && uploadLimitType.length >= 2){ if (uploadLimit[0] > -1 || uploadLimit[1] > -1){ xml.append("\t<uploadLimit>\n"); + String limitType; if (uploadLimit[0] > -1){ - String limitType; - long limit = uploadLimit[0]; - switch(uploadLimitType[0]){ - case kilobytes: - limit *= 1000l; - limitType = LimitUnit.rows.toString(); - break; - case megabytes: - limit *= 1000000l; - limitType = LimitUnit.rows.toString(); - break; - case gigabytes: - limit *= 1000000000l; - limitType = LimitUnit.rows.toString(); - break; - default: - limitType = uploadLimitType[0].toString(); - break; - } + long limit = uploadLimit[0] * uploadLimitType[0].bytesFactor(); + limitType = (uploadLimitType[0] == null || uploadLimitType[0] == LimitUnit.rows) ? LimitUnit.rows.toString() : LimitUnit.bytes.toString(); xml.append("\t\t<default ").append(VOSerializer.formatAttribute("unit", limitType)).append("\">").append(limit).append("</default>\n"); } if (uploadLimit[1] > -1){ - String limitType; - long limit = uploadLimit[1]; - switch(uploadLimitType[1]){ - case kilobytes: - limit *= 1000l; - limitType = LimitUnit.rows.toString(); - break; - case megabytes: - limit *= 1000000l; - limitType = LimitUnit.rows.toString(); - break; - case gigabytes: - limit *= 1000000000l; - limitType = LimitUnit.rows.toString(); - break; - default: - limitType = uploadLimitType[1].toString(); - break; - } + long limit = uploadLimit[1] * uploadLimitType[1].bytesFactor(); + limitType = (uploadLimitType[1] == null || uploadLimitType[1] == LimitUnit.rows) ? LimitUnit.rows.toString() : LimitUnit.bytes.toString(); xml.append("\t\t<hard ").append(VOSerializer.formatAttribute("unit", limitType)).append("\">").append(limit).append("</hard>\n"); } xml.append("\t</uploadLimit>\n"); diff --git a/src/tap/upload/Uploader.java b/src/tap/upload/Uploader.java index 0d5deb704c7d6a4a088fbd6a95124a971af0d460..994552b199a672a99aa8346723b9c04dab8b5b67 100644 --- a/src/tap/upload/Uploader.java +++ b/src/tap/upload/Uploader.java @@ -120,24 +120,8 @@ public class Uploader { if (this.service.uploadEnabled()){ // ...and set the rows or bytes limit: if (this.service.getUploadLimitType()[1] != null && this.service.getUploadLimit()[1] > 0){ - switch(service.getUploadLimitType()[1]){ - case kilobytes: - limit = (int)(1000l * this.service.getUploadLimit()[1]); - limitUnit = LimitUnit.bytes; - break; - case megabytes: - limit = (int)(1000000l * this.service.getUploadLimit()[1]); - limitUnit = LimitUnit.bytes; - break; - case gigabytes: - limit = (int)(1000000000l * this.service.getUploadLimit()[1]); - limitUnit = LimitUnit.bytes; - break; - default: - limit = this.service.getUploadLimit()[1]; - limitUnit = this.service.getUploadLimitType()[1]; - break; - } + limit = (int)(this.service.getUploadLimitType()[1].bytesFactor() * this.service.getUploadLimit()[1]); + limitUnit = (this.service.getUploadLimitType()[1] == LimitUnit.rows) ? LimitUnit.rows : LimitUnit.bytes; }else{ limit = -1; limitUnit = null;