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.
storage-manager-wrapper/src/main/java/org/gcube/contentmanager/storageclient/model/protocol/smp/SMPURLConnectionOld.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];
}
}