diff --git a/src/tap/ServiceConnection.java b/src/tap/ServiceConnection.java index 40e3745205e86a5a6dcea1cdd9fa647eb5459935..1017e8d965463958574da26041cb29970815c0da 100644 --- a/src/tap/ServiceConnection.java +++ b/src/tap/ServiceConnection.java @@ -16,26 +16,31 @@ package tap; * You should have received a copy of the GNU Lesser General Public License * along with TAPLibrary. If not, see <http://www.gnu.org/licenses/>. * - * Copyright 2012 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS) + * Copyright 2012-2013 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), + * Astronomisches Rechen Institute (ARI) */ import java.util.Collection; import java.util.Iterator; import tap.file.TAPFileManager; - import tap.formatter.OutputFormat; - import tap.log.TAPLog; - import tap.metadata.TAPMetadata; - import uws.service.UserIdentifier; +/** + * + * + * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de + * @version 1.1 (12/2013) + * + * @param <R> + */ public interface ServiceConnection< R > { public static enum LimitUnit{ - rows, bytes; + rows, bytes, kilobytes, megabytes, gigabytes; } public String getProviderName(); diff --git a/src/tap/resource/TAP.java b/src/tap/resource/TAP.java index 3ad3a555d13bc52bf1060a4839bab34d5ce32998..0700298414608dd331c03ec4eec6e24f87088be6 100644 --- a/src/tap/resource/TAP.java +++ b/src/tap/resource/TAP.java @@ -55,6 +55,12 @@ import uws.service.UWSService; import uws.service.UWSUrl; import uws.service.error.ServiceErrorWriter; +/** + * @author Grégory Mantelet (CDS;ARI) - gmantele@ari.uni-heidelberg.de + * @version 1.1 (12/2013) + * + * @param <R> + */ public class TAP< R > implements VOSIResource { private static final long serialVersionUID = 1L; @@ -243,10 +249,50 @@ public class TAP< R > 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"); - if (uploadLimit[0] > -1) - xml.append("\t\t<default unit=\"").append(uploadLimitType[0]).append("\">").append(uploadLimit[0]).append("</default>\n"); - if (uploadLimit[1] > -1) - xml.append("\t\t<hard unit=\"").append(uploadLimitType[1]).append("\">").append(uploadLimit[1]).append("</hard>\n"); + 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; + } + xml.append("\t\t<default unit=\"").append(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; + } + xml.append("\t\t<hard unit=\"").append(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 651a198c2b8a5b8c518766a47eb3fdccda73a809..28c22e811af7edf035505fe94177b55fbceb3a3b 100644 --- a/src/tap/upload/Uploader.java +++ b/src/tap/upload/Uploader.java @@ -55,7 +55,7 @@ public class Uploader { protected final ServiceConnection<?> service; protected final DBConnection<?> dbConn; protected final int nbRowsLimit; - protected final int nbBytesLimit; + protected final long nbBytesLimit; protected int nbRows = 0; @@ -66,7 +66,6 @@ public class Uploader { throw new NullPointerException("The given DBConnection is NULL !"); this.service = service; - this.dbConn = dbConn; if (service.uploadEnabled()){ @@ -74,7 +73,23 @@ public class Uploader { nbRowsLimit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1); nbBytesLimit = -1; }else{ - nbBytesLimit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1); + long limit = ((service.getUploadLimit()[1] > 0) ? service.getUploadLimit()[1] : -1); + if (limit > 0){ + switch(service.getUploadLimitType()[1]){ + case kilobytes: + limit *= 1000l; + break; + case megabytes: + limit *= 1000000l; + break; + case gigabytes: + limit *= 1000000000l; + break; + default: + break; + } + } + nbBytesLimit = limit; nbRowsLimit = -1; } }else