org.apache.jackrabbit.core.fs.BasedFileSystem Maven / Gradle / Ivy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.core.fs;
import java.io.InputStream;
import java.io.OutputStream;
/**
* A BasedFileSystem
represents a 'file system in a file system'.
*/
public class BasedFileSystem implements FileSystem {
protected final FileSystem fsBase;
protected final String basePath;
/**
* Creates a new BasedFileSystem
*
* @param fsBase the FileSystem
the new file system should be based on
* @param relRootPath the root path relative to fsBase
's root
*/
public BasedFileSystem(FileSystem fsBase, String relRootPath) {
if (fsBase == null) {
throw new IllegalArgumentException("invalid file system argument");
}
this.fsBase = fsBase;
if (relRootPath == null) {
throw new IllegalArgumentException("invalid null path argument");
}
if (relRootPath.equals(SEPARATOR)) {
throw new IllegalArgumentException("invalid path argument");
}
if (!relRootPath.startsWith(SEPARATOR)) {
relRootPath = SEPARATOR + relRootPath;
}
if (relRootPath.endsWith(SEPARATOR)) {
relRootPath = relRootPath.substring(0, relRootPath.length() - 1);
}
this.basePath = relRootPath;
}
protected String buildBasePath(String path) {
if (path.startsWith(SEPARATOR)) {
if (path.length() == 1) {
return basePath;
} else {
return basePath + path;
}
} else {
return basePath + SEPARATOR + path;
}
}
//-----------------------------------------------------------< FileSystem >
/**
* {@inheritDoc}
*/
public void init() throws FileSystemException {
// check base path
if (!fsBase.isFolder(basePath)) {
fsBase.createFolder(basePath);
}
}
/**
* {@inheritDoc}
*/
public void close() throws FileSystemException {
// do nothing; base file system should be closed explicitly
}
/**
* {@inheritDoc}
*/
public void createFolder(String folderPath) throws FileSystemException {
fsBase.createFolder(buildBasePath(folderPath));
}
/**
* {@inheritDoc}
*/
public void deleteFile(String filePath) throws FileSystemException {
fsBase.deleteFile(buildBasePath(filePath));
}
/**
* {@inheritDoc}
*/
public void deleteFolder(String folderPath) throws FileSystemException {
fsBase.deleteFolder(buildBasePath(folderPath));
}
/**
* {@inheritDoc}
*/
public boolean exists(String path) throws FileSystemException {
return fsBase.exists(buildBasePath(path));
}
/**
* {@inheritDoc}
*/
public InputStream getInputStream(String filePath) throws FileSystemException {
return fsBase.getInputStream(buildBasePath(filePath));
}
/**
* {@inheritDoc}
*/
public OutputStream getOutputStream(String filePath) throws FileSystemException {
return fsBase.getOutputStream(buildBasePath(filePath));
}
/**
* {@inheritDoc}
*/
public boolean hasChildren(String path) throws FileSystemException {
return fsBase.hasChildren(buildBasePath(path));
}
/**
* {@inheritDoc}
*/
public boolean isFile(String path) throws FileSystemException {
return fsBase.isFile(buildBasePath(path));
}
/**
* {@inheritDoc}
*/
public boolean isFolder(String path) throws FileSystemException {
return fsBase.isFolder(buildBasePath(path));
}
/**
* {@inheritDoc}
*/
public long lastModified(String path) throws FileSystemException {
return fsBase.lastModified(buildBasePath(path));
}
/**
* {@inheritDoc}
*/
public long length(String filePath) throws FileSystemException {
return fsBase.length(buildBasePath(filePath));
}
/**
* {@inheritDoc}
*/
public String[] list(String folderPath) throws FileSystemException {
return fsBase.list(buildBasePath(folderPath));
}
/**
* {@inheritDoc}
*/
public String[] listFiles(String folderPath) throws FileSystemException {
return fsBase.listFiles(buildBasePath(folderPath));
}
/**
* {@inheritDoc}
*/
public String[] listFolders(String folderPath) throws FileSystemException {
return fsBase.listFolders(buildBasePath(folderPath));
}
}