/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*
* Copyright 2006 - 2013 Pentaho Corporation. All rights reserved.
*/
package org.pentaho.platform.repository2.unified.fs;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import org.pentaho.platform.api.locale.IPentahoLocale;
import org.pentaho.platform.api.repository2.unified.IRepositoryFileData;
import org.pentaho.platform.api.repository2.unified.IUnifiedRepository;
import org.pentaho.platform.api.repository2.unified.RepositoryFile;
import org.pentaho.platform.api.repository2.unified.RepositoryFileAce;
import org.pentaho.platform.api.repository2.unified.RepositoryFileAcl;
import org.pentaho.platform.api.repository2.unified.RepositoryFilePermission;
import org.pentaho.platform.api.repository2.unified.RepositoryFileTree;
import org.pentaho.platform.api.repository2.unified.RepositoryRequest;
import org.pentaho.platform.api.repository2.unified.VersionSummary;
import org.springframework.util.Assert;
public class FileSystemBackedUnifiedRepository implements IUnifiedRepository {
private FileSystemRepositoryFileDao repositoryFileDao;
public FileSystemBackedUnifiedRepository( final String baseDir ) {
this( new FileSystemRepositoryFileDao( baseDir ) );
}
public FileSystemBackedUnifiedRepository( final File baseDir ) {
this( new FileSystemRepositoryFileDao( baseDir ) );
}
public FileSystemBackedUnifiedRepository() {
this( new FileSystemRepositoryFileDao() );
}
public FileSystemBackedUnifiedRepository( final FileSystemRepositoryFileDao repositoryFileDao ) {
this.repositoryFileDao = repositoryFileDao;
}
public boolean canUnlockFile( Serializable fileId ) {
return repositoryFileDao.canUnlockFile( fileId );
}
public RepositoryFile createFile( Serializable parentFolderId, RepositoryFile file, IRepositoryFileData data,
String versionMessage ) {
return repositoryFileDao.createFile( parentFolderId, file, data, null, versionMessage );
}
public RepositoryFile createFile( Serializable parentFolderId, RepositoryFile file, IRepositoryFileData data,
RepositoryFileAcl acl, String versionMessage ) {
return repositoryFileDao.createFile( parentFolderId, file, data, acl, versionMessage );
}
public RepositoryFile createFolder( Serializable parentFolderId, RepositoryFile file, String versionMessage ) {
return repositoryFileDao.createFolder( parentFolderId, file, null, versionMessage );
}
public RepositoryFile createFolder( Serializable parentFolderId, RepositoryFile file, RepositoryFileAcl acl,
String versionMessage ) {
return repositoryFileDao.createFolder( parentFolderId, file, acl, versionMessage );
}
public void deleteFile( Serializable fileId, boolean permanent, String versionMessage ) {
repositoryFileDao.deleteFile( fileId, versionMessage );
}
public void deleteFile( Serializable fileId, String versionMessage ) {
repositoryFileDao.deleteFile( fileId, versionMessage );
}
public void deleteFileAtVersion( Serializable fileId, Serializable versionId ) {
repositoryFileDao.deleteFileAtVersion( fileId, versionId );
}
public RepositoryFileAcl getAcl( Serializable fileId ) {
throw new UnsupportedOperationException();
}
@Override
public List<RepositoryFile> getChildren( RepositoryRequest repositoryRequest ) {
return repositoryFileDao.getChildren( repositoryRequest );
}
@Deprecated
public List<RepositoryFile> getChildren( Serializable folderId ) {
return repositoryFileDao.getChildren( folderId, "", false );
}
@Deprecated
public List<RepositoryFile> getChildren( Serializable folderId, String filter) {
return repositoryFileDao.getChildren( folderId, filter, false);
}
@Deprecated
public List<RepositoryFile> getChildren( Serializable folderId, String filter, Boolean showHiddenFiles ) {
return repositoryFileDao.getChildren( new RepositoryRequest( folderId.toString(), showHiddenFiles, -1, filter ) );
}
public <T extends IRepositoryFileData> T getDataAtVersionForExecute( Serializable fileId, Serializable versionId,
Class<T> dataClass ) {
return repositoryFileDao.getData( fileId, versionId, dataClass );
}
public <T extends IRepositoryFileData> T getDataAtVersionForRead( Serializable fileId, Serializable versionId,
Class<T> dataClass ) {
return repositoryFileDao.getData( fileId, versionId, dataClass );
}
public <T extends IRepositoryFileData> T getDataForExecute( Serializable fileId, Class<T> dataClass ) {
return repositoryFileDao.getData( fileId, null, dataClass );
}
public <T extends IRepositoryFileData> T getDataForRead( Serializable fileId, Class<T> dataClass ) {
return repositoryFileDao.getData( fileId, null, dataClass );
}
public List<RepositoryFile> getDeletedFiles( Serializable folderId ) {
return repositoryFileDao.getDeletedFiles( folderId, null );
}
public List<RepositoryFile> getDeletedFiles( Serializable folderId, String filter ) {
return repositoryFileDao.getDeletedFiles( folderId, filter );
}
public List<RepositoryFile> getDeletedFiles() {
return repositoryFileDao.getDeletedFiles();
}
public List<RepositoryFileAce> getEffectiveAces( Serializable fileId ) {
// TODO Auto-generated method stub
return null;
}
public List<RepositoryFileAce> getEffectiveAces( Serializable fileId, boolean forceEntriesInheriting ) {
// TODO Auto-generated method stub
return null;
}
public RepositoryFile getFile( String path ) {
RepositoryFile result = repositoryFileDao.getFile( path );
if ( result == null && path.matches( "^/[A-z]:/.*" ) ) {
// Handle leading slash on windows style path with drive letter (eg. /c:/folder1/file1)
result = repositoryFileDao.getFile( path.substring( 1 ) );
}
return result;
}
public RepositoryFile getFile( String path, boolean loadLocaleMaps ) {
return repositoryFileDao.getFile( path, loadLocaleMaps );
}
public RepositoryFile getFileAtVersion( Serializable fileId, Serializable versionId ) {
return repositoryFileDao.getFile( fileId, versionId );
}
public RepositoryFile getFileById( Serializable fileId ) {
return repositoryFileDao.getFile( fileId, null );
}
public RepositoryFile getFileById( Serializable fileId, boolean loadLocaleMaps ) {
return repositoryFileDao.getFileById( fileId, loadLocaleMaps );
}
@Override
public RepositoryFile getFile( String path, IPentahoLocale locale ) {
return this.repositoryFileDao.getFile( path, locale );
}
@Override
public RepositoryFile getFileById( Serializable fileId, IPentahoLocale locale ) {
return this.repositoryFileDao.getFileById( fileId, locale );
}
@Override
public RepositoryFile getFile( String path, boolean loadLocaleMaps, IPentahoLocale locale ) {
return this.repositoryFileDao.getFile( path, loadLocaleMaps, locale );
}
@Override
public RepositoryFile getFileById( Serializable fileId, boolean loadLocaleMaps, IPentahoLocale locale ) {
return this.repositoryFileDao.getFileById( fileId, loadLocaleMaps, locale );
}
@Override
public RepositoryFileTree getTree( RepositoryRequest repositoryRequest ) {
return repositoryFileDao.getTree( repositoryRequest);
}
public RepositoryFileTree getTree( String path, int depth, String filter, boolean showHidden ) {
return repositoryFileDao.getTree( new RepositoryRequest( path, showHidden, depth, filter ) );
}
public List<VersionSummary> getVersionSummaries( Serializable fileId ) {
return repositoryFileDao.getVersionSummaries( fileId );
}
public VersionSummary getVersionSummary( Serializable fileId, Serializable versionId ) {
return repositoryFileDao.getVersionSummary( fileId, versionId );
}
public void setRootDir( File rootDir ) {
repositoryFileDao.setRootDir( rootDir );
}
public boolean hasAccess( String path, EnumSet<RepositoryFilePermission> permissions ) {
throw new UnsupportedOperationException();
}
public void lockFile( Serializable fileId, String message ) {
repositoryFileDao.lockFile( fileId, message );
}
public void moveFile( Serializable fileId, String destAbsPath, String versionMessage ) {
repositoryFileDao.moveFile( fileId, destAbsPath, versionMessage );
}
public void restoreFileAtVersion( Serializable fileId, Serializable versionId, String versionMessage ) {
repositoryFileDao.restoreFileAtVersion( fileId, versionId, versionMessage );
}
public void undeleteFile( Serializable fileId, String versionMessage ) {
repositoryFileDao.undeleteFile( fileId, versionMessage );
}
public void unlockFile( Serializable fileId ) {
repositoryFileDao.unlockFile( fileId );
}
public RepositoryFileAcl updateAcl( RepositoryFileAcl acl ) {
throw new UnsupportedOperationException();
}
public RepositoryFile updateFile( RepositoryFile file, IRepositoryFileData data, String versionMessage ) {
return repositoryFileDao.updateFile( file, data, versionMessage );
}
public List<RepositoryFile> getReferrers( Serializable arg0 ) {
throw new UnsupportedOperationException();
}
public <T extends IRepositoryFileData> List<T> getDataForExecuteInBatch( List<RepositoryFile> files,
Class<T> dataClass ) {
throw new UnsupportedOperationException();
}
public <T extends IRepositoryFileData> List<T> getDataForReadInBatch( List<RepositoryFile> files,
Class<T> dataClass ) {
Assert.notNull( files );
List<T> data = new ArrayList<T>( files.size() );
for ( RepositoryFile f : files ) {
Assert.notNull( f );
data.add( repositoryFileDao.getData( f.getId(), f.getVersionId(), dataClass ) );
}
return data;
}
public List<VersionSummary> getVersionSummaryInBatch( List<RepositoryFile> files ) {
Assert.notNull( files );
List<VersionSummary> versionSummaryList = new ArrayList<VersionSummary>( files.size() );
for(RepositoryFile file : files){
versionSummaryList.add( getVersionSummary( file.getId(), file.getVersionId() ) );
}
return versionSummaryList;
}
public void setFileMetadata( final Serializable fileId, Map<String, Serializable> metadataMap ) {
repositoryFileDao.setFileMetadata( fileId, metadataMap );
}
public Map<String, Serializable> getFileMetadata( final Serializable fileId ) {
return repositoryFileDao.getFileMetadata( fileId );
}
public void copyFile( Serializable fileId, String destAbsPath, String versionMessage ) {
throw new UnsupportedOperationException();
}
public List<RepositoryFile> getDeletedFiles( String origParentFolderPath, String filter ) {
throw new UnsupportedOperationException();
}
public List<RepositoryFile> getDeletedFiles( String origParentFolderPath ) {
throw new UnsupportedOperationException();
}
@Override
public List<Character> getReservedChars() {
return repositoryFileDao.getReservedChars();
}
@Override
public List<Locale> getAvailableLocalesForFileById( Serializable fileId ) {
throw new UnsupportedOperationException();
}
@Override
public List<Locale> getAvailableLocalesForFileByPath( String relPath ) {
throw new UnsupportedOperationException();
}
@Override
public List<Locale> getAvailableLocalesForFile( RepositoryFile repositoryFile ) {
throw new UnsupportedOperationException();
}
@Override
public Properties getLocalePropertiesForFileById( Serializable fileId, String locale ) {
throw new UnsupportedOperationException();
}
@Override
public Properties getLocalePropertiesForFileByPath( String relPath, String locale ) {
throw new UnsupportedOperationException();
}
@Override
public Properties getLocalePropertiesForFile( RepositoryFile repositoryFile, String locale ) {
throw new UnsupportedOperationException();
}
@Override
public void setLocalePropertiesForFileById( Serializable fileId, String locale, Properties properties ) {
throw new UnsupportedOperationException();
}
@Override
public void setLocalePropertiesForFileByPath( String relPath, String locale, Properties properties ) {
throw new UnsupportedOperationException();
}
@Override
public void setLocalePropertiesForFile( RepositoryFile repositoryFile, String locale, Properties properties ) {
throw new UnsupportedOperationException();
}
@Override
public void deleteLocalePropertiesForFile( RepositoryFile repositoryFile, String locale ) {
throw new UnsupportedOperationException();
}
@Override
public RepositoryFile updateFolder( RepositoryFile folder, String versionMessage ) {
throw new UnsupportedOperationException();
}
}