org.apache.jackrabbit.core.data.Backend 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.data;
import java.io.File;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Set;
/**
* The interface defines the backend which can be plugged into
* {@link CachingDataStore}.
*/
public interface Backend {
/**
* This method initialize backend with the configuration.
*
* @param store
* {@link CachingDataStore}
* @param homeDir
* path of repository home dir.
* @param config
* path of config property file.
* @throws DataStoreException
*/
void init(CachingDataStore store, String homeDir, String config)
throws DataStoreException;
/**
* Return inputstream of record identified by identifier.
*
* @param identifier
* identifier of record.
* @return inputstream of the record.
* @throws DataStoreException
* if record not found or any error.
*/
InputStream read(DataIdentifier identifier) throws DataStoreException;
/**
* Return length of record identified by identifier.
*
* @param identifier
* identifier of record.
* @return length of the record.
* @throws DataStoreException
* if record not found or any error.
*/
long getLength(DataIdentifier identifier) throws DataStoreException;
/**
* Return lastModified of record identified by identifier.
*
* @param identifier
* identifier of record.
* @return lastModified of the record.
* @throws DataStoreException
* if record not found or any error.
*/
long getLastModified(DataIdentifier identifier) throws DataStoreException;
/**
* Stores file to backend with identifier used as key. If key pre-exists, it
* updates the timestamp of the key.
*
* @param identifier
* key of the file
* @param file
* file that would be stored in backend.
* @throws DataStoreException
* for any error.
*/
void write(DataIdentifier identifier, File file) throws DataStoreException;
/**
* Write file to backend in asynchronous mode.
*
* @param identifier
* @param file
* @param callback
* Callback interface to called after upload succeed or failed.
* @throws DataStoreException
*/
void writeAsync(DataIdentifier identifier, File file,
AsyncUploadCallback callback) throws DataStoreException;
/**
* Returns identifiers of all records that exists in backend.
*
* @return iterator consisting of all identifiers
* @throws DataStoreException
*/
Iterator getAllIdentifiers() throws DataStoreException;
/**
* This method check the existence of record in backend. Return true if
* records exists else false. This method also touch record identified by
* identifier if touch is true.
*
* @param identifier
* @throws DataStoreException
*/
boolean exists(DataIdentifier identifier, boolean touch)
throws DataStoreException;
/**
* This method check the existence of record in backend.
*
* @param identifier
* identifier to be checked.
* @return true if records exists else false.
* @throws DataStoreException
*/
boolean exists(DataIdentifier identifier) throws DataStoreException;
/**
* Update the lastModified of record if it's lastModified < minModifiedDate.
*
* @param identifier
* @param minModifiedDate
* @throws DataStoreException
*/
void touch(final DataIdentifier identifier, long minModifiedDate)
throws DataStoreException;
/**
* Update the lastModified of record if it's lastModified < minModifiedDate
* asynchronously. Result of update is passed using appropriate
* {@link AsyncTouchCallback} methods. If identifier's lastModified >
* minModified {@link AsyncTouchCallback#onAbort(AsyncTouchResult)} is
* called. Any exception is communicated through
* {@link AsyncTouchCallback#onFailure(AsyncTouchResult)} . On successful
* update of lastModified,
* {@link AsyncTouchCallback#onSuccess(AsyncTouchResult)}
* is invoked.
*
* @param identifier
* @param minModifiedDate
* @param callback
* @throws DataStoreException
*/
void touchAsync(final DataIdentifier identifier, long minModifiedDate,
final AsyncTouchCallback callback) throws DataStoreException;
/**
* Close backend and release resources like database connection if any.
*
* @throws DataStoreException
*/
void close() throws DataStoreException;
/**
* Delete all records which are older than timestamp.
*
* @param timestamp
* @return {@link Set} of identifiers which are deleted.
* @throws DataStoreException
*/
Set deleteAllOlderThan(long timestamp)
throws DataStoreException;
/**
* Delete record identified by identifier. No-op if identifier not found.
*
* @param identifier
* @throws DataStoreException
*/
void deleteRecord(DataIdentifier identifier) throws DataStoreException;
}