2015-06-24 15:16:13 +02:00
package org.gcube.portlets.widgets.wsexplorer.server ;
2015-06-25 12:33:18 +02:00
import java.util.ArrayList ;
2015-12-03 15:41:16 +01:00
import java.util.Arrays ;
2015-06-24 15:16:13 +02:00
import java.util.Collections ;
2016-05-17 16:27:15 +02:00
import java.util.HashMap ;
2015-06-24 15:16:13 +02:00
import java.util.List ;
2016-05-17 16:27:15 +02:00
import java.util.Map ;
2015-06-24 15:16:13 +02:00
import java.util.concurrent.TimeUnit ;
2015-07-06 17:18:23 +02:00
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType ;
2015-06-24 15:16:13 +02:00
import org.gcube.common.homelibrary.home.HomeLibrary ;
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException ;
import org.gcube.common.homelibrary.home.exceptions.InternalErrorException ;
import org.gcube.common.homelibrary.home.workspace.Workspace ;
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder ;
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem ;
2015-07-06 17:18:23 +02:00
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder ;
2016-02-01 16:03:11 +01:00
import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException ;
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException ;
2015-06-24 15:16:13 +02:00
import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException ;
2015-07-06 17:18:23 +02:00
import org.gcube.common.homelibrary.home.workspace.folder.FolderItem ;
2016-11-23 15:35:15 +01:00
import org.gcube.common.portal.PortalContext ;
2016-02-03 12:20:42 +01:00
import org.gcube.common.scope.api.ScopeProvider ;
2015-06-25 17:22:13 +02:00
import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants ;
2015-06-24 15:16:13 +02:00
import org.gcube.portlets.widgets.wsexplorer.client.rpc.WorkspaceExplorerService ;
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria ;
import org.gcube.portlets.widgets.wsexplorer.shared.Item ;
2015-06-30 12:31:49 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory ;
2016-02-26 18:28:40 +01:00
import org.gcube.portlets.widgets.wsexplorer.shared.ItemInterface ;
2015-06-24 15:16:13 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType ;
2017-07-13 11:17:07 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.SearchedFolder ;
2015-06-24 15:16:13 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.WorkspaceNavigatorServiceException ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import com.google.gwt.user.server.rpc.RemoteServiceServlet ;
2016-09-21 15:46:49 +02:00
2015-06-24 15:16:13 +02:00
/ * *
2016-09-21 15:46:49 +02:00
* The Class WorkspaceExplorerServiceImpl .
2015-06-25 12:33:18 +02:00
*
* @author Francesco Mangiacrapa francesco . mangiacrapa @isti.cnr.it
2016-11-23 15:35:15 +01:00
* @author Massimiliano Assante , CNR - ISTI
2015-06-24 15:16:13 +02:00
* /
@SuppressWarnings ( " serial " )
public class WorkspaceExplorerServiceImpl extends RemoteServiceServlet implements WorkspaceExplorerService {
2016-05-03 15:29:24 +02:00
public static final Logger logger = LoggerFactory . getLogger ( WorkspaceExplorerServiceImpl . class ) ;
2015-06-24 15:16:13 +02:00
public static final String USERNAME_ATTRIBUTE = " username " ;
2016-09-21 15:46:49 +02:00
public static final String TEST_USER = " test.user " ;
public static final String TEST_SCOPE = " /gcube " ; //DEV
2016-03-02 12:01:39 +01:00
// public static final String PRODUCTION_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION
2015-06-24 15:16:13 +02:00
2015-06-25 12:33:18 +02:00
/ * *
2017-07-06 16:16:37 +02:00
2015-06-25 12:33:18 +02:00
/ * *
* Gets the workspace .
*
* @return the workspace
2016-09-21 15:46:49 +02:00
* @throws Exception the exception
2015-06-25 12:33:18 +02:00
* /
2016-09-21 15:46:49 +02:00
protected Workspace getWorkspace ( ) throws Exception {
2016-11-23 15:35:15 +01:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
2016-09-21 15:46:49 +02:00
Workspace workspace ;
try {
2016-11-23 15:35:15 +01:00
ScopeProvider . instance . set ( pContext . getCurrentScope ( getThreadLocalRequest ( ) ) ) ;
workspace = HomeLibrary . getUserWorkspace ( pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ) ;
2016-09-21 15:46:49 +02:00
} catch ( InternalErrorException | HomeNotFoundException | WorkspaceFolderNotFoundException e ) {
String msg = " Sorry, an error occurred when retrieving workspace item, Refresh an try again " ;
logger . error ( " HL error: " , e ) ;
throw new Exception ( msg ) ;
}
2015-06-24 15:16:13 +02:00
return workspace ;
}
/ * *
* { @inheritDoc }
* /
@Override
public Item getRoot ( List < ItemType > showableTypes , boolean purgeEmpyFolders , FilterCriteria filterCriteria ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " getRoot showableTypes: " + showableTypes + " purgeEmpyFolders: " + purgeEmpyFolders + " filterCriteria: " + filterCriteria ) ;
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
try {
Workspace workspace = getWorkspace ( ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " Start getRoot... " ) ;
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
WorkspaceItem root = workspace . getRoot ( ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " GetRoot - Replyiing root " ) ;
2015-06-24 15:16:13 +02:00
long startTime = System . currentTimeMillis ( ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " start time - " + startTime ) ;
2015-06-24 15:16:13 +02:00
2016-05-03 15:29:24 +02:00
Item rootItem = ItemBuilder . getItem ( null , root , root . getPath ( ) , showableTypes , filterCriteria , true , false ) ;
2015-06-30 12:31:49 +02:00
rootItem . setName ( WorkspaceExplorerConstants . HOME_LABEL ) ;
2015-07-13 17:15:21 +02:00
rootItem . setIsRoot ( true ) ;
2016-01-15 11:13:48 +01:00
2015-06-25 12:33:18 +02:00
/ * SPECIAL FOLDERS
2015-06-24 15:16:13 +02:00
Item specialFolders = ItemBuilder . getItem ( null , specials , showableTypes , filterCriteria , 2 ) ;
specialFolders . setShared ( true ) ;
2016-01-15 11:13:48 +01:00
rootItem . addChild ( specialFolders ) ;
2015-06-25 12:33:18 +02:00
* /
2016-01-15 11:13:48 +01:00
if ( purgeEmpyFolders ) {
rootItem = ItemBuilder . purgeEmptyFolders ( rootItem ) ;
}
2015-06-24 15:16:13 +02:00
2016-05-03 15:29:24 +02:00
logger . trace ( " Returning: " ) ;
2015-06-24 15:16:13 +02:00
Long endTime = System . currentTimeMillis ( ) - startTime ;
String time = String . format ( " %d msc %d sec " , endTime , TimeUnit . MILLISECONDS . toSeconds ( endTime ) ) ;
2016-05-03 15:29:24 +02:00
logger . info ( " end time - " + time ) ;
2015-06-24 15:16:13 +02:00
Collections . sort ( rootItem . getChildren ( ) , new ItemComparator ( ) ) ;
2016-05-03 15:29:24 +02:00
logger . info ( " Returning children size: " + rootItem . getChildren ( ) . size ( ) ) ;
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
return rootItem ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error during root retrieving " , e ) ;
2015-06-30 12:31:49 +02:00
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get root " ) ;
2015-06-24 15:16:13 +02:00
}
}
/ * *
* { @inheritDoc }
* /
@Override
2016-05-03 15:29:24 +02:00
public Item getFolder ( ItemInterface item , List < ItemType > showableTypes , boolean purgeEmpyFolders , FilterCriteria filterCriteria , boolean loadGcubeProperties ) throws WorkspaceNavigatorServiceException {
logger . trace ( " getFolder folderId: " + item . getId ( ) + " showableTypes: " + showableTypes + " purgeEmpyFolders: " + purgeEmpyFolders + " filterCriteria: " + filterCriteria ) ;
2015-06-24 15:16:13 +02:00
try {
Workspace workspace = getWorkspace ( ) ;
2016-02-26 18:28:40 +01:00
WorkspaceItem folder = workspace . getItem ( item . getId ( ) ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " GetFolder - Replyiing folder " ) ;
2015-06-24 15:16:13 +02:00
long startTime = System . currentTimeMillis ( ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " start time - " + startTime ) ;
2015-06-24 15:16:13 +02:00
2016-02-26 18:28:40 +01:00
//TO AVOID SLOW CALL getPATH()
String folderPath = item . getPath ( ) ! = null & & ! item . getPath ( ) . isEmpty ( ) ? item . getPath ( ) : folder . getPath ( ) ;
2016-05-03 15:29:24 +02:00
Item itemFolder = ItemBuilder . getItem ( null , folder , folderPath , showableTypes , filterCriteria , true , loadGcubeProperties ) ;
2016-02-09 11:03:01 +01:00
// _log.trace("Only showable types:");
2016-01-15 11:13:48 +01:00
if ( purgeEmpyFolders ) {
itemFolder = ItemBuilder . purgeEmptyFolders ( itemFolder ) ;
}
2015-06-24 15:16:13 +02:00
2016-05-03 15:29:24 +02:00
logger . trace ( " Returning: " ) ;
2015-06-24 15:16:13 +02:00
Long endTime = System . currentTimeMillis ( ) - startTime ;
String time = String . format ( " %d msc %d sec " , endTime , TimeUnit . MILLISECONDS . toSeconds ( endTime ) ) ;
2016-05-03 15:29:24 +02:00
logger . info ( " end time - " + time ) ;
2015-06-24 15:16:13 +02:00
2015-06-25 12:33:18 +02:00
Collections . sort ( itemFolder . getChildren ( ) , new ItemComparator ( ) ) ;
2015-06-24 15:16:13 +02:00
2015-06-25 12:33:18 +02:00
return itemFolder ;
2015-06-24 15:16:13 +02:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error during folder retrieving " , e ) ;
2015-06-30 12:31:49 +02:00
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get folder " ) ;
}
}
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getItemByCategory ( org . gcube . portlets . widgets . wsexplorer . shared . ItemCategory )
* /
2016-09-21 15:46:49 +02:00
/ * *
* Gets the item by category .
*
* @param category the category
* @return the item by category
* @throws WorkspaceNavigatorServiceException the workspace navigator service exception
* /
2015-06-30 12:31:49 +02:00
@Override
public Item getItemByCategory ( ItemCategory category ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " GetItemByCategory category: " + category ) ;
2015-06-30 12:31:49 +02:00
try {
Workspace workspace = getWorkspace ( ) ;
Item item = null ;
2016-01-15 11:13:48 +01:00
2015-06-30 12:31:49 +02:00
switch ( category ) {
case HOME : {
WorkspaceItem root = workspace . getRoot ( ) ;
2017-07-06 16:16:37 +02:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
2016-11-23 15:35:15 +01:00
String fullName = pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getFullname ( ) ;
2015-06-30 14:52:40 +02:00
if ( fullName . indexOf ( " " ) > 0 ) {
fullName = fullName . substring ( 0 , fullName . indexOf ( " " ) ) ;
} else if ( fullName . indexOf ( " . " ) > 0 ) {
fullName = fullName . substring ( 0 , fullName . indexOf ( " . " ) ) ;
}
2016-03-10 16:53:35 +01:00
item = new Item ( null , root . getId ( ) , fullName + " 's " , ItemType . FOLDER , root . getPath ( ) , root . getOwner ( ) . getPortalLogin ( ) , null , true , true ) ;
2015-06-30 12:31:49 +02:00
break ;
}
case VRE_FOLDER : {
WorkspaceItem folder = workspace . getMySpecialFolders ( ) ;
2016-03-10 16:53:35 +01:00
item = new Item ( null , folder . getId ( ) , WorkspaceExplorerConstants . VRE_FOLDERS_LABEL , ItemType . FOLDER , folder . getPath ( ) , folder . getOwner ( ) . getPortalLogin ( ) , null , true , false ) ;
2015-07-13 17:15:21 +02:00
//SET SPECIAL FOLDER /Workspace/MySpecialFolders
item . setSpecialFolder ( true ) ;
2015-06-30 12:31:49 +02:00
break ;
}
}
return item ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error during get item by category " , e ) ;
2015-06-30 12:31:49 +02:00
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get item by category " ) ;
2015-06-24 15:16:13 +02:00
}
}
2016-01-15 11:13:48 +01:00
2015-06-25 17:22:13 +02:00
/ * *
* { @inheritDoc }
* /
@Override
public Item getMySpecialFolder ( List < ItemType > showableTypes , boolean purgeEmpyFolders , FilterCriteria filterCriteria ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " GetMySpecialFolder showableTypes: " + showableTypes + " purgeEmpyFolders: " + purgeEmpyFolders + " filterCriteria: " + filterCriteria ) ;
2015-06-25 17:22:13 +02:00
try {
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem folder = workspace . getMySpecialFolders ( ) ;
long startTime = System . currentTimeMillis ( ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " start time - " + startTime ) ;
2015-06-25 17:22:13 +02:00
2016-05-03 15:29:24 +02:00
Item itemFolder = ItemBuilder . getItem ( null , folder , folder . getPath ( ) , showableTypes , filterCriteria , true , false ) ;
2015-07-13 17:15:21 +02:00
//OVERRIDING VRE FOLDERS NAME - SET SPECIAL FOLDER /Workspace/MySpecialFolders
2015-06-25 18:17:10 +02:00
itemFolder . setName ( WorkspaceExplorerConstants . VRE_FOLDERS_LABEL ) ;
2015-06-25 17:22:13 +02:00
itemFolder . setSpecialFolder ( true ) ;
2016-01-15 11:13:48 +01:00
2016-05-03 15:29:24 +02:00
logger . trace ( " Builded MySpecialFolder: " + itemFolder ) ;
2015-06-25 17:22:13 +02:00
2016-05-03 15:29:24 +02:00
logger . trace ( " Only showable types: " ) ;
2015-06-25 17:22:13 +02:00
//printName("", folderItem);
2016-01-15 11:13:48 +01:00
if ( purgeEmpyFolders ) {
itemFolder = ItemBuilder . purgeEmptyFolders ( itemFolder ) ;
}
2015-06-25 17:22:13 +02:00
2016-05-03 15:29:24 +02:00
logger . trace ( " Returning: " ) ;
2015-06-25 17:22:13 +02:00
Long endTime = System . currentTimeMillis ( ) - startTime ;
String time = String . format ( " %d msc %d sec " , endTime , TimeUnit . MILLISECONDS . toSeconds ( endTime ) ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " end time - " + time ) ;
2015-06-25 17:22:13 +02:00
//printName("", folderItem);
Collections . sort ( itemFolder . getChildren ( ) , new ItemComparator ( ) ) ;
return itemFolder ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error during special folders retrieving " , e ) ;
2015-06-30 12:31:49 +02:00
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get My Special Folder " ) ;
2015-06-25 17:22:13 +02:00
}
}
2015-06-24 15:16:13 +02:00
/ * *
* { @inheritDoc }
* /
@Override
public boolean checkName ( String name ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " checkName name: " + name ) ;
2015-06-24 15:16:13 +02:00
try {
2016-11-23 15:35:15 +01:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
Workspace workspace = HomeLibrary . getUserWorkspace ( pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ) ;
2015-06-24 15:16:13 +02:00
return workspace . isValidName ( name ) ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error during folder retrieving " , e ) ;
2015-06-24 15:16:13 +02:00
throw new WorkspaceNavigatorServiceException ( e . getMessage ( ) ) ;
}
}
/ * protected void printName ( String indentation , Item item )
{
if ( item ! = null ) {
_log . trace ( indentation + item . getName ( ) ) ;
for ( Item child : item . getChildren ( ) ) printName ( indentation + " \ t " , child ) ;
}
} * /
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
/ * *
2015-06-30 14:52:40 +02:00
* Gets Breadcrumbs ( the list of parents ) by item identifier .
2015-06-24 15:16:13 +02:00
*
* @param itemIdentifier the item identifier
* @param includeItemAsParent - if parameter is true and item passed in input is a folder , the folder is included in path returned as last parent
* @return the list parents by item identifier
* @throws Exception the exception
* /
@Override
2015-06-30 14:52:40 +02:00
public List < Item > getBreadcrumbsByItemIdentifier ( String itemIdentifier , boolean includeItemAsParent ) throws Exception {
2016-05-03 15:29:24 +02:00
logger . trace ( " ListParents By Item Identifier " + itemIdentifier ) ;
2015-06-24 15:16:13 +02:00
try {
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( itemIdentifier ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
2016-01-15 11:13:48 +01:00
List < WorkspaceItem > parents = workspace . getParentsById ( itemIdentifier ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " parents size: " + parents . size ( ) ) ;
2015-12-03 15:41:16 +01:00
Item [ ] arrayParents ;
2015-06-24 15:16:13 +02:00
2015-06-25 12:33:18 +02:00
if ( includeItemAsParent = = true & & wsItem . isFolder ( ) ) {
2015-12-03 15:41:16 +01:00
arrayParents = new Item [ parents . size ( ) ] ;
arrayParents [ parents . size ( ) - 1 ] = ItemBuilder . buildFolderForBreadcrumbs ( ( WorkspaceFolder ) wsItem , null ) ;
2016-01-15 11:13:48 +01:00
}
else {
2015-12-03 15:41:16 +01:00
arrayParents = new Item [ parents . size ( ) - 1 ] ;
2016-01-15 11:13:48 +01:00
}
/ * * HANDLE MY_SPECIAL_FOLDER TO AVOID COMPLETE PATH WORKSPACE / MY_SPECIAL_FOLDER
2015-07-13 17:15:21 +02:00
* BUT RETURNING ONLY / MY_SPECIAL_FOLDER
* /
2015-06-30 18:10:45 +02:00
if ( wsItem . isFolder ( ) ) {
2016-02-03 17:08:33 +01:00
if ( ItemBuilder . isSpecialFolder ( ( WorkspaceFolder ) wsItem ) ) {
2015-12-03 15:41:16 +01:00
return new ArrayList < Item > ( Arrays . asList ( arrayParents ) ) ;
2016-01-15 11:13:48 +01:00
}
2015-06-30 18:10:45 +02:00
}
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
//CONVERTING PATH
2016-05-03 15:29:24 +02:00
logger . trace ( " converting path from second-last.. " ) ;
2015-12-03 15:41:16 +01:00
for ( int i = parents . size ( ) - 2 ; i > = 0 ; i - - ) {
WorkspaceFolder wsParentFolder = ( WorkspaceFolder ) parents . get ( i ) ;
2016-01-15 11:13:48 +01:00
arrayParents [ i ] = ItemBuilder . buildFolderForBreadcrumbs ( wsParentFolder , null ) ;
2015-12-03 15:41:16 +01:00
if ( arrayParents [ i ] . isSpecialFolder ( ) ) { //SKIP HOME PARENT FOR MY_SPECIAL_FOLDER
2016-05-03 15:29:24 +02:00
logger . info ( " arrayParents index " + i + " is special folder, exit " ) ;
2015-06-30 14:52:40 +02:00
break ;
2015-12-03 15:41:16 +01:00
}
2015-06-24 15:16:13 +02:00
}
2016-01-15 11:13:48 +01:00
2015-06-24 15:16:13 +02:00
//SET PARENTS
2016-05-03 15:29:24 +02:00
logger . trace ( " setting parents.. " ) ;
2015-12-03 15:41:16 +01:00
for ( int i = 0 ; i < arrayParents . length - 1 ; i + + ) {
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
Item parent = arrayParents [ i ] ;
Item fileModel = arrayParents [ i + 1 ] ;
2015-06-25 12:33:18 +02:00
fileModel . setParent ( parent ) ;
2015-06-24 15:16:13 +02:00
}
2016-01-15 11:13:48 +01:00
2016-05-03 15:29:24 +02:00
logger . trace ( " ListParents return size: " + arrayParents . length ) ;
2015-12-03 15:41:16 +01:00
if ( arrayParents [ 0 ] = = null ) { //EXIT BY BREAK IN CASE OF SPECIAL FOLDER
List < Item > breadcrumbs = new ArrayList < Item > ( arrayParents . length - 1 ) ;
for ( int i = 1 ; i < arrayParents . length ; i + + ) {
breadcrumbs . add ( arrayParents [ i ] ) ;
}
return breadcrumbs ;
2016-01-15 11:13:48 +01:00
}
else {
2015-12-03 15:41:16 +01:00
return new ArrayList < Item > ( Arrays . asList ( arrayParents ) ) ;
2016-01-15 11:13:48 +01:00
}
2015-06-24 15:16:13 +02:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error in get List Parents By Item Identifier " , e ) ;
2015-12-03 15:41:16 +01:00
throw new Exception ( " Sorry, an error occurred during path retrieving! " ) ;
2015-06-24 15:16:13 +02:00
}
2015-12-03 15:41:16 +01:00
}
2015-06-24 15:16:13 +02:00
2015-12-03 15:41:16 +01:00
/ * *
* Gets the parents by item identifier to limit .
*
2016-09-21 15:46:49 +02:00
* @param itemIdentifier the item identifier
* @param parentLimit the parent limit
* @param includeItemAsParent the include item as parent
2015-12-03 15:41:16 +01:00
* @return the parents by item identifier to limit
2016-09-21 15:46:49 +02:00
* @throws Exception the exception
2015-12-03 15:41:16 +01:00
* /
@Override
public List < Item > getBreadcrumbsByItemIdentifierToParentLimit ( String itemIdentifier , String parentLimit , boolean includeItemAsParent ) throws Exception {
2016-05-03 15:29:24 +02:00
logger . trace ( " getBreadcrumbsByItemIdentifierToParentLimit by Item Identifier " + itemIdentifier + " and limit: " + parentLimit ) ;
2015-12-03 15:41:16 +01:00
try {
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( itemIdentifier ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
2016-01-15 11:13:48 +01:00
List < WorkspaceItem > parents = workspace . getParentsById ( itemIdentifier ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " parents size: " + parents . size ( ) ) ;
2015-12-03 15:41:16 +01:00
Item [ ] arrayParents ;
if ( includeItemAsParent = = true & & wsItem . isFolder ( ) ) {
arrayParents = new Item [ parents . size ( ) ] ;
arrayParents [ parents . size ( ) - 1 ] = ItemBuilder . buildFolderForBreadcrumbs ( ( WorkspaceFolder ) wsItem , null ) ;
2016-01-15 11:13:48 +01:00
}
else {
2015-12-03 15:41:16 +01:00
arrayParents = new Item [ parents . size ( ) - 1 ] ;
2016-01-15 11:13:48 +01:00
}
2015-12-03 15:41:16 +01:00
parentLimit = parentLimit ! = null ? parentLimit : " " ;
2016-01-15 11:13:48 +01:00
/ * * HANDLE MY_SPECIAL_FOLDER TO AVOID COMPLETE PATH WORKSPACE / MY_SPECIAL_FOLDER
2015-12-03 15:41:16 +01:00
* BUT RETURNING ONLY / MY_SPECIAL_FOLDER
* /
if ( wsItem . isFolder ( ) ) {
if ( ItemBuilder . isSpecialFolder ( ( WorkspaceFolder ) wsItem ) ) {
2016-05-03 15:29:24 +02:00
logger . debug ( " item id is special folder, returning " ) ;
2015-12-03 15:41:16 +01:00
return new ArrayList < Item > ( Arrays . asList ( arrayParents ) ) ;
}
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
if ( itemIdentifier . compareTo ( parentLimit ) = = 0 ) {
2016-05-03 15:29:24 +02:00
logger . debug ( " item and parent limit are identical element, returning " ) ;
2015-12-03 15:41:16 +01:00
return new ArrayList < Item > ( Arrays . asList ( arrayParents ) ) ;
}
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
}
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
//CONVERTING PATH
2016-05-03 15:29:24 +02:00
logger . trace ( " converting path from second-last.. " ) ;
2015-12-03 15:41:16 +01:00
for ( int i = parents . size ( ) - 2 ; i > = 0 ; i - - ) {
WorkspaceFolder wsParentFolder = ( WorkspaceFolder ) parents . get ( i ) ;
2016-01-15 11:13:48 +01:00
arrayParents [ i ] = ItemBuilder . buildFolderForBreadcrumbs ( wsParentFolder , null ) ;
2015-12-03 15:41:16 +01:00
if ( arrayParents [ i ] . isSpecialFolder ( ) ) { //SKIP HOME PARENT FOR MY_SPECIAL_FOLDER
2016-05-03 15:29:24 +02:00
logger . info ( " arrayParents index " + i + " is special folder, break " ) ;
2015-12-03 15:41:16 +01:00
break ;
} else if ( parentLimit . compareTo ( arrayParents [ i ] . getId ( ) ) = = 0 ) {
2016-05-03 15:29:24 +02:00
logger . info ( " reached parent limit " + parentLimit + " , break " ) ;
2015-12-03 15:41:16 +01:00
break ;
}
}
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
//SET PARENTS
2016-05-03 15:29:24 +02:00
logger . trace ( " setting parents.. " ) ;
2015-12-03 15:41:16 +01:00
for ( int i = 0 ; i < arrayParents . length - 1 ; i + + ) {
2016-01-15 11:13:48 +01:00
2015-12-03 15:41:16 +01:00
Item parent = arrayParents [ i ] ;
Item fileModel = arrayParents [ i + 1 ] ;
2016-01-15 11:13:48 +01:00
if ( fileModel ! = null ) {
2015-12-03 15:41:16 +01:00
fileModel . setParent ( parent ) ;
2016-01-15 11:13:48 +01:00
}
2015-12-03 15:41:16 +01:00
}
2016-01-15 11:13:48 +01:00
2016-05-03 15:29:24 +02:00
logger . trace ( " ListParents return size: " + arrayParents . length ) ;
2015-12-03 15:41:16 +01:00
if ( arrayParents [ 0 ] = = null ) { //EXIT BY BREAK IN CASE OF SPECIAL FOLDER OR REACHED PARENT LIMIT
List < Item > breadcrumbs = new ArrayList < Item > ( ) ;
for ( int i = 1 ; i < arrayParents . length ; i + + ) {
2016-01-15 11:13:48 +01:00
if ( arrayParents [ i ] ! = null ) {
2015-12-03 15:41:16 +01:00
breadcrumbs . add ( arrayParents [ i ] ) ;
2016-01-15 11:13:48 +01:00
}
2015-12-03 15:41:16 +01:00
}
return breadcrumbs ;
2016-01-15 11:13:48 +01:00
}
else {
2015-12-03 15:41:16 +01:00
return new ArrayList < Item > ( Arrays . asList ( arrayParents ) ) ;
2016-01-15 11:13:48 +01:00
}
2015-12-03 15:41:16 +01:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error in get List Parents By Item Identifier " , e ) ;
2015-12-03 15:41:16 +01:00
throw new Exception ( " Sorry, an error occurred during path retrieving! " ) ;
}
2015-06-24 15:16:13 +02:00
}
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # loadSizeByItemId ( java . lang . String )
* /
2016-09-21 15:46:49 +02:00
/ * *
* Gets the size by item id .
*
* @param itemId the item id
* @return the size by item id
* @throws Exception the exception
* /
2015-07-06 17:18:23 +02:00
@Override
2015-07-10 11:57:39 +02:00
public Long getSizeByItemId ( String itemId ) throws Exception {
2016-01-15 11:13:48 +01:00
2016-05-03 15:29:24 +02:00
logger . info ( " get Size By ItemId " + itemId ) ;
2015-07-06 17:18:23 +02:00
try {
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( itemId ) ;
Long size = new Long ( - 1 ) ;
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
if ( wsItem instanceof FolderItem ) { //ITEM
FolderItem folderItem = ( FolderItem ) wsItem ;
size = new Long ( folderItem . getLength ( ) ) ;
} else if ( wsItem instanceof WorkspaceFolder ) { //FOLDER
WorkspaceFolder theFolder = ( WorkspaceFolder ) wsItem ;
size = theFolder . getSize ( ) ;
} else if ( wsItem instanceof WorkspaceSharedFolder ) { //SHARED FOLDER
WorkspaceSharedFolder theFolder = ( WorkspaceSharedFolder ) wsItem ;
size = theFolder . getSize ( ) ;
}
2016-05-03 15:29:24 +02:00
logger . info ( " returning size: " + size ) ;
2015-07-06 17:18:23 +02:00
return size ;
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " get Size By ItemId " , e ) ;
2015-07-06 17:18:23 +02:00
throw new Exception ( e . getMessage ( ) ) ;
}
}
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getMimeType ( java . lang . String )
* /
2016-09-21 15:46:49 +02:00
/ * *
* Gets the mime type .
*
* @param itemId the item id
* @return the mime type
* @throws Exception the exception
* /
2015-07-06 17:18:23 +02:00
@Override
public String getMimeType ( String itemId ) throws Exception {
2016-01-15 11:13:48 +01:00
2016-05-03 15:29:24 +02:00
logger . info ( " get MimeType By ItemId " + itemId ) ;
2015-07-06 17:18:23 +02:00
try {
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( itemId ) ;
2016-01-15 11:13:48 +01:00
if ( ! wsItem . getType ( ) . equals ( WorkspaceItemType . FOLDER_ITEM ) ) {
2015-07-06 17:18:23 +02:00
return null ;
2016-01-15 11:13:48 +01:00
}
FolderItem folderItem = ( FolderItem ) wsItem ;
2015-07-06 17:18:23 +02:00
return folderItem . getMimeType ( ) ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " get MimeType By ItemId " , e ) ;
2015-07-06 17:18:23 +02:00
throw new Exception ( e . getMessage ( ) ) ;
}
}
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
/ * *
* Gets the user acl for folder id .
*
* @param folderId the folder id
* @return the user acl for folder id
* @throws Exception the exception
* /
@Override
public String getUserACLForFolderId ( String folderId ) throws Exception {
try {
2016-05-03 15:29:24 +02:00
logger . info ( " Get user ACL to FOLDER id: " + folderId ) ;
2015-07-06 17:18:23 +02:00
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( folderId ) ;
2016-01-15 11:13:48 +01:00
if ( ! isASharedFolder ( wsItem , false ) ) {
2015-07-06 17:18:23 +02:00
return " OWNER " ;
2016-01-15 11:13:48 +01:00
}
else {
2015-07-06 17:18:23 +02:00
return wsItem . getACLUser ( ) . toString ( ) ;
2016-01-15 11:13:48 +01:00
}
2015-07-06 17:18:23 +02:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error in server get UserACLForFolderId " , e ) ;
2015-07-06 17:18:23 +02:00
String error = " An error occurred when getting ACL rules for selected folder. " + e . getMessage ( ) ;
throw new Exception ( error ) ;
}
}
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
/ * *
* Checks if is a shared folder .
*
* @param item the item
* @param asRoot the as root
* @return true , if is a shared folder
* /
private boolean isASharedFolder ( WorkspaceItem item , boolean asRoot ) {
try {
2016-01-15 11:13:48 +01:00
2015-07-06 17:18:23 +02:00
if ( item ! = null & & item . isFolder ( ) & & item . isShared ( ) ) { //IS A SHARED SUB-FOLDER
if ( asRoot )
2016-01-15 11:13:48 +01:00
{
2015-07-06 17:18:23 +02:00
return item . getType ( ) . equals ( WorkspaceItemType . SHARED_FOLDER ) ; //IS ROOT?
2016-01-15 11:13:48 +01:00
}
2015-07-06 17:18:23 +02:00
return true ;
}
return false ;
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Error in server isASharedFolder " , e ) ;
2015-07-06 17:18:23 +02:00
return false ;
}
}
2015-07-10 11:57:39 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getFormattedSizeByItemId ( java . lang . String , org . gcube . portlets . widgets . wsexplorer . shared . SizeFormatter )
* /
2016-09-21 15:46:49 +02:00
/ * *
* Gets the readable size by item id .
*
* @param itemId the item id
* @return the readable size by item id
* @throws Exception the exception
* /
2015-07-10 11:57:39 +02:00
@Override
public String getReadableSizeByItemId ( String itemId ) throws Exception {
2016-01-15 11:13:48 +01:00
2015-07-10 11:57:39 +02:00
try {
2016-05-03 15:29:24 +02:00
logger . info ( " getFormattedSize ByItemId " + itemId ) ;
2015-07-10 11:57:39 +02:00
long size = getSizeByItemId ( itemId ) ;
2015-07-13 17:15:21 +02:00
return StringUtil . readableFileSize ( size ) ;
2015-07-10 11:57:39 +02:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " getFormattedSize By ItemId " , e ) ;
2015-07-10 11:57:39 +02:00
throw new Exception ( e . getMessage ( ) ) ;
}
}
2016-02-01 16:03:11 +01:00
2016-09-21 15:46:49 +02:00
/ * *
* Creates the folder .
*
* @param nameFolder the name folder
* @param description the description
* @param parentId the parent id
* @return the item
* @throws Exception the exception
* /
2016-02-01 16:03:11 +01:00
@Override
2016-02-01 18:57:18 +01:00
public Item createFolder ( String nameFolder , String description , String parentId ) throws Exception {
2016-02-01 16:03:11 +01:00
2016-05-03 15:29:24 +02:00
logger . debug ( " creating folder: " + nameFolder + " , parent id: " + parentId ) ;
2016-02-01 16:03:11 +01:00
try {
if ( parentId = = null | | parentId . isEmpty ( ) )
throw new Exception ( " Parent id is null or empty " ) ;
if ( nameFolder = = null )
nameFolder = " Empty Folder " ;
Workspace workspace = getWorkspace ( ) ;
WorkspaceFolder wsFolder = workspace . createFolder ( nameFolder , description , parentId ) ;
2016-03-01 18:06:45 +01:00
// _log.info("Path returned by HL: "+wsFolder.getPath());
2016-02-01 18:57:18 +01:00
List < ItemType > allTypes = Arrays . asList ( ItemType . values ( ) ) ;
2016-02-02 12:55:50 +01:00
2016-02-02 14:09:14 +01:00
Item parent = null ;
2016-02-02 12:55:50 +01:00
try {
2016-02-03 17:08:33 +01:00
String parentPath = wsFolder . getParent ( ) ! = null ? wsFolder . getParent ( ) . getPath ( ) : " " ;
2016-05-03 15:29:24 +02:00
parent = ItemBuilder . getItem ( null , wsFolder . getParent ( ) , parentPath , allTypes , null , false , false ) ;
2016-02-02 12:55:50 +01:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Get parent thown an exception, is it the root id? " + parentId ) ;
2016-02-02 12:55:50 +01:00
}
2016-02-03 17:08:33 +01:00
//TODO PATCH TO AVOID PROBLEM ON GETPATH. FOR EXAMPLE WHEN PARENT IS ROOT
String itemPath = null ;
try {
itemPath = wsFolder . getPath ( ) ;
2016-05-03 15:29:24 +02:00
logger . info ( " itemPath: " + itemPath ) ;
2016-02-03 17:08:33 +01:00
} catch ( Exception e ) {
2016-05-03 15:29:24 +02:00
logger . error ( " Get path thrown an exception, for id: " + wsFolder . getId ( ) + " name: " + wsFolder . getName ( ) , e ) ;
2016-03-01 18:06:45 +01:00
// itemPath= wsFolder.isFolder()?workspace.getRoot().getPath()+"/"+wsFolder.getName():workspace.getRoot().getPath();
//PATCH TO RETURN ABSOLUTE PATH
itemPath = workspace . getRoot ( ) . getPath ( ) + " / " + wsFolder . getName ( ) ;
2016-05-03 15:29:24 +02:00
logger . warn ( " returning base path: " + itemPath ) ;
2016-02-03 17:08:33 +01:00
}
2016-05-03 15:29:24 +02:00
return ItemBuilder . getItem ( parent , wsFolder , itemPath , allTypes , null , false , false ) ;
2016-02-01 16:03:11 +01:00
} catch ( InsufficientPrivilegesException e ) {
String error = " Insufficient Privileges to create the folder " ;
2016-05-03 15:29:24 +02:00
logger . error ( error , e ) ;
2016-02-01 16:03:11 +01:00
throw new Exception ( error ) ;
} catch ( ItemAlreadyExistException e ) {
String error = " An error occurred on creating folder, " + e . getMessage ( ) ;
2016-05-03 15:29:24 +02:00
logger . error ( error , e ) ;
2016-02-01 16:03:11 +01:00
throw new Exception ( error ) ;
} catch ( Exception e ) {
String error = " An error occurred on the sever during creating folder. Try again " ;
2016-05-03 15:29:24 +02:00
logger . error ( error , e ) ;
2016-02-01 16:03:11 +01:00
throw new Exception ( error ) ;
}
}
2016-05-17 16:27:15 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getGcubePropertiesForWorspaceId ( java . lang . String )
* /
2016-09-21 15:46:49 +02:00
/ * *
* Gets the gcube properties for worspace id .
*
* @param id the id
* @return the gcube properties for worspace id
* @throws Exception the exception
* /
2016-05-17 16:27:15 +02:00
@Override
public Map < String , String > getGcubePropertiesForWorspaceId ( String id ) throws Exception {
logger . trace ( " getGcubePropertiesForWorspaceId " + id ) ;
try {
if ( id = = null | | id . isEmpty ( ) ) {
logger . info ( id + " is null or empty returing empty map as GcubeProperties " ) ;
return new HashMap < String , String > ( 1 ) ;
}
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem item = workspace . getItem ( id ) ;
return ItemBuilder . getGcubePropertiesForItem ( item ) ;
} catch ( Exception e ) {
logger . error ( " Error during folder retrieving " , e ) ;
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get folder " ) ;
}
}
2017-07-06 16:16:37 +02:00
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getFolder ( org . gcube . portlets . widgets . wsexplorer . shared . Item , java . util . List , boolean , org . gcube . portlets . widgets . wsexplorer . shared . FilterCriteria , boolean , int , int )
* /
@Override
2017-07-13 11:17:07 +02:00
public SearchedFolder getFolder (
2017-07-06 16:16:37 +02:00
Item item , List < ItemType > showableTypes , boolean purgeEmpyFolders ,
FilterCriteria filterCriteria , boolean loadGcubeProperties ,
2017-07-13 11:17:07 +02:00
final int startIndex , final int limit , final int serverStartIndex ) throws WorkspaceNavigatorServiceException {
2017-07-06 16:16:37 +02:00
logger . trace ( " getFolder folderId: " + item . getId ( ) + " showableTypes: " + showableTypes + " purgeEmpyFolders: " + purgeEmpyFolders + " filterCriteria: " + filterCriteria ) ;
try {
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem folder = workspace . getItem ( item . getId ( ) ) ;
2017-07-13 11:17:07 +02:00
int searchStartIndex = startIndex < serverStartIndex ? serverStartIndex : startIndex ;
//logger.trace("GetFolder - Replyiing folder");
logger . debug ( " MyLg getFolder searchIndex: " + searchStartIndex + " , limit: " + limit ) ;
//long startTime = System.currentTimeMillis();
//logger.trace("start time - " + startTime);
2017-07-06 16:16:37 +02:00
//TO AVOID SLOW CALL getPATH()
String folderPath = item . getPath ( ) ! = null & & ! item . getPath ( ) . isEmpty ( ) ? item . getPath ( ) : folder . getPath ( ) ;
2017-07-13 11:17:07 +02:00
Item itemFolderToReturn = ItemBuilder . getItem ( null , folder , folderPath , showableTypes , filterCriteria , true , loadGcubeProperties , searchStartIndex , limit ) ;
2017-07-06 16:16:37 +02:00
2017-07-13 11:17:07 +02:00
SearchedFolder sf = new SearchedFolder ( itemFolderToReturn , startIndex , limit , searchStartIndex , false ) ;
int currentListCount = sf . getFolder ( ) . getChildren ( ) . size ( ) ;
logger . debug ( " MyLg Total item returning is: " + currentListCount ) ;
2017-07-06 16:16:37 +02:00
2017-07-13 11:17:07 +02:00
WorkspaceFolder hlFolder = ( WorkspaceFolder ) folder ;
int folderChildrenCount = hlFolder . getChildrenCount ( false ) ;
logger . debug ( " MyLg Folder children count is: " + folderChildrenCount ) ;
if ( currentListCount = = limit | | folderChildrenCount = = 0 ) {
logger . debug ( " Page completed returning " + currentListCount + " items " ) ;
int offset = searchStartIndex + limit ;
//Collections.sort(sf.getFolder().getChildren(), new ItemComparator());
sf . setServerSearchFinished ( offset > folderChildrenCount | | folderChildrenCount = = 0 ) ;
logger . debug ( " is Search finished: " + sf . isServerSearchFinished ( ) ) ;
return sf ;
}
ArrayList < Item > childrenToReturn = new ArrayList < Item > ( limit ) ;
childrenToReturn . addAll ( sf . getFolder ( ) . getChildren ( ) ) ;
int offsetStartIndex = searchStartIndex ;
boolean pageOffsetOut = false ;
while ( currentListCount < limit & & ! sf . isServerSearchFinished ( ) & & ! pageOffsetOut ) { //&& SEARCH NOT ULTIMATED
logger . debug ( " MyLg new WHILE Items count: " + currentListCount + " is less than limit.. " ) ;
int newstartIndex = offsetStartIndex + limit + 1 ;
logger . debug ( " MyLg NewStartIndex is startIndex+limit: " + newstartIndex ) ;
//THERE ARE OTHER CHILDREN OVER NEW START INDEX
if ( newstartIndex < folderChildrenCount ) {
//newLimit = limit - childrenToReturn.size();
logger . debug ( " MyLg getting items with index start: " + newstartIndex + " , limit: " + limit ) ;
Item newItemFolder = ItemBuilder . getItem ( null , folder , folderPath , showableTypes , filterCriteria , true , loadGcubeProperties , newstartIndex , limit ) ;
int diff = limit - currentListCount ; //How items are remaining
//int offset = 0;
logger . debug ( " MyLg new search start: " + newstartIndex + " , diff: " + diff + " , retrieved: " + newItemFolder . getChildren ( ) . size ( ) ) ;
if ( diff > = newItemFolder . getChildren ( ) . size ( ) ) {
logger . debug ( " MyLg Adding sublist from 0 to 'diff' " + diff + " to children " ) ;
childrenToReturn . addAll ( newItemFolder . getChildren ( ) . subList ( 0 , newItemFolder . getChildren ( ) . size ( ) ) ) ;
//offset = diff;
} else {
logger . debug ( " MyLg PageOffsetOut, the sublist size: " + newItemFolder . getChildren ( ) . size ( ) + " is greather than (limit-currentListCount) " + diff + " leaving WHILE... " ) ;
//childrenToReturn.addAll(newItemFolder.getChildren().subList(0, newItemFolder.getChildren().size()));
//offset = newItemFolder.getChildren().size();
pageOffsetOut = true ;
}
offsetStartIndex = newstartIndex ;
currentListCount = childrenToReturn . size ( ) ;
//int realServerEndIndex = newstartIndex+offset;
logger . debug ( " MyLg New items count is: " + currentListCount + " serverEndIndex: " + offsetStartIndex ) ;
sf . setServerEndIndex ( offsetStartIndex ) ;
} else {
logger . debug ( " MyLg New start index (oldStartIndex+limit) is grather than folder children count, search is finished " ) ;
sf . setServerSearchFinished ( true ) ;
}
}
sf . getFolder ( ) . setChildren ( childrenToReturn ) ;
//sf.setServerEndIndex(sf.getServerEndIndex());
2017-07-06 16:16:37 +02:00
if ( purgeEmpyFolders ) {
2017-07-13 11:17:07 +02:00
itemFolderToReturn = ItemBuilder . purgeEmptyFolders ( sf . getFolder ( ) ) ;
2017-07-06 16:16:37 +02:00
}
2017-07-13 11:17:07 +02:00
//logger.debug("Returning: "+itemFolder.getChildren().size() + " items");
//Long endTime = System.currentTimeMillis() - startTime;
//String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime));
//logger.debug("end time - " + time);
2017-07-06 16:16:37 +02:00
2017-07-13 11:17:07 +02:00
int i = 0 ;
for ( Item item2 : sf . getFolder ( ) . getChildren ( ) ) {
logger . debug ( + + i + " ) " + item2 ) ;
}
2017-07-06 16:16:37 +02:00
2017-07-13 11:17:07 +02:00
//Collections.sort(itemFolderToReturn.getChildren(), new ItemComparator());
logger . debug ( " Returning: " + sf ) ;
return sf ;
2017-07-06 16:16:37 +02:00
} catch ( Exception e ) {
logger . error ( " Error during folder retrieving " , e ) ;
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get folder " ) ;
}
}
/ * ( non - Javadoc )
* @see org . gcube . portlets . widgets . wsexplorer . client . rpc . WorkspaceExplorerService # getFolderChildrenCount ( org . gcube . portlets . widgets . wsexplorer . shared . Item )
* /
@Override
public int getFolderChildrenCount ( Item item ) throws WorkspaceNavigatorServiceException {
try {
Workspace workspace = getWorkspace ( ) ;
WorkspaceItem wsItem = workspace . getItem ( item . getId ( ) ) ;
if ( wsItem . isFolder ( ) ) {
WorkspaceFolder folder = ( WorkspaceFolder ) wsItem ;
int count = folder . getChildrenCount ( false ) ;
//count = folder.getChildrenCount();
logger . debug ( " returning children count time - " + count ) ;
//return count = 100;
return count ;
}
return 0 ;
} catch ( Exception e ) {
logger . error ( " Error during folder retrieving " , e ) ;
throw new WorkspaceNavigatorServiceException ( " Sorry, an error occurred when performing get count on folder children " ) ;
}
}
2015-06-24 15:16:13 +02:00
}