private void fillRepositoryDirectoryFromTree( final RepositoryDirectoryInterface parentDir, final RepositoryFileTree treeNode ) throws KettleException { try { List<RepositoryElementMetaInterface> fileChildren = new ArrayList<RepositoryElementMetaInterface>(); List<RepositoryFileTree> children = treeNode.getChildren(); if ( children != null ) { for ( RepositoryFileTree child : children ) { if ( child.getFile().isFolder() ) { RepositoryDirectory dir = new RepositoryDirectory( parentDir, child.getFile().getName() ); dir.setObjectId( new StringObjectId( child.getFile().getId().toString() ) ); parentDir.addSubdirectory( dir ); fillRepositoryDirectoryFromTree( dir, child ); } else { // a real file, like a Transformation or Job RepositoryLock lock = unifiedRepositoryLockService.getLock( child.getFile() ); RepositoryObjectType objectType = getObjectType( child.getFile().getName() ); fileChildren.add( new EERepositoryObject( child, parentDir, null, objectType, null, lock, false ) ); } } parentDir.setRepositoryObjects( fileChildren ); } } catch ( Exception e ) { throw new KettleException( "Unable to load directory structure from repository", e ); } }
@Override public List<RepositoryElementMetaInterface> getRepositoryObjects( ) { if ( fileChildren == null ) { fileChildren = new ArrayList<>(); synchronized ( fileChildren ) { UnifiedRepositoryLockService lockService = (UnifiedRepositoryLockService) registry.getService( ILockService.class ); RepositoryFileTree tree = repository.getTree( new RepositoryRequest( this.self.getPath(), showHidden, 1, null ) ); for ( RepositoryFileTree tchild : tree.getChildren() ) { RepositoryFile child = tchild.getFile(); if ( !child.isFolder() ) { RepositoryLock lock = null; try { lock = lockService.getLock( child ); RepositoryObjectType objectType = PurRepository.getObjectType( child.getName() ); EERepositoryObject repositoryObject = new EERepositoryObject( child, this, null, objectType, null, lock, false ); repositoryObject.setVersioningEnabled( tchild.getVersioningEnabled() ); repositoryObject.setVersionCommentEnabled( tchild.getVersionCommentEnabled() ); fileChildren.add( repositoryObject ); } catch ( KettleException e ) { logger.error( "Error converting Unified Repository file to PDI RepositoryObject: " + child.getPath() + ". File will be skipped", e ); } } } } } return fileChildren; }
/** * This is the only constructor that will populate the versioningEnabled and versionCommentEnabled flags. Other * constructors will leave the values as null. * * @param repoTree * @param repositoryDirectory * @param modifiedUser * @param objectType * @param description * @param lock * @param deleted */ public EERepositoryObject( RepositoryFileTree repoTree, RepositoryDirectoryInterface repositoryDirectory, String modifiedUser, RepositoryObjectType objectType, String description, RepositoryLock lock, boolean deleted ) { this( repoTree.getFile(), repositoryDirectory, modifiedUser, objectType, description, lock, deleted ); setVersioningEnabled( repoTree.getVersioningEnabled() ); setVersionCommentEnabled( repoTree.getVersionCommentEnabled() ); }
RepositoryFileTree emptyDir = new RepositoryFileTree( empty, Collections.<RepositoryFileTree>emptyList() ); RepositoryFile root = new RepositoryFile.Builder( "rootDir" ).build(); ArrayList<RepositoryFileTree> children = new ArrayList<RepositoryFileTree>( 1 ); children.add( emptyDir ); RepositoryFileTree rootDir = new RepositoryFileTree( root, children ); assertNotNull( rootDir2.getChildren().get( 0 ).getChildren() ); assertEquals( rootDir, rootDir2 );
public RepositoryFileTree build() { return new RepositoryFileTree( file, toTreeChildren( children ) ); }
@Override public RepositoryFileTree unmarshal( final RepositoryFileTreeDto v ) { List<RepositoryFileTree> children = null; List<RepositoryFileTreeDto> childrenDTO = v.getChildren(); if ( childrenDTO != null ) { children = new ArrayList<RepositoryFileTree>(); for ( RepositoryFileTreeDto child : childrenDTO ) { children.add( unmarshal( child ) ); } } RepositoryFileTree repositoryFileTree = new RepositoryFileTree( RepositoryFileAdapter.toFile( v.getFile() ), children ); Boolean versioningEnable = v.getFile().getVersioningEnabled(); Boolean versionCommentEnabled = v.getFile().getVersionCommentEnabled(); if ( versioningEnable != null ) { repositoryFileTree.setVersioningEnabled( versioningEnable ); } if ( versionCommentEnabled != null ) { repositoryFileTree.setVersionCommentEnabled( versionCommentEnabled ); } return repositoryFileTree; } }
private RepositoryDirectoryInterface initRepositoryDirectoryTree( RepositoryFileTree repoTree ) throws KettleException { RepositoryFile rootFolder = repoTree.getFile(); RepositoryDirectory rootDir = new RepositoryDirectory(); rootDir.setObjectId( new StringObjectId( rootFolder.getId().toString() ) ); fillRepositoryDirectoryFromTree( rootDir, repoTree ); // Example: /etc RepositoryDirectory etcDir = rootDir.findDirectory( ClientRepositoryPaths.getEtcFolderPath() ); RepositoryDirectory newRoot = new RepositoryDirectory(); newRoot.setObjectId( rootDir.getObjectId() ); newRoot.setVisible( false ); for ( int i = 0; i < rootDir.getNrSubdirectories(); i++ ) { RepositoryDirectory childDir = rootDir.getSubdirectory( i ); // Don't show /etc boolean isEtcChild = childDir.equals( etcDir ); if ( isEtcChild ) { continue; } newRoot.addSubdirectory( childDir ); } return newRoot; }
@Override public RepositoryFileTreeDto marshal( final RepositoryFileTree v ) { RepositoryFileTreeDto treeDto = new RepositoryFileTreeDto(); RepositoryFileDto file = RepositoryFileAdapter.toFileDto( v, membersSet, exclude, includeAcls ); if ( file != null ) { treeDto.setFile( RepositoryFileAdapter.toFileDto( v, membersSet, exclude, includeAcls ) ); List<RepositoryFileTreeDto> children = null; if ( v.getChildren() != null ) { children = new ArrayList<RepositoryFileTreeDto>(); for ( RepositoryFileTree child : v.getChildren() ) { RepositoryFileTreeDto childTreeDto = marshal( child ); if ( childTreeDto != null ) { children.add( childTreeDto ); } } } treeDto.setChildren( children ); return treeDto; } else { return null; } }
public RepositoryFileTree( final RepositoryFile file, final List<RepositoryFileTree> children ) { super(); notNull( file ); this.file = file; // defensive copy this.children = children != null ? new ArrayList<RepositoryFileTree>( children ) : null; }
private RepositoryFileTree getTree( final File file, final int depth, final String childNodeFilter, RepositoryRequest.FILES_TYPE_FILTER types ) { RepositoryFile rootFile = internalGetFile( file ); List<RepositoryFileTree> children; if ( depth != 0 ) { children = new ArrayList<RepositoryFileTree>(); if ( file.isDirectory() ) { File[] childrenArray = file.listFiles(); for ( File child : childrenArray ) { if ( child.isFile() ) { if ( types == RepositoryRequest.FILES_TYPE_FILTER.FILES_FOLDERS || types == RepositoryRequest.FILES_TYPE_FILTER.FILES ) { children.add( new RepositoryFileTree( internalGetFile( child ), new ArrayList<>() ) ); } continue; } RepositoryFileTree repositoryChildFileTree = getTree( child, depth - 1, childNodeFilter, types ); if ( repositoryChildFileTree != null ) { children.add( repositoryChildFileTree ); } } } Collections.sort( children ); } else { children = null; } return new RepositoryFileTree( rootFile, children ); }
public static RepositoryFileDto toFileDto( final RepositoryFileTree repositoryFileTree, Set<String> memberSet, boolean exclude, boolean includeAcls ) { RepositoryFileDto repositoryFileDto = toFileDto( repositoryFileTree.getFile(), memberSet, exclude, includeAcls ); return repositoryFileDto; }
List<RepositoryFileTree> subdirectories = new ArrayList<RepositoryFileTree>(); if ( root.getChildren() != null && !root.getChildren().isEmpty() ) { Iterator<RepositoryFileTree> repObjIter = root.getChildren().iterator(); List<RepositoryFile> files = new ArrayList<RepositoryFile>(); if ( repObj.getFile().isFolder() ) { } else if ( !exporter.canExport( repObj.getFile() ) ) { files.add( repObj.getFile() ); .getFriendlyTypeName(), root.getFile().getPath() ) ); //$NON-NLS-1$ if ( monitor != null ) { monitor.subTask( "Loading " + group.size() + " " + exporter.getFriendlyTypeName() + " from " + root.getFile().getPath() ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } catch ( KettleException ex ) { log.logError( BaseMessages.getString( PKG, "PurRepositoryExporter.ERROR_EXPORT", exporter .getFriendlyTypeName(), root.getFile().getPath() ), ex ); //$NON-NLS-1$
children = null; return new RepositoryFileTree( rootFile, children );
public void populateFoldersLazy( RepositoryDirectory repositoryDirectory ) { RepositoryRequest repositoryRequest = new RepositoryRequest( repositoryDirectory.getPath(), true, 1, null ); repositoryRequest.setTypes( RepositoryRequest.FILES_TYPE_FILTER.FOLDERS ); repositoryRequest.setIncludeSystemFolders( false ); RepositoryFileTree tree = getRepository().getUnderlyingRepository().getTree( repositoryRequest ); for ( RepositoryFileTree repositoryFileTree : tree.getChildren() ) { org.pentaho.platform.api.repository2.unified.RepositoryFile repositoryFile = repositoryFileTree.getFile(); RepositoryDirectory repositoryDirectory1 = RepositoryDirectory.build( repositoryDirectory.getPath(), repositoryFile, isAdmin() ); repositoryDirectory.addChild( repositoryDirectory1 ); } }
@Test public void testWhenChildrenIsDeleted() throws Exception { // mock RepositoryFile to return null RepositoryFile mockFile = mock( RepositoryFileProxy.class ); when( mockFile.isHidden() ).thenReturn( null ); // create tree with the mockFile RepositoryFileTree nullValueDir = new RepositoryFileTree( mockFile, Collections.<RepositoryFileTree>emptyList() ); RepositoryFile root = new RepositoryFile.Builder( "rootDir" ).build(); ArrayList<RepositoryFileTree> children = new ArrayList<RepositoryFileTree>( 1 ); children.add( nullValueDir ); RepositoryFileTree rootDir = new RepositoryFileTree( root, children ); // to DTO RepositoryFileTreeAdapter adapter = new RepositoryFileTreeAdapter(); RepositoryFileTreeDto dtoThere = adapter.marshal( rootDir ); // as isHidden() returns null, it's expected that null was returned, so root has no children assertTrue( dtoThere.getChildren().isEmpty() ); }
public void populateFilesLazy( RepositoryDirectory repositoryDirectory, String filter ) { RepositoryRequest repositoryRequest = new RepositoryRequest(); repositoryRequest.setPath( repositoryDirectory.getPath() ); repositoryRequest.setDepth( 1 ); repositoryRequest.setShowHidden( true ); repositoryRequest.setTypes( RepositoryRequest.FILES_TYPE_FILTER.FILES ); repositoryRequest.setChildNodeFilter( filter ); RepositoryFileTree tree = getRepository().getUnderlyingRepository().getTree( repositoryRequest ); for ( RepositoryFileTree repositoryFileTree : tree.getChildren() ) { org.pentaho.platform.api.repository2.unified.RepositoryFile repositoryFile = repositoryFileTree.getFile(); RepositoryFile repositoryFile1 = RepositoryFile.build( repositoryDirectory.getPath(), repositoryFile, isAdmin() ); repositoryDirectory.addChild( repositoryFile1 ); } }
@Override public RepositoryFileTree getTree( final String path, final int depth, final String filter, final boolean showHidden ) { FileRecord r = root.getFileRecord( path ); RepositoryFile rootFile = r.getFile(); if ( ( !showHidden && rootFile.isHidden() ) || rootFile.isAclNode() ) { return null; } List<RepositoryFileTree> children; if ( depth != 0 ) { children = new ArrayList<RepositoryFileTree>(); if ( rootFile.isFolder() ) { List<RepositoryFile> childrenTmp = getChildren( rootFile.getId(), filter ); for ( RepositoryFile child : childrenTmp ) { RepositoryFileTree repositoryFileTree = getTree( child.getPath(), depth - 1, filter, showHidden ); if ( repositoryFileTree != null ) { children.add( repositoryFileTree ); } } } Collections.sort( children ); } else { children = null; } return new RepositoryFileTree( rootFile, children ); }