From f6cdc9a9aa78118e2fa88f9cfd7c098598b64ee8 Mon Sep 17 00:00:00 2001 From: Roberto Cirillo Date: Wed, 4 Aug 2021 15:53:21 +0200 Subject: [PATCH] deprecated some old classes parameters region and token passed to TransportManager layer --- .../directoryOperation/DirectoryBucket.java | 14 +++++++--- .../service/impl/RemoteResource.java | 6 ++--- .../blobstorage/service/impl/Resource.java | 2 +- .../service/impl/ServiceEngine.java | 6 ++--- .../service/operation/ChunkConsumer.java | 3 ++- .../service/operation/GetFolderCount.java | 2 +- .../operation/GetFolderLastUpdate.java | 2 +- .../service/operation/GetFolderSize.java | 2 +- .../service/operation/GetHttpUrl.java | 2 +- .../service/operation/GetHttpsUrl.java | 2 +- .../blobstorage/service/operation/GetUrl.java | 2 +- .../service/operation/GetUserTotalItems.java | 2 +- .../service/operation/GetUserTotalVolume.java | 2 +- .../service/operation/Operation.java | 24 +++++++++++++++--- .../service/operation/OperationManager.java | 4 ++- .../transport/TransportManagerFactory.java | 6 +++-- .../directoryOperation/DirectoryBucket.class | Bin 9052 -> 9233 bytes .../service/impl/RemoteResource.class | Bin 8127 -> 8284 bytes .../blobstorage/service/impl/Resource.class | Bin 6512 -> 6606 bytes .../service/impl/ServiceEngine.class | Bin 30654 -> 30714 bytes .../service/operation/ChunkConsumer.class | Bin 6535 -> 6657 bytes .../service/operation/GetFolderCount.class | Bin 4742 -> 4829 bytes .../operation/GetFolderLastUpdate.class | Bin 3842 -> 3929 bytes .../service/operation/GetFolderSize.class | Bin 4741 -> 4828 bytes .../service/operation/GetHttpUrl.class | Bin 7125 -> 7214 bytes .../service/operation/GetHttpsUrl.class | Bin 7113 -> 7202 bytes .../service/operation/GetUrl.class | Bin 5622 -> 5709 bytes .../service/operation/GetUserTotalItems.class | Bin 4970 -> 5057 bytes .../operation/GetUserTotalVolume.class | Bin 4893 -> 4980 bytes .../service/operation/Operation.class | Bin 13419 -> 13836 bytes .../service/operation/OperationManager.class | Bin 5832 -> 5962 bytes .../transport/TransportManagerFactory.class | Bin 5400 -> 5476 bytes 32 files changed, 55 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.java index aeda214..14a957f 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.java @@ -28,9 +28,13 @@ public class DirectoryBucket { String fileName; String path; String[] server; - String user, password; + protected String user, password; + protected String region; + protected String token; TransportManager tm; - public DirectoryBucket(String[] server, String user, String password, String path, String author){ + + + public DirectoryBucket(String[] server, String user, String password, String path, String author, String region, String token){ if(logger.isDebugEnabled()) logger.debug("DirectoryBucket PATH: "+path); //coding the path @@ -39,6 +43,8 @@ public class DirectoryBucket { this.server=server; this.user=user; this.password=password; + this.region=region; + this.token=token; } @@ -91,7 +97,7 @@ public class DirectoryBucket { logger.debug("CHECK REMOVE: "+bucket); String[] bucketList=null; bucketList=retrieveBucketsName(path, rootArea); - TransportManagerFactory tmf=new TransportManagerFactory(server, user, password); + TransportManagerFactory tmf=new TransportManagerFactory(server, user, password, null, null); tm=tmf.getTransport(tm, backendType, resource.getGcubeMemoryType(), dbNames, resource.getWriteConcern(), resource.getReadPreference()); // TerrastoreClient client=new TerrastoreClient( new OrderedHostManager(Arrays.asList(server)), new HTTPConnectionFactory()); for(int i=0;i mapDirs=null; try { @@ -128,11 +128,11 @@ public class RemoteResource extends Resource{ return dirs; }else if(engine.getCurrentOperation().equalsIgnoreCase("removedir")){ if((dir != null) && (engine.owner != null)){ - DirectoryBucket dirBuc=new DirectoryBucket(engine.primaryBackend, engine.getBackendUser(), engine.getBackendPassword(), dir, engine.owner); + DirectoryBucket dirBuc=new DirectoryBucket(engine.primaryBackend, engine.getBackendUser(), engine.getBackendPassword(), dir, engine.owner, engine.getRegion(), engine.getToken()); if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")) dirBuc.removeDirBucket(getMyFile(), dir, engine.getContext(), engine.getBackendType(), engine.getDbNames()); else{ - TransportManagerFactory tmf=new TransportManagerFactory(engine.primaryBackend, engine.getBackendUser(), engine.getBackendPassword()); + TransportManagerFactory tmf=new TransportManagerFactory(engine.primaryBackend, engine.getBackendUser(), engine.getBackendPassword(), engine.getRegion(),engine.getToken()); tm=tmf.getTransport(tm, Costants.CLIENT_TYPE, engine.getGcubeMemoryType(), engine.getDbNames(), engine.getWriteConcern(), engine.getReadConcern()); dir=new BucketCoding().bucketFileCoding(dir, engine.getContext()); try { diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/Resource.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/Resource.java index d42d634..51cbbfb 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/Resource.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/Resource.java @@ -125,7 +125,7 @@ public class Resource { protected Object retrieveRemoteObject(RequestObject file, String[] backend) throws RemoteBackendException { Object obj=null; if(((file.getInputStream() != null) || (file.getOutputStream()!=null)) || ((file.getLocalPath() != null) || (file.getRemotePath() != null))) - obj=engine.service.startOperation(file,file.getRemotePath(), file.getOwner(), backend, Costants.DEFAULT_CHUNK_OPTION, file.getRootPath(), file.isReplace()); + obj=engine.service.startOperation(file,file.getRemotePath(), file.getOwner(), backend, Costants.DEFAULT_CHUNK_OPTION, file.getRootPath(), file.isReplace(), engine.getRegion(), engine.getToken()); else{ logger.error("parameters incompatible "); } diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java index 4d6c022..907851f 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/impl/ServiceEngine.java @@ -277,7 +277,7 @@ public class ServiceEngine implements IClient { Object info=null; try { if(((file.getInputStream() != null) || (file.getOutputStream()!=null)) || ((file.getLocalPath() != null) || (file.getRemotePath() != null))) - info=(String)service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption()); + info=(String)service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption(),getRegion(), getToken()); else{ logger.error("parameters incompatible "); } @@ -309,7 +309,7 @@ public class ServiceEngine implements IClient { Object info=null; try { if(((file.getInputStream() != null) || (file.getOutputStream()!=null)) || ((file.getLocalPath() != null) || (file.getRemotePath() != null))) - info=(String)service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption()); + info=(String)service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption(), getRegion(),getToken()); else{ logger.error("parameters incompatible "); } @@ -920,7 +920,7 @@ public class ServiceEngine implements IClient { service.setTypeOperation("forceclose"); try { if(((file.getInputStream() != null) || (file.getOutputStream()!=null)) || ((file.getLocalPath() != null) || (file.getRemotePath() != null))) - service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption()); + service.startOperation(file,file.getRemotePath(), owner, primaryBackend, Costants.DEFAULT_CHUNK_OPTION, getContext(), isReplaceOption(),getRegion(),getToken()); else{ logger.error("parameters incompatible "); } diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ChunkConsumer.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ChunkConsumer.java index 5941774..c9d68ef 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ChunkConsumer.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/ChunkConsumer.java @@ -13,6 +13,7 @@ import org.slf4j.LoggerFactory; * @author rcirillo * */ +@Deprecated public class ChunkConsumer implements Runnable { /** * Logger for this class @@ -116,7 +117,7 @@ public class ChunkConsumer implements Runnable { start=System.currentTimeMillis(); synchronized(ChunkConsumer.class){ String [] randomServer=randomizeServer(server); - TransportManagerFactory tmf=new TransportManagerFactory(randomServer, null, null); + TransportManagerFactory tmf=new TransportManagerFactory(randomServer, null, null, null, null); client.set(tmf.getTransport(null, Costants.CLIENT_TYPE, null, null, myFile.getWriteConcern(), myFile.getReadPreference())); } if(logger.isDebugEnabled()){ diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderCount.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderCount.java index f0c3e5c..b7ad759 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderCount.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderCount.java @@ -49,7 +49,7 @@ public class GetFolderCount extends Operation { if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")){ buck=buck.replaceAll(Costants.FILE_SEPARATOR, Costants.SEPARATOR); //remove directory bucket - DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author); + DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author, getRegion(), getToken()); dirBuc.removeKeysOnDirBucket(file, buck, rootArea, backendType, dbNames); } return bucket=buck; diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.java index b74137c..709952f 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.java @@ -35,7 +35,7 @@ public class GetFolderLastUpdate extends Operation { if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")){ buck=buck.replaceAll(Costants.FILE_SEPARATOR, Costants.SEPARATOR); //remove directory bucket - DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author); + DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author, getRegion(), getToken()); dirBuc.removeKeysOnDirBucket(file, buck, rootArea, backendType, dbNames); } return bucket=buck; diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.java index 187e1a1..ed2baea 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.java @@ -49,7 +49,7 @@ public class GetFolderSize extends Operation { if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")){ buck=buck.replaceAll(Costants.FILE_SEPARATOR, Costants.SEPARATOR); //remove directory bucket - DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author); + DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author, getRegion(), getToken()); dirBuc.removeKeysOnDirBucket(file, buck, rootArea, backendType, dbNames); // String bucketName=null; } diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpUrl.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpUrl.java index d8be9b6..b95dda1 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpUrl.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpUrl.java @@ -74,7 +74,7 @@ public class GetHttpUrl extends Operation { private String getId(String path, boolean forceCreation, MemoryType memoryType, String writeConcern, String readPreference){ String id=null; - TransportManagerFactory tmf= new TransportManagerFactory(server, user, password); + TransportManagerFactory tmf= new TransportManagerFactory(server, user, password, getRegion(), getToken()); tm=tmf.getTransport(tm, backendType, memoryType, dbNames, writeConcern, readPreference); try { id = tm.getId(bucket, forceCreation); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpsUrl.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpsUrl.java index aeca656..d1be6fb 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpsUrl.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetHttpsUrl.java @@ -75,7 +75,7 @@ public class GetHttpsUrl extends Operation { private String getId(String path, boolean forceCreation, MemoryType memoryType, String writeConcern, String readPreference){ String id=null; - TransportManagerFactory tmf= new TransportManagerFactory(server, user, password); + TransportManagerFactory tmf= new TransportManagerFactory(server, user, password, getRegion(), getToken()); tm=tmf.getTransport(tm, backendType, memoryType, dbNames, writeConcern, readPreference); try { id = tm.getId(bucket, forceCreation); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUrl.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUrl.java index 0ca19ec..9f869c2 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUrl.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUrl.java @@ -58,7 +58,7 @@ public class GetUrl extends Operation{ private String getId(String path, boolean forceCreation, MemoryType memoryType, String writeConcern, String readPreference){ String id=null; - TransportManagerFactory tmf= new TransportManagerFactory(server, user, password); + TransportManagerFactory tmf= new TransportManagerFactory(server, user, password, getRegion(), getToken()); tm=tmf.getTransport(tm, backendType, memoryType, dbNames, writeConcern, readPreference); try { id = tm.getId(bucket, forceCreation); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.java index 9e918b3..b89c084 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.java @@ -51,7 +51,7 @@ public class GetUserTotalItems extends Operation { if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")){ buck=buck.replaceAll(Costants.FILE_SEPARATOR, Costants.SEPARATOR); //remove directory bucket - DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author); + DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author, getRegion(), getToken()); dirBuc.removeKeysOnDirBucket(file, buck, rootArea, backendType, dbNames); // String bucketName=null; } diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.java index 88f3f9c..c0e367a 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.java @@ -51,7 +51,7 @@ public class GetUserTotalVolume extends Operation { if(!Costants.CLIENT_TYPE.equalsIgnoreCase("mongo")){ buck=buck.replaceAll(Costants.FILE_SEPARATOR, Costants.SEPARATOR); //remove directory bucket - DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author); + DirectoryBucket dirBuc=new DirectoryBucket(server,user, password, remotePath, author, getRegion(), getToken()); dirBuc.removeKeysOnDirBucket(file, buck, rootArea, backendType, dbNames); } return bucket=buck; diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Operation.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Operation.java index 33b1a1e..8f71127 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Operation.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/Operation.java @@ -33,14 +33,16 @@ public abstract class Operation { final Logger logger=LoggerFactory.getLogger(Operation.class); String[] server; - String user; + protected String user; private String owner; - String password; + protected String password; String bucket; String[] dbNames; private Monitor monitor; private boolean isChunk; String backendType; + private String region; + private String token; protected static TransportManager transport; public Operation(String[] server, String user, String pwd, String bucket, Monitor monitor, boolean isChunk, String backendType, String[] dbs){ @@ -372,6 +374,22 @@ public abstract class Operation { public void setServer(String[] server) { this.server = server; } + + protected String getRegion() { + return region; + } + + protected void setRegion(String region) { + this.region = region; + } + + protected String getToken() { + return token; + } + + protected void setToken(String token) { + this.token = token; + } public String getUser() { return user; @@ -383,7 +401,7 @@ public abstract class Operation { protected TransportManager getTransport(RequestObject myFile) { // if(Objects.isNull(transport)) { - TransportManagerFactory tmf= new TransportManagerFactory(server, user, password); + TransportManagerFactory tmf= new TransportManagerFactory(server, user, password, region, token); transport=tmf.getTransport(transport, backendType, myFile.getGcubeMemoryType(), dbNames, myFile.getWriteConcern(), myFile.getReadPreference()); // } return transport; diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationManager.java b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationManager.java index ae0aa7f..4acabe6 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationManager.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/service/operation/OperationManager.java @@ -45,7 +45,7 @@ public class OperationManager { } - public Object startOperation(RequestObject file, String remotePath, String author, String[] server, boolean chunkOpt, String rootArea, boolean replaceOption) throws RemoteBackendException{ + public Object startOperation(RequestObject file, String remotePath, String author, String[] server, boolean chunkOpt, String rootArea, boolean replaceOption, String region, String token) throws RemoteBackendException{ // setUser(author); if (logger.isDebugEnabled()) { logger.debug("connection(boolean) - start"); @@ -55,6 +55,8 @@ public class OperationManager { Monitor monitor = new Monitor(); OperationFactory of=new OperationFactory(server, getUser(), getPassword(), getBucketName(), monitor, chunkOpt, getBackendType(), getDbNames()); Operation op=of.getOperation(getTypeOperation()); + op.setRegion(region); + op.setToken(token); //start specific operation setBucketName(op.initOperation(file, remotePath, author, server, rootArea, replaceOption)); Object object=op.doIt(getResource()); diff --git a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManagerFactory.java b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManagerFactory.java index dfe77ce..8ca8916 100644 --- a/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManagerFactory.java +++ b/src/main/java/org/gcube/contentmanagement/blobstorage/transport/TransportManagerFactory.java @@ -36,10 +36,12 @@ public class TransportManagerFactory { private String region; TransportManager transport; - public TransportManagerFactory(String server[], String user, String password){ + public TransportManagerFactory(String server[], String user, String password, String region, String token){ this.server=server; this.user=user; this.password=password; + this.region=region; + this.token=token; } public TransportManager getTransport(TransportManager tm, String backendType, MemoryType memoryType, String[] dbNames, String writeConcern, String readConcern){ @@ -72,7 +74,7 @@ public class TransportManagerFactory { if((implementationCounted==0) || backendType.equals(Costants.DEFAULT_TRANSPORT_MANAGER)){ logger.info(" 0 implementation found. Load default implementation of TransportManager"); return new MongoOperationManager(server, user, password, memoryType, dbNames, writeConcern, readConcern); - }else if((implementationCounted==1) && Objects.isNull(backendType)){ + }else if((implementationCounted==1) && (!Objects.isNull(backendType))){ TransportManager tm = impls.get(0); logger.info("1 implementation of TransportManager found. Load it. "+tm.getName()); tm.initBackend(server, user, password, memoryType, dbNames, writeConcern, readConcern, token, region); diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/directoryOperation/DirectoryBucket.class index 5fbbeacf0cc8d8782f5f0297a24bf6062847c66e..0449f55a3040bea97bdd21a9186e06611fe85b33 100644 GIT binary patch literal 9233 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 literal 9052 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 U%LS}=(YaKU_*7~>WoWAIcZD*VGynhq diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/impl/RemoteResource.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/impl/RemoteResource.class index 479094820cd8332b4ac1bc8ca9dcd00198cea9df..c97ad0f55c70c2d254fe4baf3be3644dd5de51e2 100644 GIT binary patch delta 1284 zcmaJ>Yitx{6g_u$y0g2T?PIpv_m&EkzO4$VXA81Rb>K57(DO#3TR(#`Y(Uy8=$295>f8B5HIrrRq&zJdz zE}dAKF?Qy~g8&xOA{jP9ofvVHiKiq_Ps1f?7cIwO1*0e@xY{*+rPdybgxy$7KJ zD+1}|f%g@BV9KSl+?r@e*XknSRxO%rbzH%OiKQh62)4~ZgE*n!BYfQVbb1L%pAuI7 zJ-Sm&s)d;iVLha8apQA*DdP*mzu;G~SzX}$o&AVv8zNm=TPP~y^uK$TcoO*2 z^kSN@ZO)5j?1!3DzS@a1gp>`DaC^j!1VJGpn}~V)c?pG55GQ2Zw5hd2)2|4vXCvA| z;db7FWQCmM64z(l>`En%ObWp-s&oAL3Z^A}|&S^t>tk4AMyoe>ZFi(|(O%&zIiqj3y2TZLOJ z_CYI*{I_YLKHFMYXk39D!!ul-vW9 zKE$x%rHmIywSo4<$=B?qoB_%kf(?)189a*s_0Rztrc}{VG%u#16T6@@*2U;%?7?l= zi`&tQtuSy0hH)njBZe{Dg>l@?KhZXv#69H4y;O?(=qhX{9Xser+)q8&NeA!%9m0cj z6pzqx?4n8R#v*KI%X*Xt;$6s4zL+h2*Cq*m;N)nn%Tuc#Hx% zi{?Y(hP||aO89Zn(UPpNb0ZJ)&SrEWYi7@Bl(L3ZS;iW>8LNkTmUowAkc=HN24yNY zk5>j9)5wsi(v^U18e3%~X4#23UV^F2qtw$#OC@ez&0;n>hiW*w`Aur2bLsr0d4B;G CIAEjz delta 1195 zcmaJ>YfM{Z7=GSz+S8U(T3Xt{MqvWmpqK22Qxjr!uA&A7<1`Y2A*toq)j>PU89FuA zc`L>l6TijjW}+rDEdFt`aH_U}EYVhX(|MUUyk9n*POTT1BKRGSk@&|SC-3)t&+|U- z^S)osH@$x9V#lHRmnQ+Nqo4=_A;A?LfyxRki|Nl^~)>Xm9Of+g;~-+OD^N z@R|f8OjcZpLlO?-2=m+fOvfa=fj8L>dt2x&32&o~V2{a4Pb#j+;bbBzrxIGmyAn=l zSQW=M%8`M8p#t8Q@Bu!|mhCMhOcOT#nC-g6lrr$M7 zFb*XXv7{Ac{2}2_%(1d-q6PC37LX@6ZrmE(EGw7A2l+e(;)xhGB19 z<0$d(3Kfs&;dMP6)x&W;yrbg136!XtZ%aNE{eI_1Dn9NWgSB0#6I6Uj?Lx2!n??_+ z_(nS|!Tch=(^mU+mFJv4sd)YgobnfOVv#zItBW|2N12`WHkfnxwaYosQU>FZT z;n)aAZ^e_i4bR|q?8P0}hdc2C?m`Y}6mU1DupP&652kT15$>Z(+)qJds1u{4;6cjZ zA!67;kKa?4&GLJ(vH#H^8FZB-Y_PzT+#ZK^T-q4>pmTJd5@&pk-8x3U0zk zb+jA;x3Pj&P(1`*a4&hOfxiKr=v&OF;Dv0Q*T~V8Tysg|9Il~fHgSzz9J>_O1>U01$ zXsse|tKde&E(&5CsRh9g1`7%<1fdH-5dT{1Uu*SFQsgo3%suDMz4y$_q#mu)rsi+n z0?eQm<(l9T}@zgxSO23l{h+qdk(~6OeQ3`6%@%E51o)yeZ6ck z6_?~wXBISxODda7HkBDn$0X^JLNSGvq{S78NLp$KqqW=C;3Qgc3LO~1KAgrOjKabh gj?R`Zps6zU{|gw!7(8rhgpDiP4t|?@Hs+v)f2KOW761SM delta 678 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 Wk+nU_-0HY2#-t$TI6Y!8i-&)y6@Q5U delta 621 zcmXAmSx=K;5QU#9Ed>S90;zRDK~Sh0XfdTOh#OV`K}D$`xS+TsiVJAm5CMszDEWe3 zs5h7p6B7-oi3Srxh&Q6YfW+_z{0Rm;>cuzjnR(|ubLM=Vq2Bd#C#FZg03q{waT(T%xA8}no_izQC0?|DHkDdgd21p)HOqJZTDSuI?wxQ#Vb zv6dJ`@xt_6D+{T;SnXk!Q9>aRO4-N`Hc_d3KU-*0a$hKzs-FzBYa#v%#WuBuGgbN2IQvA{yAt zQ4Z0lYLn10PH>zS#dDI-PBTwA#UQ77sp=4Cd8eCioOjawXOdgwffuaC>Go$Y?E1vl zGM~jF?(tyo11~-@5%GNHM=aopkNX!`N293G*Zl7sW|E(DO3+GG+gYr5QQov_o6EBD z3OQVrm2Irj?FO!~o$C_aCP6p2#7*vSOa9#EmGBUE8K#Txbc?r#Dem)&UVihyl6YvD z^mSMck1V95gnrw}6RT!G)-dEz!|>TSc;3f zW{3KhI$FCl>*f^?Jt_<;oU!7qE5)(vQWQZB{LA(~DKGIE`kRd*aXLFi< zKC?)I674LpESwW^(!&b=G7#9@wwaboCRvf$klEoT)1lD%9s!m3AZeWEF^>t2|L2B z>VR7DTc`?tP)caT#2>(ly>ZWfAP|lhSj@~bXXd=;`4=vQnS;~)Kfnk(8cT84G=T+;MTej3^ zbKEtkzM6cxtQsat lSzv+Z!-^9*JlPSOAX diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderLastUpdate.class index ab8bf06e0750ed9e4ce598e3964c36b4a0a75bca..938b6ba70d8a306c9f6c4a0f0a38770b490e9c15 100644 GIT binary patch delta 465 zcmXw!OHWfl7>1vz&^c#%PJ>MhJyg1pn*~jbmxYOo1`-xVP1Kmc#%Me(2&E{k;oG${p>N&1c%u}~G{>qQ_qcBtoe%24>S_0*QVaH%=~au?Pvlj@UP@He^6E}v zSh;yzjNmQUL;jFDXGi@^Pi}*P)c7WoXWhW<4|LF)Tca#>XM;*E(4*_jTI(OLmFT6$ zQQ9S<@IQz&ft)0ghYSc|Q$3=SSfn0{IuNN2GPFeMiFmD%ddd;v^vNG;;%QEBjXCCV zD3PMhGr@f>ogT67Ka6y1u4snkkz>4&)s?G)#K&bfTQo*eFE@E*!(`vd*Ly66H+w9G feHOz$iy>lZ%hSVK`z4uGOZI2-uzn|jF;@Nok!@Ka delta 443 zcmXw!%T7~K6o$Xu((azqQ*0VyIX3Nt0<{8>SO+k&iAe{BCWL{J5Q&B&2$f3(yntLR z-X~&^$;sf{&5>}7xVDJ2Ut-b#B{l8ONsp$8!({DhI4;r6h$o#af ze!g*{!{a<~&`c@r?)DGZxOP4f8R)q~7kgIR#}6h`BAB*Ud!arn+uEMG~oFCI>Coy5ed# zkUd~p&dd>yvaTLIWYPSM^sSfZW`)bdWpwht0qwZ*5-T3lBV={8L=vB;mPPqJb%_Km zo?4Mwz*A4?AV`MWJe8WJpCZqAPKXjQR$0U1h5U5zb^c?xQ!}C|$dX=JqNG{J@QVf5 zU)Z=4+d8IdzP4trZ8unKUNu;3nk+U=7F*H?OEgaxuTA_yD*a|pynI}gJLrW`Uf6mV J#XGO}{v1hNOc?+G diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetFolderSize.class index a1b12336d644b274d68b9a43907a8ff752bb7262..579256a3824add0ac8fa06b805866b7b3b75bceb 100644 GIT binary patch delta 518 zcmXw#OHWfl7>1uYl%Af$DYPtr+7K7^z@e;6BoY%6nwYpV(HIllpoT(}6vAysLSkZI zVWMT^uHXf{RxTD>f{8!CwM*T*qi2Hzw|_(c!$9b1Zt;EGZrZdMxf2 zk9>VMo-7_^bZ=cWv*MAV)sfycj~ApB_Q3t?_X_!muyx&IgIDE;bva9Y(WQ91+R?w_ zIaSh4^;7Cw`AL0^<>YX11$9<0C$6d<{U?z=pRMpz#(b59D^AMkOxda0>^{pfRx7;J z4au&V0$t3|O|$e4{!gHVlRCtL*B($zW>l zl*Q%iDT~V)i^~~{i(yIRXrnB|fdoY)xWh!Zi4(pen(eHxzbne3DcqY^D)S3rT~RT$ F>IpzTVJZLs delta 408 zcmXwzyDvmR6o_$zYj2k@=w&iZMJ|70U3akT97Ztw}A*qjgI05v79-shQN!#wJ^2lfY%0 z9W46gr-Kpsq&;FXW-=s02HBO}lBcA^`{cAA+3R!Ta8d>l5JiHrFAZxc`&RaSZMn~B6h7YbdFP&c@4LsI zIo9(?&NzDN@h1UvQ^!H0vo=R~Uf?J$AtVc4Wt&$hPL>T2UKDsqvO2SalQ(!wF5ne` zG+rfa@4P11TH6{tMQy=>qPp`sl_)*{|Tt!F~{Y~D; zjfKr+cckQv>G*}9+5;O0du=KEP2l&SE?pfbBGgo-+_GPCE5&lb;nsIkT#zC=XxyQ9 z(y!>G5*kNb-?N9NO13x68KV_%%r5#e;SSOTCCT6xC9hnlOc3IoYq!XN5L82{-~zL~ zt&SkLp1sSRa(8l`PHCQfXz;RZPAVG&okeE{d(3uqH8p8u1rM9+;%lfmSTuX++(W5` zMP+6WbR_xJ?k7jBVqv)JQ9RA-8D7tJg?NtF3v+nc(Yh>+xz~8Tk>%}}rC5m&Z$B1M zl77EA#0QT05H5CfsSNQ+6}jOmE*(yPK8H&LA)G_j9;ufdw}o z#t(#hkdZjb{COoaME)>-jloh6@Mq$n7kPe3aWwMvyI}Bs1)ut0qo1P#9N)^PZ5YIr zxRv)iF@#xMjn%BYc4=tru+YRuo*#d(6BMC8(Slfn{$f5Jp}#q*MCczz31(*zGE%wS zUi^zw(70JQ=5d-?`D1BC{50}`)6_h3@}dqdcrWhby@x{zH@Y7U06B~k%p6%B*d*}8 z>q0!RJTBvdeUTS;MG=Zg7Y*qi^8G7$365r$*vO{!*^so5RyoSRim3LCXz48||C3va zN%bL_^VH}lvR!r_x3k(hBkEfza!$~)X6;N9o0!3M$YDF1yn|0JZow$qJdS-Rpo)pe z>h7fhvF!8_%HRn$AcF_VX0KvgVK1G>D9$w|=zK;B6l!5xV$=%3PoRdE%2_Ekt&OoE M|8I7)ydBB^0EPk_%m4rY delta 1094 zcmYLITTB#Z6#mZc?94F!+;*@y3&I$Y076V!66n6DRjNiIUOm z>o3=7r=K1B2tX~(8P+OtvnTM0Kp3Y9(TYv(a9)|aE2O`)J`04i0wKsgIxkQL)khZv zK1DG>>1=PZw%U${34AVa371D6=ay6c7XqbFHC)Bl3cez|vM;Z~oy?1b1Um4I+m~Oh zU&VESZ!t&+btHNmTgCV8k^IH+9|>e?xQW{eZV~i1tv+i(!b-*#H1v1a+fwnKq`)04 zBxo@^)o4486|;SQ{|vl?`vMQJo{$rFmfG!a#Tt@Ud&2Hi@iRd-S1)c}Zu+!e1b%h5 zgvYz^l#re3wUSQ4O2w10D35**{|Y?wCn!8&d5@D)`JGVMZaKEu(wi{tey-?9*_~$G z@eAIifS@2rJR)HyW2tUJu%dE>pO6J9q`JHG@_8CTa6faK)oX3#I+X-#Z)twDrru}f z2+E~A_l#aHhp9jz-F>9b56+|)+<66cG;5@-;EFVmf{HA@wjqkj`!|PlPZx;;72zmJINIK+)uM~UuGAi%K%Td*5dbl=@`qptQY7Kukilsiq z!?N%Xycw#88~pUJ(ua3P2e4y;2|LGdkMKT9eVnfR>3JoS$M7%!Lq5c&y@*9v!j}_7 zA-{GNG~QS7sS&f##M#xHUxNm$<>)$WM>Ahe3kI=)^T6vFu`m$f6Y$y)eq#rS;Sheu zTm;hS4;85)y zVhq%CgAgZ9OpANM;^uo8no`DixG^nzZzl7PZ9(CI%4{n;NGY_X;iba5FSZHAl1-6I+t@@fQ#x*orQ5g_ zNgx&0YgE_L&=cq6cLkz|DfGTT9ZZEj6!-|W1f#!iwYSAD zs``%wF5;8@uU6Dk^0Gi0W&&3+ZQxTmUAc-rlTB4i?5p@f;7g1XqML>aMc>4Axw)!s z>}vwK3C!R-1K$$t&E8gT>5w;^U)sKHlRq-b8yEOq?K#1F?(~aAFYl}TZDn{CKMDMd z9zt@kxWeyyGT%Pz^$q#`CVnNv+%;`o9j;3IUEmL_Xr;?zHP;b17wzBlp@(ks7L%7wzRVZ@*Q2K_A-z z6LEg7dnp^6#8hwN8#u!2D6iv<0p8|yY654oMx$decb?aK&3yX6(Vb|33vY&$qA%43 zxRQ;%g8Q?k$_()NBr?5|XzjJGO<;ve3Gkrx6`ve4z&CsiT9H%uhY4(-;)JIU;zz=Z zNGlvx{xVw`Aa@YIX>ek%^IMTc2XdH^JLc$PFoHEXy6D95{AIj!j@aO#xoMBZl$5&QR$KVT3g0Q9^lx-0Io7 zC`X%1Y-qxg=75ZV%Ch=wPQ~qH?a+c{bBuRQ-tjJot(W(_+hQGwV|?K7A(KL6 zb8ftlvG~}ViLEMqDoD!aIA552E+lStx4A2FZa%xBcl+kdL~(39@9-s;2zEA8?8_7i zZZ;F}w=du>zH#`LL7{G}usSn*OSU)f4(Bo>7T*ie)W%f<>rw&jM~9zSqoqdzl3+}@ z#ZjU5rg3ja{LwZ}C@yYw^M#yS9Ls0Z+R%Oc<8UgdYiiwfkB*O#^E>dje*iBlU8IcO=mo zjZ1?m3GYN=dH75@%WG@smPLErhNDKQh((Q#YD&`4S;|B0`#7NMSzXUf^L*NDPnwEf z(DhQMZbyGS?9Jwvms9EyK5&FX;Svo`*TZb{4M zGd+DS3*cANC2lV(Vdo5A3-{9!;7a6o|3xZ!h95#Cqr3HOT*yi;)yafesBO1n>)xk- z{Vd{g^32!yo*Ksl~e3&tGZ{9{m!+r?o@NL`Vy=edWM-{G#)< z&I3G1s6@Ah7}~%?G=TIdj;Q6}ybyn@5X*h0=2TF;r>`Q>y;aZ2KwP^jYX5xLX?1p1 zjTP}aI(-peB57lel8~Bd&aIHDvoZchPZ|kX;7jd(iFs~gN)~!|G`8KEmN*h%Z;>lUMo4fW+ORR!Y~F`{86 zxoL32oh{hvzojU5mAS}GMPl|OcP#F5PZ8L6s6Fi{@+y|?GI`*(MQZXNDO5bnG&2T| z-SJ3q=@Z>*SXymx(&?5~M+c8A;5g4MUbyp-SkWs*FutRvu`aIZHx_S)iVL^EkQk%G2+omQ4ydu~Kv5VTGw4%XE(i&87dyqoG2V)IEsc9j_1%y0^ z;6p*=zNlcZQmDJFZExDfwr+K))_vdbUl7CxAJn-K5zfr{<~!faoHLx+r9YNb%={Xk z1RD6F;Zj7c<(_Kmt4|+{em6>UoHx+8popCKwyL3~)raDefd{XHt{BWG`P|+`&BpB+{w+_`&vMSNERIw7~-!75-GR zdvh|ANu-jFzN?fYJTiD}MJvL=Ckk)nw%GO!l@9&P;Q3IhVyipbjgC)d(5E8a0=c%@ zVa|%36YI;Fay#A#-e=nk=tqZ0M9o-$GH`1@GO2}lIlK3))#vN8c)V&W>I zSM*3phkGrj?jm|4$RlhoCk1(>T@P=0CtoBkKj<{?Ws+w^xrmbA(plF~8VAIV$@XvM a9CEs`O8R^dtt-e!J_+#471HeFGrm8|Bc9R# diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalItems.class index 758f9a781e117a041664c8853474b9796454876b..a15232ecfd0e9cbb2c9982d58949abe7bd81dcb7 100644 GIT binary patch delta 531 zcmXw!%}Z2K7{-5R)Vbc{Wpr*IdKn0kA!Sk&`Y?uu7-*%@A|lXD7~PSGbkRhFm=LX6 z6vJ6W8!he2${L&TPB}VdANB$DFVwpKpheL;H(i|fJnwVP`##U}YtMRD+tA#(qQi4um}<*{S}OTYO{tnm#=6v7 zb1arsYvyL`lG-RWwq_z;9vdw_AEkN&CVMt0^aNa;;f5KBA5|GM8&CA60%qjgt8hPU zd-h(>@|sd*87Z?6@GRw7Bg^E9(zc!o??Joq`A#u=E$%^6mtJ{*h#x|qR30e zB|sgONDv88Sx`fWI`C)=(Xwz&Aqv<{ltY}RBAi8*Q@r9e%}n94LRHe_p`TV74*X%* z;1uS<{a;x%c%FFc9{r@NnLQzOF9LInVcTc;0uf?Wnck;B>nR+~&6?qtSAM00Al*k9ir@}G&>meiTV%`z|B_j%i1=2f28rqI}{^9<((SqCFbNTl=+bG^`lKP>oU6Tvbp2l8_#i<36f0G#XGub5_9IvPctnt zNfN6(m*W5FGciH|tqIixbP=Bm0ez8OZ9wZ>AxtL^*^r$kMK50|Qb!J#5}R0z!Y%5l z={TWJGp2d-SAHs9P?p;gPeu~L^4dF82HdR*J0|X3Z~A^-$L7a*9h)_i_Pj_?pdm$^ Tsu}k#tDh$CUDA7^2=VJ5LMmcM diff --git a/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.class b/target/classes/org/gcube/contentmanagement/blobstorage/service/operation/GetUserTotalVolume.class index bc6febc2ba5ef224e0ccf8af14d9c8fc3ecf9f81..14d48a525c72aeaecefa730a2358d6a04a925f21 100644 GIT binary patch delta 482 zcmXwz%S#nu7>A#4Ovf3gqh}&@I8r2Hayo6yGPM>Hu3QvE1kyr`MhS1Ai3p0~(oMv- zXrq>9cTMfsoV;c?7p@B0^;ZaO6bj!n>Eiv~-}ifO&t&DF%EFz0tD8U#-%SjK{$VsM zHT|+{6_XBANVeL82RDQE`#s$@il+|KSvOzYTRk0tn2&kpU^1&1tJ1!6Lf_iNrstv%d^gTrk9&s=DEbnkT+V# zuZ;{-%R}nqYy&4{U)%q!6jLHU+0Q#V1vIM`NMJ;2QB+Q(O7S=rsU`7pBlVs$$jX pt-7#zh-35V5Xa^S$L0vfCc-K5sbEY0c2B9#dfzQGzsf>`ZwKA(Xw(1z delta 460 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 literal 13419 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 delta 1065 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 YHv!@MhIBE}O^UmyC;9$BOf0zdFM8joDF6Tf