You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.9 KiB
Java
148 lines
4.9 KiB
Java
package org.gcube.contentmanager.storageclient.model.protocol.smp;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
import org.gcube.contentmanagement.blobstorage.service.IClient;
|
|
import org.gcube.contentmanager.storageclient.wrapper.AccessType;
|
|
import org.gcube.contentmanager.storageclient.wrapper.Configuration;
|
|
import org.gcube.contentmanager.storageclient.wrapper.MemoryType;
|
|
import org.gcube.contentmanager.storageclient.wrapper.StorageClient;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
*
|
|
* This is invoked by the platform with a URL of the right protocol.
|
|
* @author Fabio Simeoni (University of Strathclyde), @author Roberto Cirillo (ISTI-CNR)
|
|
*
|
|
*/
|
|
public class SMPURLConnectionOld extends SMPConnection{
|
|
|
|
|
|
Logger logger= LoggerFactory.getLogger(SMPURLConnectionOld.class);
|
|
/**
|
|
* Constructs a new instance for a given <code>sm</code> URL.
|
|
* @param url the URL.
|
|
*/
|
|
public SMPURLConnectionOld(URL url) {
|
|
super(url);
|
|
}
|
|
|
|
public SMPConnection init(URL url){
|
|
return new SMPURLConnectionOld(url);
|
|
}
|
|
|
|
/**{@inheritDoc}*/
|
|
@Override
|
|
public synchronized InputStream getInputStream() throws IOException {
|
|
if (!connected)
|
|
this.connect();
|
|
try {
|
|
return storageClient(this.url.toString());
|
|
}
|
|
catch(Exception e) {
|
|
IOException ioe = new IOException();
|
|
ioe.initCause(e);
|
|
throw ioe;
|
|
}
|
|
}
|
|
|
|
|
|
protected InputStream storageClient(String url) throws Exception {
|
|
logger.info("url :" + url);
|
|
String [] urlParam=url.split("\\?");
|
|
logger.info("String encrypted "+urlParam[1]);
|
|
String param=new StringDecrypter("DES", retrieveEncryptionPhrase()).decrypt(urlParam[1]);
|
|
logger.info("String decrypted: "+param);
|
|
String [] getParam=param.split("\\&");
|
|
String serviceClass=null;
|
|
String serviceName=null;
|
|
String owner=null;
|
|
String accessType=null;
|
|
String memoryType=null;
|
|
String scopeType=null;
|
|
AccessType type = null;
|
|
MemoryType mType = null;
|
|
String server= null;
|
|
String [] par1;
|
|
for(String par : getParam){
|
|
if(par.contains("ServiceClass")){
|
|
par1=par.split("=");
|
|
serviceClass=par1[1];
|
|
}else if(par.contains("ServiceName")){
|
|
par1=par.split("=");
|
|
serviceName=par1[1];
|
|
}else if(par.contains("owner")){
|
|
par1=par.split("=");
|
|
owner=par1[1];
|
|
}else if(par.contains("scope")){
|
|
par1=par.split("=");
|
|
scopeType=par1[1];
|
|
}else if(par.contains("server")){
|
|
par1=par.split("=");
|
|
server=par1[1];
|
|
}else if(par.contains("AccessType")){
|
|
par1=par.split("=");
|
|
accessType=par1[1];
|
|
if(accessType.equalsIgnoreCase("public")){
|
|
type=AccessType.PUBLIC;
|
|
}else if(accessType.equalsIgnoreCase("shared")){
|
|
type=AccessType.SHARED;
|
|
}
|
|
}else if(par.contains("MemoryType")){
|
|
par1=par.split("=");
|
|
memoryType=par1[1];
|
|
if(memoryType.equalsIgnoreCase("VOLATILE")){
|
|
mType=MemoryType.VOLATILE;
|
|
}else{
|
|
mType=MemoryType.PERSISTENT;
|
|
}
|
|
}
|
|
}
|
|
// throw an exception if one or more uri parameters are invalid
|
|
if((serviceName==null) || (serviceClass==null) || (owner == null) || (scopeType==null) || (type == null)){
|
|
logger.error("Bad Parameter in URI");
|
|
if (type == null){
|
|
logger.error("URI generated from a private file");
|
|
throw new MalformedURLException("The uri is generated from a private file. It cannot be accessed");
|
|
}
|
|
if (serviceName==null) throw new MalformedURLException("The uri generated has an invalid serviceName");
|
|
if (serviceClass==null) throw new MalformedURLException("The uri generated has an invalid serviceClass");
|
|
if (owner==null) throw new MalformedURLException("The uri generated has an invalid owner");
|
|
if (scopeType==null) throw new MalformedURLException("The uri is generated has an invalid scopeType.");
|
|
}
|
|
String location=extractLocation(urlParam[0]);
|
|
logger.info("Parameters from URI "+serviceClass+" "+serviceName+" "+owner+" "+type+" "+mType +" location: "+urlParam[0]+" scope: "+scopeType);
|
|
IClient client=null;
|
|
String currentScope=ScopeProvider.instance.get();
|
|
logger.info("current scope used: "+currentScope+". scope found on url is: "+ scopeType);
|
|
// ScopeProvider.instance.set(scopeType);
|
|
if(mType != null){
|
|
if(server!=null)
|
|
client=new StorageClient(serviceClass, serviceName, owner, type, mType, server).getClient();
|
|
else
|
|
client=new StorageClient(serviceClass, serviceName, owner, type, mType).getClient();
|
|
}else{
|
|
if (server != null)
|
|
client=new StorageClient(serviceClass, serviceName, owner, server, type ).getClient();
|
|
else
|
|
client=new StorageClient(serviceClass, serviceName, owner, type).getClient();
|
|
}
|
|
InputStream is=null;
|
|
is=client.get().RFileAsInputStream(location);
|
|
// ScopeProvider.instance.set(currentScope);
|
|
return is;
|
|
}
|
|
|
|
private String extractLocation(String url) {
|
|
String [] loc=url.split("//");
|
|
logger.info("url extracted: "+loc[1]);
|
|
return loc[1];
|
|
}
|
|
|
|
}
|