/** * */ package org.gcube.portlets.user.workspace; import org.apache.log4j.Logger; import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile; import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage; import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalPDFFile; import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; import org.gcube.common.scope.api.ScopeProvider; import org.gcube.common.scope.impl.ScopeBean; import org.gcube.portlets.user.workspace.server.GWTWorkspaceBuilder; import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameterForResolverIndex; import org.gcube.portlets.user.workspace.server.resolver.UriResolverReaderParameterForResolverIndex.RESOLVER_TYPE; import org.gcube.portlets.user.workspace.server.util.HttpRequestUtil; import org.gcube.portlets.user.workspace.server.util.StringUtil; /** * @author Francesco Mangiacrapa francesco.mangiacrapa{@literal @}isti.cnr.it * Jul 3, 2013 * */ public class SinglePublicLinkTest { protected static Logger logger = Logger.getLogger(SinglePublicLinkTest.class); // public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV public static void main(String[] args) { try { ScopeBean scope = new ScopeBean(DEFAULT_SCOPE); ScopeProvider.instance.set(scope.toString()); Workspace ws = HomeLibrary .getHomeManagerFactory() .getHomeManager() .getHome("francesco.mangiacrapa") .getWorkspace(); // System.out.println("start get root"); WorkspaceItem root = ws.getRoot(); for (WorkspaceItem wsi : root.getChildren()) { if(wsi.getType().equals(WorkspaceItemType.FOLDER_ITEM)){ try{ String publicLink = getPublicLinkForFolderItemId(wsi.getId(), true, ws); System.out.println("\nITEM: "+wsi.getName()); System.out.println(publicLink); // break; }catch(Exception e){ e.printStackTrace(); } } } // System.out.println("start get children"); // List children = root.getChildren(); // // // System.out.println("children size: "+children.size()); // // int i=0; // for (WorkspaceItem workspaceItem : children) { // // // if(workspaceItem.getType().equals(WorkspaceItemType.FOLDER) || workspaceItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ // // WorkspaceFolder folder = (WorkspaceFolder) workspaceItem; // // System.out.println(++i+") folder name: "+folder.getName() + " is shared: "+folder.isShared()); // }else{ // // // if(workspaceItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)){ // // FolderItem folderItem = (FolderItem) workspaceItem; // // String publicLink = getPubliLinkForFolderItem(folderItem); // // System.out.println(++i+") folderItem id: "+folderItem.getId() +", name: "+folderItem.getName() + ", ### Public link: "+publicLink); // } // // } // } System.out.println("end"); } catch (Exception e) { e.printStackTrace(); } } public static String getPublicLinkForFolderItemId(String itemId, boolean shortenUrl, Workspace workspace) throws Exception{ logger.trace("get Public Link For ItemId: "+ itemId); GWTWorkspaceBuilder builder = new GWTWorkspaceBuilder(); try{ WorkspaceItem wsItem = workspace.getItem(itemId); if(wsItem.getType().equals(WorkspaceItemType.FOLDER_ITEM)){ FolderItem folderItem = (FolderItem) wsItem; String storageID = builder.getStorageIDForFolderItem(folderItem); if(storageID==null || storageID.isEmpty()) throw new Exception("Sorry, public link on "+wsItem.getName() +" is not available"); UriResolverReaderParameterForResolverIndex uriResolver = new UriResolverReaderParameterForResolverIndex(DEFAULT_SCOPE, RESOLVER_TYPE.SMP_ID); String uriRequest = ""; if(uriResolver!=null && uriResolver.isAvailable()){ String itemName = StringUtil.removeSpecialCharacters(folderItem.getName()); itemName = StringUtil.replaceAllWhiteSpace(itemName, "_"); uriRequest = uriResolver.resolveAsUriRequest(storageID, itemName, folderItem.getMimeType(), true); //VALIDATE CONNECTION if(!HttpRequestUtil.urlExists(uriRequest+"&validation=true")) throw new Exception("Sorry, The Public Link for selected file is unavailable"); // if(shortenUrl) // uriRequest = getShortUrl(uriRequest); return uriRequest; } else throw new Exception("Sorry, The Uri resolver service is temporarily unavailable. Please try again later"); }else{ logger.warn("ItemId: "+ itemId +" is not a folder item, sent exception Public Link unavailable"); throw new Exception("Sorry, The Public Link for selected file is unavailable"); } }catch (Exception e) { logger.error("Error getPublicLinkForFolderItemId for item: "+itemId, e); e.printStackTrace(); throw new Exception(e.getMessage()); } } protected static String getPubliLinkForFolderItem(FolderItem worspaceFolderItem) throws InternalErrorException{ if(worspaceFolderItem==null) return ""; try{ switch(worspaceFolderItem.getFolderItemType()) { case EXTERNAL_IMAGE: return ((ExternalImage) worspaceFolderItem).getPublicLink(); case EXTERNAL_FILE: return ((ExternalFile) worspaceFolderItem).getPublicLink(); case EXTERNAL_PDF_FILE: return ((ExternalPDFFile) worspaceFolderItem).getPublicLink(); case EXTERNAL_URL: break; case REPORT_TEMPLATE: break; case REPORT: break; case QUERY: break; case TIME_SERIES: break; // case AQUAMAPS_ITEM: // break; case PDF_DOCUMENT: break; case IMAGE_DOCUMENT: GCubeItem imgDoc = (GCubeItem) worspaceFolderItem; //Cast GCubeItem return imgDoc.getPublicLink(false); case DOCUMENT: break; case URL_DOCUMENT: break; case METADATA: break; default: return ""; } }catch (Exception e) { logger.error("an error occurred when get public link for item: "+worspaceFolderItem.getName()); return ""; } return ""; } }