2013-06-28 18:42:10 +02:00
/ * *
*
* /
package org.gcube.portlets.user.workspace ;
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor ;
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.net.URL ;
import java.util.List ;
import org.apache.commons.io.IOUtils ;
import org.apache.log4j.Logger ;
2013-07-08 17:42:08 +02:00
import org.gcube.common.core.scope.GCUBEScope ;
2013-06-28 18:42:10 +02:00
import org.gcube.common.resources.gcore.ServiceEndpoint ;
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint ;
import org.gcube.common.scope.api.ScopeProvider ;
2013-07-08 17:42:08 +02:00
import org.gcube.portlets.user.homelibrary.home.HomeLibrary ;
import org.gcube.portlets.user.homelibrary.home.workspace.Workspace ;
import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItem ;
import org.gcube.portlets.user.homelibrary.home.workspace.WorkspaceItemType ;
import org.gcube.portlets.user.homelibrary.home.workspace.folder.FolderItem ;
import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder ;
import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameter ;
import org.gcube.portlets.user.workspace.server.shortener.UrlShortener ;
2013-06-28 18:42:10 +02:00
import org.gcube.resources.discovery.client.api.DiscoveryClient ;
import org.gcube.resources.discovery.client.queries.impl.XQuery ;
/ * *
* @author Francesco Mangiacrapa francesco . mangiacrapa @isti.cnr.it
* @Jun 26 , 2013
*
* /
2013-07-01 15:54:54 +02:00
public class UriResolverReaderRR {
2013-06-28 18:42:10 +02:00
//Base Address
String uri = " " ;
//Query URL parameter
String parameter = " " ;
private String uriRequest = " " ;
2013-07-01 15:54:54 +02:00
public static Logger log = Logger . getLogger ( UriResolverReaderRR . class ) ;
2013-06-28 18:42:10 +02:00
/ * *
* @throws Exception
*
* /
2013-07-01 15:54:54 +02:00
public UriResolverReaderRR ( ) throws Exception {
2013-06-28 18:42:10 +02:00
ScopeProvider . instance . set ( " /gcube/devsec " ) ;
XQuery query = queryFor ( ServiceEndpoint . class ) ;
query . addCondition ( " $resource/Profile/Name/text() eq 'HTTP-URI-Resolver' " ) . setResult ( " $resource/Profile/AccessPoint " ) ;
DiscoveryClient < AccessPoint > client = clientFor ( AccessPoint . class ) ;
List < AccessPoint > endpoints = client . submit ( query ) ;
if ( endpoints . size ( ) = = 0 )
throw new Exception ( " No Resolver available " ) ;
//Base Address
// System.out.println(endpoints.get(0).address());
uri = endpoints . get ( 0 ) ! = null ? endpoints . get ( 0 ) . address ( ) : " " ;
if ( endpoints . get ( 0 ) ! = null ) {
parameter = endpoints . get ( 0 ) . propertyMap ( ) ! = null ? endpoints . get ( 0 ) . propertyMap ( ) . get ( " parameter " ) . value ( ) : " " ;
}
uriRequest = uri + " ? " + parameter ;
//Query URL parameter
// System.out.println(endpoints.get(0).propertyMap().get("parameter").value());
}
public InputStream resolve ( String smp ) throws IOException {
String query = uriRequest + " = " + smp ;
URL url = new URL ( query ) ;
return url . openStream ( ) ;
}
/ * *
*
* @return Base Address of Uri Resolver
* /
public String getUri ( ) {
return uri ;
}
/ * *
*
* @return Query URL parameter of Uri Resolver
* /
public String getParameter ( ) {
return parameter ;
}
@Override
public String toString ( ) {
StringBuilder builder = new StringBuilder ( ) ;
builder . append ( " UriResolverReaderParameter [uri= " ) ;
builder . append ( uri ) ;
builder . append ( " , parameter= " ) ;
builder . append ( parameter ) ;
builder . append ( " ] " ) ;
return builder . toString ( ) ;
}
public static void main ( String [ ] args ) throws Exception {
2013-07-08 17:42:08 +02:00
// log.trace(new UriResolverReaderRR());
//
// UriResolverReaderRR uriResolver = new UriResolverReaderRR();
// InputStream is = uriResolver.resolve("smp://Wikipedia_logo_silver.png?5ezvFfBOLqaqBlwCEtAvz4ch5BUu1ag3yftpCvV+gayz9bAtSsnO1/sX6pemTKbDe0qbchLexXeWgGcJlskYE8td9QSDXSZj5VSl9kdN9SN0/LRYaWUZuP4Q1J7lEiwkU4GKPsiD6PDRVcT4QAqTEy5hSIbr6o4Y");
//
// File file = new File("test.png");
//
// FileOutputStream out = new FileOutputStream(file);
//
//
// IOUtils.copy(is, out);
// is.close();
//
// out.close();
// 066086bc-5db1-48fc-b365-2ee821db2fb7
// 370dc1cc-2e5e-4321-bc6f-ad860414db97
// id: f70f01f9-5a06-4123-b6ec-bd121c1af82f, name: testResponse.html, ### Public link: smp://Home/francesco.mangiacrapa/Workspace41e79e40-ec82-416b-ba83-29b54bb43426?5ezvFfBOLqb3YESyI/kesN4T+ZD0mtmc/4sZ0vGMrl0lgx7k85j8o2Q1vF0ezJi/xIGDhncO9jOkV1T8u6Db7GZ/4ePgMws8Jxu8ierJajHBd20bUotElPG3BVG0ODMHf1ztm6rKJIAeb9R/0FEIDQ==
// id: 35a0298e-da69-464f-9170-3dc764da564d, name: wiki ws backup, ### Public link: smp://Home/francesco.mangiacrapa/Workspaceb7c9bf85-b0e0-47ac-87e5-eba34048f7ab?5ezvFfBOLqb3YESyI/kesN4T+ZD0mtmc/4sZ0vGMrl0lgx7k85j8o2Q1vF0ezJi/xIGDhncO9jOkV1T8u6Db7GZ/4ePgMws8Jxu8ierJajHBd20bUotElPG3BVG0ODMHf1ztm6rKJIAeb9R/0FEIDQ==
// id: 370dc1cc-2e5e-4321-bc6f-ad860414db97, name: testupload.txt, ### Public link: smp://Home/francesco.mangiacrapa/Workspace284ee688-e6fb-4080-bbcb-cc7c8cc5c381?5ezvFfBOLqb3YESyI/kesN4T+ZD0mtmc/4sZ0vGMrl0lgx7k85j8o2Q1vF0ezJi/xIGDhncO9jOkV1T8u6Db7GZ/4ePgMws8Jxu8ierJajHBd20bUotElPG3BVG0ODMHf1ztm6rKJIAeb9R/0FEIDQ==
System . out . println ( " uri is: " + getPublicLinkForFolderItemId ( " f70f01f9-5a06-4123-b6ec-bd121c1af82f " ) ) ;
2013-06-28 18:42:10 +02:00
2013-07-08 17:42:08 +02:00
//
2013-06-28 18:42:10 +02:00
2013-07-08 17:42:08 +02:00
}
public static String getPublicLinkForFolderItemId ( String itemId ) {
try {
2013-07-25 15:29:27 +02:00
String scope = " /gcube/devsec " ;
2013-07-08 17:42:08 +02:00
Workspace workspace = HomeLibrary
. getHomeManagerFactory ( )
. getHomeManager ( )
. getHome ( " francesco.mangiacrapa " ,
2013-07-25 15:29:27 +02:00
GCUBEScope . getScope ( scope ) )
2013-07-08 17:42:08 +02:00
. getWorkspace ( ) ;
GWTWorkspaceBuilder builder = new GWTWorkspaceBuilder ( ) ;
System . out . println ( " get item... " ) ;
WorkspaceItem wsItem = workspace . getItem ( itemId ) ;
if ( wsItem . getType ( ) . equals ( WorkspaceItemType . FOLDER_ITEM ) ) {
FolderItem folderItem = ( FolderItem ) wsItem ;
System . out . println ( " get public link... " ) ;
String smpUri = builder . getPubliLinkForFolderItem ( folderItem ) ;
System . out . println ( " smpUri " + smpUri ) ;
System . out . println ( " get uriResolver... " ) ;
2013-07-25 15:29:27 +02:00
UriResolverReaderParameter uriResolver = new UriResolverReaderParameter ( scope ) ;
2013-07-08 17:42:08 +02:00
String url = uriResolver . resolveAsUriRequest ( smpUri , " testResponse!@#$$%^^&&.html " , folderItem . getMimeType ( ) , true ) ;
System . out . println ( " url econded: " + url ) ;
//
// url = uriResolver.resolveAsUriRequest(smpUri, folderItem.getName(), folderItem.getMimeType(), false);
// System.out.println("url doesn't econded: "+url);
// uriResolver.getHashParemeters(smpUri, folderItem.getName(), folderItem.getMimeType());
// HttpCallerUtil callerUtil = new HttpCallerUtil(uriResolver.getBaseUri(), "", "");
// String query = uriResolver.getQuery();
// callerUtil.callPost("", query, "application/x-www-form-urlencoded");
// String smpUri = "smp://Home/test.user/Workspace/bla8200ceb0-c525-40e6-bad1-a63f83811d3d?5ezvFfBOLqb3YESyI/kesN4T+ZD0mtmc/4sZ0vGMrl0lgx7k85j8o2Q1vF0ezJi/xIGDhncO9jOkV1T8u6Db7GZ/4ePgMws8Jxu8ierJajHBd20bUotElPG3BVG0ODMHf1ztm6rKJIAeb9R/0FEIDQ==";
UrlShortener urlShortner = new UrlShortener ( ) ;
String shortUrl = urlShortner . shorten ( url ) ;
System . out . println ( " url shortUrl: " + shortUrl ) ;
InputStream is = uriResolver . resolveAsInputStream ( smpUri , folderItem . getName ( ) , folderItem . getMimeType ( ) ) ;
File file = new File ( folderItem . getName ( ) ) ;
FileOutputStream out = new FileOutputStream ( file ) ;
IOUtils . copy ( is , out ) ;
is . close ( ) ;
out . close ( ) ;
if ( uriResolver ! = null & & uriResolver . isAvailable ( ) ) {
return uriResolver . resolveAsUriRequest ( smpUri , folderItem . getName ( ) , folderItem . getMimeType ( ) , true ) ;
}
}
return " " ;
} catch ( Exception e ) {
System . out . println ( " Error getPublicLinkForFolderItemId url for " ) ;
e . printStackTrace ( ) ;
return " " ;
}
2013-06-28 18:42:10 +02:00
}
}