@ -26,6 +26,7 @@ import javax.jcr.query.Query;
import javax.jcr.version.Version ;
import org.apache.commons.io.FilenameUtils ;
import org.apache.jackrabbit.util.ISO9075 ;
import org.apache.jackrabbit.util.Text ;
import org.gcube.common.authorization.library.provider.AuthorizationProvider ;
import org.gcube.common.scope.api.ScopeProvider ;
@ -109,15 +110,30 @@ public class Utils {
}
public static < T extends Item > List < T > serachByNameOnFolder ( Session ses , Node parent , List < String > excludes , Range range , boolean showHidden , Class < ? extends Item > nodeTypeToInclude , String nameParam ) throws RepositoryException , BackendGenericError {
String xpath = String . format ( "/jcr:root%s//element(*,nthl:workspaceItem)[jcr:like(@jcr:title, '%s')]" , ISO9075 . encodePath ( parent . getPath ( ) ) , nameParam ) ;
public static < T extends Item > List < T > getItemList ( Node parent , List < String > excludes , Range range , boolean showHidden , Class < ? extends Item > nodeTypeToInclude ) throws RepositoryException , BackendGenericError {
//String query = String.format("SELECT * FROM [nthl:workspaceLeafItem] AS node WHERE ISDESCENDANTNODE('%s') ORDER BY node.[jcr:lastModified] DESC ",vreFolder.getPath());
logger . trace ( "query for search is {}" , xpath ) ;
logger. debug ( "getting children of node {}" , parent . getIdentifier ( ) ) ;
Query jcrQuery = ses . getWorkspace ( ) . getQueryManager ( ) . createQuery ( xpath , Query . XPATH ) ;
List < T > returnList = new ArrayList < T > ( ) ;
NodeIterator it = jcrQuery . execute ( ) . getNodes ( ) ;
return getItemListFromNodeIterator ( it , excludes , range , showHidden , nodeTypeToInclude ) ;
}
public static < T extends Item > List < T > getItemList ( Node parent , List < String > excludes , Range range , boolean showHidden , Class < ? extends Item > nodeTypeToInclude ) throws RepositoryException , BackendGenericError {
logger . trace ( "getting children of node {}" , parent . getIdentifier ( ) ) ;
long start = System . currentTimeMillis ( ) ;
NodeIterator iterator = parent . getNodes ( ) ;
logger . trace ( "time to get iterator {}" , ( System . currentTimeMillis ( ) - start ) ) ;
return getItemListFromNodeIterator ( iterator , excludes , range , showHidden , nodeTypeToInclude ) ;
}
private static < T extends Item > List < T > getItemListFromNodeIterator ( NodeIterator iterator , List < String > excludes , Range range , boolean showHidden , Class < ? extends Item > nodeTypeToInclude ) throws RepositoryException , BackendGenericError {
List < T > returnList = new ArrayList < T > ( ) ;
logger . trace ( "nodeType is {}" , nodeTypeToInclude ) ;
int count = 0 ;
logger . trace ( "selected range is {}" , range ) ;
@ -125,12 +141,12 @@ public class Utils {
while ( iterator . hasNext ( ) ) {
Node current = iterator . nextNode ( ) ;
logger . debug ( "current node " + current . getName ( ) ) ;
logger . trace ( "current node " + current . getName ( ) ) ;
if ( isToExclude ( current , showHidden ) )
continue ;
logger . debug ( "current node not excluded " + current . getName ( ) ) ;
logger . trace ( "current node not excluded " + current . getName ( ) ) ;
if ( range = = null | | ( count > = range . getStart ( ) & & returnList . size ( ) < range . getLimit ( ) ) ) {
T item = node2Item . getFilteredItem ( current , excludes , nodeTypeToInclude ) ;
@ -166,13 +182,13 @@ public class Utils {
Node currentNode = session . getNodeByIdentifier ( directory . getId ( ) ) ;
queue . push ( directory ) ;
Deque < Item > tempQueue = new LinkedList < Item > ( ) ;
logger . debug ( "adding directory {}" , currentNode . getPath ( ) ) ;
logger . trace ( "adding directory {}" , currentNode . getPath ( ) ) ;
for ( Item item : Utils . getItemList ( currentNode , Excludes . GET_ONLY_CONTENT , null , false , null ) ) {
if ( excludes . contains ( item . getId ( ) ) ) continue ;
if ( item instanceof FolderItem )
tempQueue . addAll ( getAllNodesForZip ( ( FolderItem ) item , session , accountingHandler , excludes ) ) ;
else if ( item instanceof AbstractFileItem ) {
logger . debug ( "adding file {}" , item . getPath ( ) ) ;
logger . trace ( "adding file {}" , item . getPath ( ) ) ;
AbstractFileItem fileItem = ( AbstractFileItem ) item ;
accountingHandler . createReadObj ( fileItem . getTitle ( ) , session , session . getNodeByIdentifier ( item . getId ( ) ) , false ) ;
queue . addLast ( item ) ;
@ -190,9 +206,9 @@ public class Utils {
Item item = queue . pop ( ) ;
if ( item instanceof FolderItem ) {
actualPath = Paths . getPath ( item . getPath ( ) ) ;
logger . debug ( "actualPath is {}" , actualPath . toPath ( ) ) ;
logger . trace ( "actualPath is {}" , actualPath . toPath ( ) ) ;
String name = Paths . remove ( actualPath , originalPath ) . toPath ( ) . replaceFirst ( "/" , "" ) ;
logger . debug ( "writing dir {}" , name ) ;
logger . trace ( "writing dir {}" , name ) ;
if ( name . isEmpty ( ) ) continue ;
try {
zos . putNextEntry ( new ZipEntry ( name ) ) ;
@ -208,7 +224,7 @@ public class Utils {
}
try ( BufferedInputStream is = new BufferedInputStream ( streamToWrite ) ) {
String name = ( Paths . remove ( actualPath , originalPath ) . toPath ( ) + item . getName ( ) ) . replaceFirst ( "/" , "" ) ;
logger . debug ( "writing file {}" , name ) ;
logger . trace ( "writing file {}" , name ) ;
zos . putNextEntry ( new ZipEntry ( name ) ) ;
copyStream ( is , zos ) ;
} catch ( Exception e ) {
@ -285,7 +301,7 @@ public class Utils {
String nameTocheck = ext . isEmpty ( ) ? String . format ( "%s(*)" , filename ) : String . format ( "%s(*).%s" , filename , ext ) ;
logger . debug ( "filename is {}, extension is {} , and name to check is {}" , filename , ext , nameTocheck ) ;
logger . trace ( "filename is {}, extension is {} , and name to check is {}" , filename , ext , nameTocheck ) ;
NodeIterator ni = destination . getNodes ( nameTocheck ) ;
int maxval = 0 ;