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 ;
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 ;
2018-05-18 18:31:46 +02:00
import org.gcube.common.authorization.library.provider.SecurityTokenProvider ;
2016-11-23 15:35:15 +01:00
import org.gcube.common.portal.PortalContext ;
2018-05-18 18:31:46 +02:00
import org.gcube.common.storagehub.client.plugins.AbstractPlugin ;
import org.gcube.common.storagehub.client.proxies.WorkspaceManagerClient ;
import org.gcube.common.storagehub.model.items.FolderItem ;
import org.gcube.common.storagehub.model.items.Item ;
import org.gcube.common.storagehub.model.items.SharedFolder ;
import org.gcube.common.storagehub.model.items.VreFolder ;
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 ;
2018-05-18 18:31:46 +02:00
import org.gcube.portlets.widgets.wsexplorer.server.stohub.Whorespace ;
2015-06-24 15:16:13 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.FilterCriteria ;
2015-06-30 12:31:49 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.ItemCategory ;
2018-05-18 18:31:46 +02:00
import org.gcube.portlets.widgets.wsexplorer.shared.ItemDTO ;
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
/ * *
* { @inheritDoc }
* /
@Override
2018-05-18 18:31:46 +02:00
public ItemDTO 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 {
2018-05-18 18:31:46 +02:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
String userName = pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ;
String scope = pContext . getCurrentScope ( getThreadLocalRequest ( ) ) ;
String authorizationToken = pContext . getCurrentUserToken ( scope , userName ) ;
SecurityTokenProvider . instance . set ( authorizationToken ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " Start getRoot... " ) ;
2018-05-18 18:31:46 +02:00
Item root = Whorespace . getRoot ( getThreadLocalRequest ( ) ) ;
2015-06-24 15:16:13 +02:00
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
2018-05-18 18:31:46 +02:00
ItemDTO 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
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 ;
2017-11-17 16:47:29 +01:00
logger . debug ( " end time - " + String . format ( " %d msc %d sec " , endTime - startTime , TimeUnit . MILLISECONDS . toSeconds ( endTime ) ) ) ;
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
2018-05-18 18:31:46 +02:00
public ItemDTO getFolder ( ItemInterface item , List < ItemType > showableTypes , boolean purgeEmpyFolders , FilterCriteria filterCriteria , boolean loadGcubeProperties ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " getFolder folderId: " + item . getId ( ) + " showableTypes: " + showableTypes + " purgeEmpyFolders: " + purgeEmpyFolders + " filterCriteria: " + filterCriteria ) ;
2015-06-24 15:16:13 +02:00
try {
2018-05-18 18:31:46 +02:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
String userName = pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ;
String scope = pContext . getCurrentScope ( getThreadLocalRequest ( ) ) ;
String authorizationToken = pContext . getCurrentUserToken ( scope , userName ) ;
SecurityTokenProvider . instance . set ( authorizationToken ) ;
Item folder = Whorespace . getItem ( getThreadLocalRequest ( ) , item . getId ( ) ) ;
2017-10-31 16:22:35 +01:00
logger . trace ( " GetFolder - Replying folder " ) ;
2018-05-18 18:31:46 +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 ( ) ;
2018-05-18 18:31:46 +02:00
ItemDTO 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
2015-06-25 12:33:18 +02:00
Collections . sort ( itemFolder . getChildren ( ) , new ItemComparator ( ) ) ;
2017-11-17 16:47:29 +01:00
logger . info ( " Returning children size: " + itemFolder . getChildren ( ) . size ( ) ) ;
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
2018-05-18 18:31:46 +02:00
public ItemDTO getItemByCategory ( ItemCategory category ) throws WorkspaceNavigatorServiceException {
2016-05-03 15:29:24 +02:00
logger . trace ( " GetItemByCategory category: " + category ) ;
2018-05-18 18:31:46 +02:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
String userName = pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ;
String scope = pContext . getCurrentScope ( getThreadLocalRequest ( ) ) ;
String authorizationToken = pContext . getCurrentUserToken ( scope , userName ) ;
SecurityTokenProvider . instance . set ( authorizationToken ) ;
2015-06-30 12:31:49 +02:00
try {
2018-05-18 18:31:46 +02:00
ItemDTO item = null ;
2016-01-15 11:13:48 +01:00
2015-06-30 12:31:49 +02:00
switch ( category ) {
case HOME : {
2018-05-18 18:31:46 +02:00
Item root = Whorespace . getRoot ( getThreadLocalRequest ( ) ) ;
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 ( " . " ) ) ;
}
2018-05-18 18:31:46 +02:00
item = new ItemDTO ( null , root . getId ( ) , fullName + " 's " , ItemType . FOLDER , root . getPath ( ) , root . getOwner ( ) , null , true , true ) ;
2015-06-30 12:31:49 +02:00
break ;
}
case VRE_FOLDER : {
2018-05-18 18:31:46 +02:00
String vreFolderId = Whorespace . getVREFoldersId ( getThreadLocalRequest ( ) ) ;
Item folder = Whorespace . getItem ( getThreadLocalRequest ( ) , vreFolderId ) ;
item = new ItemDTO ( null , folder . getId ( ) , WorkspaceExplorerConstants . VRE_FOLDERS_LABEL , ItemType . FOLDER , folder . getPath ( ) , folder . getOwner ( ) , 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
2018-05-18 18:31:46 +02:00
public ItemDTO 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 {
2018-05-18 18:31:46 +02:00
PortalContext pContext = PortalContext . getConfiguration ( ) ;
String userName = pContext . getCurrentUser ( getThreadLocalRequest ( ) ) . getUsername ( ) ;
String scope = pContext . getCurrentScope ( getThreadLocalRequest ( ) ) ;
String authorizationToken = pContext . getCurrentUserToken ( scope , userName ) ;
SecurityTokenProvider . instance . set ( authorizationToken ) ;
String vreFolderId = Whorespace . getVREFoldersId ( getThreadLocalRequest ( ) ) ;
Item folder = Whorespace . getItem ( getThreadLocalRequest ( ) , vreFolderId ) ;
2015-06-25 17:22:13 +02:00
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
2018-05-18 18:31:46 +02:00
ItemDTO 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 {
2018-05-18 18:31:46 +02:00
logger . warn ( " checkName name NOT IMPLEMENTED: " + name ) ;
return true ; //TODO:
2015-06-24 15:16:13 +02:00
}
/ * 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
2018-05-18 18:31:46 +02:00
public List < ItemDTO > 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
2018-05-18 18:31:46 +02:00
Item wsItem = Whorespace . getItem ( getThreadLocalRequest ( ) , itemIdentifier ) ;
2016-05-03 15:29:24 +02:00
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
2018-05-18 18:31:46 +02:00
List < Item > parents = new ArrayList < > ( ) ;
Item whileItem = wsItem ;
while ( whileItem . getParentId ( ) ! = null ) {
parents . add ( whileItem ) ;
whileItem = Whorespace . getItem ( getThreadLocalRequest ( ) , whileItem . getParentId ( ) ) ;
}
// List<Item> parents = workspace.getParentsById(itemIdentifier);
2016-05-03 15:29:24 +02:00
logger . trace ( " parents size: " + parents . size ( ) ) ;
2018-05-18 18:31:46 +02:00
ItemDTO [ ] arrayParents ;
if ( includeItemAsParent = = true & & wsItem instanceof FolderItem ) {
arrayParents = new ItemDTO [ parents . size ( ) ] ;
arrayParents [ parents . size ( ) - 1 ] = ItemBuilder . buildFolderForBreadcrumbs ( ( FolderItem ) wsItem , null ) ;
2016-01-15 11:13:48 +01:00
}
else {
2018-05-18 18:31:46 +02:00
arrayParents = new ItemDTO [ 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
* /
2018-05-18 18:31:46 +02:00
if ( wsItem instanceof FolderItem ) {
if ( ItemBuilder . isSpecialFolder ( ( FolderItem ) wsItem ) ) {
return new ArrayList < ItemDTO > ( 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 - - ) {
2018-05-18 18:31:46 +02:00
FolderItem wsParentFolder = ( FolderItem ) 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
2018-05-18 18:31:46 +02:00
ItemDTO parent = arrayParents [ i ] ;
ItemDTO 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
2018-05-18 18:31:46 +02:00
List < ItemDTO > breadcrumbs = new ArrayList < ItemDTO > ( arrayParents . length - 1 ) ;
2015-12-03 15:41:16 +01:00
for ( int i = 1 ; i < arrayParents . length ; i + + ) {
breadcrumbs . add ( arrayParents [ i ] ) ;
}
return breadcrumbs ;
2016-01-15 11:13:48 +01:00
}
else {
2018-05-18 18:31:46 +02:00
return new ArrayList < ItemDTO > ( 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
2018-05-18 18:31:46 +02:00
public List < ItemDTO > 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 {
2018-05-18 18:31:46 +02:00
Item wsItem = Whorespace . getItem ( getThreadLocalRequest ( ) , itemIdentifier ) ;
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
List < Item > parents = new ArrayList < > ( ) ;
Item whileItem = wsItem ;
while ( whileItem . getParentId ( ) ! = null ) {
parents . add ( whileItem ) ;
whileItem = Whorespace . getItem ( getThreadLocalRequest ( ) , whileItem . getParentId ( ) ) ;
}
2016-05-03 15:29:24 +02:00
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
2018-05-18 18:31:46 +02:00
//List<WorkspaceItem> parents = workspace.getParentsById(itemIdentifier);
2016-05-03 15:29:24 +02:00
logger . trace ( " parents size: " + parents . size ( ) ) ;
2018-05-18 18:31:46 +02:00
ItemDTO [ ] arrayParents ;
2015-12-03 15:41:16 +01:00
2018-05-18 18:31:46 +02:00
if ( includeItemAsParent = = true & & wsItem instanceof FolderItem ) {
arrayParents = new ItemDTO [ parents . size ( ) ] ;
arrayParents [ parents . size ( ) - 1 ] = ItemBuilder . buildFolderForBreadcrumbs ( ( FolderItem ) wsItem , null ) ;
2016-01-15 11:13:48 +01:00
}
else {
2018-05-18 18:31:46 +02:00
arrayParents = new ItemDTO [ 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
* /
2018-05-18 18:31:46 +02:00
if ( wsItem instanceof FolderItem ) {
if ( ItemBuilder . isSpecialFolder ( ( FolderItem ) wsItem ) ) {
2016-05-03 15:29:24 +02:00
logger . debug ( " item id is special folder, returning " ) ;
2018-05-18 18:31:46 +02:00
return new ArrayList < ItemDTO > ( Arrays . asList ( arrayParents ) ) ;
2015-12-03 15:41:16 +01:00
}
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 " ) ;
2018-05-18 18:31:46 +02:00
return new ArrayList < ItemDTO > ( Arrays . asList ( arrayParents ) ) ;
2015-12-03 15:41:16 +01:00
}
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 - - ) {
2018-05-18 18:31:46 +02:00
FolderItem wsParentFolder = ( FolderItem ) 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
2018-05-18 18:31:46 +02:00
ItemDTO parent = arrayParents [ i ] ;
ItemDTO 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
2018-05-18 18:31:46 +02:00
List < ItemDTO > breadcrumbs = new ArrayList < ItemDTO > ( ) ;
2015-12-03 15:41:16 +01:00
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 {
2018-05-18 18:31:46 +02:00
return new ArrayList < ItemDTO > ( 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 {
2018-05-18 18:31:46 +02:00
//TODO: implementation missing
return 0L ;
// logger.info("get Size By ItemId "+ itemId);
// try {
//
// Workspace workspace = getWorkspace();
// WorkspaceItem wsItem = workspace.getItem(itemId);
// Long size = new Long(-1);
//
// 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();
// }
// logger.info("returning size: " +size);
// return size;
//
// } catch (Exception e) {
// logger.error("get Size By ItemId ", e);
// throw new Exception(e.getMessage());
// }
2015-07-06 17:18:23 +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 # 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 {
2018-05-18 18:31:46 +02:00
Item wsItem = Whorespace . getItem ( getThreadLocalRequest ( ) , itemId ) ;
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
2016-01-15 11:13:48 +01:00
2018-05-18 18:31:46 +02:00
if ( ! ( wsItem instanceof FolderItem ) ) {
2015-07-06 17:18:23 +02:00
return null ;
2016-01-15 11:13:48 +01:00
}
FolderItem folderItem = ( FolderItem ) wsItem ;
2018-05-18 18:31:46 +02:00
//TODO:folderItem.getMimeType();
return " unknown " ;
2015-07-06 17:18:23 +02:00
} 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 ) ;
2018-05-18 18:31:46 +02:00
Item wsItem = Whorespace . getItem ( getThreadLocalRequest ( ) , folderId ) ;
logger . trace ( " workspace retrieve item name: " + wsItem . getName ( ) ) ;
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 {
2018-05-18 18:31:46 +02:00
return " NOT IMPLEMENTED " ; //TODO
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
* /
2018-05-18 18:31:46 +02:00
private boolean isASharedFolder ( Item item , boolean asRoot ) {
2015-07-06 17:18:23 +02:00
try {
2018-05-18 18:31:46 +02:00
if ( item instanceof SharedFolder | | item instanceof VreFolder ) {
SharedFolder folder = ( SharedFolder ) item ;
if ( folder . isVreFolder ( ) )
return true ;
2015-07-06 17:18:23 +02:00
return true ;
2018-05-18 18:31:46 +02:00
} else if ( item instanceof FolderItem ) {
return false ;
2015-07-06 17:18:23 +02:00
}
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
2018-05-18 18:31:46 +02:00
public ItemDTO 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 ) ;
2018-05-18 18:31:46 +02:00
//TODO
return null ;
// 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);
//
//// _log.info("Path returned by HL: "+wsFolder.getPath());
//
// List<ItemType> allTypes = Arrays.asList(ItemType.values());
//
// ItemDTO parent = null;
// try{
// String parentPath = wsFolder.getParent()!=null?wsFolder.getParent().getPath():"";
// parent = ItemBuilder.getItem(null, wsFolder.getParent(), parentPath, allTypes, null, false, false);
// }catch(Exception e){
// logger.error("Get parent thown an exception, is it the root id? "+parentId);
// }
//
// //TODO PATCH TO AVOID PROBLEM ON GETPATH. FOR EXAMPLE WHEN PARENT IS ROOT
// String itemPath = null;
// try{
// itemPath = wsFolder.getPath();
// logger.info("itemPath: "+itemPath);
// }catch(Exception e){
// logger.error("Get path thrown an exception, for id: "+wsFolder.getId() +" name: "+wsFolder.getName(), e);
//// itemPath= wsFolder.isFolder()?workspace.getRoot().getPath()+"/"+wsFolder.getName():workspace.getRoot().getPath();
// //PATCH TO RETURN ABSOLUTE PATH
// itemPath= workspace.getRoot().getPath()+"/"+wsFolder.getName();
// logger.warn("returning base path: "+itemPath);
// }
//
// return ItemBuilder.getItem(parent, wsFolder, itemPath, allTypes, null, false, false);
//
// } catch(InsufficientPrivilegesException e){
// String error = "Insufficient Privileges to create the folder";
// logger.error(error, e);
// throw new Exception(error);
// } catch (ItemAlreadyExistException e) {
// String error = "An error occurred on creating folder, " +e.getMessage();
// logger.error(error, e);
// throw new Exception(error);
// } catch (Exception e) {
// String error = "An error occurred on the sever during creating folder. Try again";
// logger.error(error, e);
// throw new Exception(error);
// }
2016-02-01 16:03:11 +01:00
}
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 ) ;
2018-05-18 18:31:46 +02:00
//TODO
return null ;
// 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");
// }
2016-05-17 16:27:15 +02:00
}
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 (
2018-05-18 18:31:46 +02:00
ItemDTO item , List < ItemType > showableTypes , boolean purgeEmpyFolders ,
2017-07-06 16:16:37 +02:00
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 {
2018-05-18 18:31:46 +02:00
Item folder = Whorespace . getItem ( getThreadLocalRequest ( ) , 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 ( ) ;
2018-05-18 18:31:46 +02:00
ItemDTO 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
2018-05-18 18:31:46 +02:00
FolderItem hlFolder = ( FolderItem ) folder ;
int folderChildrenCount = Whorespace . getItemChildrenCount ( getThreadLocalRequest ( ) , hlFolder . getId ( ) ) ;
2017-07-13 11:17:07 +02:00
logger . debug ( " MyLg Folder children count is: " + folderChildrenCount ) ;
if ( currentListCount = = limit | | folderChildrenCount = = 0 ) {
logger . debug ( " Page completed returning " + currentListCount + " items " ) ;
int offset = searchStartIndex + limit ;
2017-07-13 12:37:12 +02:00
Collections . sort ( sf . getFolder ( ) . getChildren ( ) , new ItemComparator ( ) ) ;
2017-07-13 11:17:07 +02:00
sf . setServerSearchFinished ( offset > folderChildrenCount | | folderChildrenCount = = 0 ) ;
logger . debug ( " is Search finished: " + sf . isServerSearchFinished ( ) ) ;
return sf ;
}
2018-05-18 18:31:46 +02:00
ArrayList < ItemDTO > childrenToReturn = new ArrayList < ItemDTO > ( limit ) ;
2017-07-13 11:17:07 +02:00
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 ) ;
2018-05-18 18:31:46 +02:00
ItemDTO newItemFolder = ItemBuilder . getItem ( null , folder , folderPath , showableTypes , filterCriteria , true , loadGcubeProperties , newstartIndex , limit ) ;
2017-07-13 11:17:07 +02:00
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 12:37:12 +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 12:37:12 +02:00
Collections . sort ( itemFolderToReturn . getChildren ( ) , new ItemComparator ( ) ) ;
2017-07-13 11:17:07 +02:00
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 " ) ;
}
}
2018-05-18 18:31:46 +02:00
2017-07-06 16:16:37 +02:00
@Override
2018-05-18 18:31:46 +02:00
public int getFolderChildrenCount ( ItemDTO item ) {
return Whorespace . getItemChildrenCount ( getThreadLocalRequest ( ) , item . getId ( ) ) ;
2017-07-06 16:16:37 +02:00
}
2018-05-18 18:31:46 +02:00
2015-06-24 15:16:13 +02:00
}