/*
* Copyright 2017 Graz University of Technology EAAF-Core Components has been developed in a
* cooperation between EGIZ, A-SIT Plus, A-SIT, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European
* Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work except in
* compliance with the Licence. You may obtain a copy of the Licence at:
* https://joinup.ec.europa.eu/news/understanding-eupl-v12
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence
* is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the Licence for the specific language governing permissions and limitations under
* the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text file for details on the
* various modules and licenses. The "NOTICE" text file is part of the distribution. Any derivative
* works that you distribute must include a readable copy of the "NOTICE" text file.
*/
package at.gv.egiz.eaaf.core.api.storage;
import java.util.Date;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
/**
* Interface to store arbitrary data.
*
* @author tlenz
*
*/
public interface ITransactionStorage {
/**
* Check if transaction storage contains a data object with a specific key.
*
* @param key Key, which identifies a data object
* @return true if key is found, otherwise false
*/
boolean containsKey(String key);
/**
* Store a data object with a key to transaction storage.
*
* @param key Id which identifiers the data object
* @param value Data object which should be stored. This data must implement
* the java.io.Serializable
interface
* @param timeoutMs Defines the period of time a data object is kept within the
* storage
* @throws EaafStorageException In case of store operation failed
*/
void put(String key, Object value, int timeoutMs) throws EaafException;
/**
* Get a data object from transaction storage.
*
* @param key key Id which identifiers the data object
* @return The transaction-data object, or null
* @throws EaafStorageException In case of load operation failed
*/
Object get(String key) throws EaafException;
/**
* Get a data object from transaction storage.
*
* @param key Id which identifiers the data object
* @param clazz The class type which is stored with this key
* @param Response class type
* @return The transaction-data object from type class, or null
* @throws EaafStorageException In case of load operation failed
*/
T get(String key, Class clazz) throws EaafException;
/**
* Get a data object from transaction storage.
*
* @param key Id which identifiers the data object
* @param clazz The class type which is stored with this key
* @param dataTimeOut Data-object timeout in [ms]
* @param Response class type
* @return The transaction-data object from type class, or null
* @throws EaafStorageException In case of load operation failed
*/
T get(String key, Class clazz, long dataTimeOut) throws EaafException;
/**
* Change the key of a data object and store it under the new key.
*
* @param oldKey Old key of the data object
* @param newKey New key, which should be used to store the data object
* @param value Data object which should be stored
* @throws EaafStorageException In case of store operation failed
*/
void changeKey(String oldKey, String newKey, Object value) throws EaafException;
/**
* Remove a data object from transaction storage.
*
* @param key Id which identifiers the data object
*/
void remove(String key);
/**
* Get all entries for Clean-up the transaction storage.
*
* @param now Current time
* @param dataTimeOut Data-object timeout in [ms]
* @return List of entry-keys which as a timeout
*/
List clean(Date now, long dataTimeOut);
/**
* Get a raw object from storage by using this key.
*
* @param key Storagekey
* @return Object stored with this key, or null
* @throws EaafException In case of a storage error
*/
@Nullable
Object getRaw(String key) throws EaafException;
/**
* Set a raw object to storage.
*
* @param key Storagekey
* @param element Object to store
* @throws EaafException In case of a storage error
*/
void putRaw(@Nonnull String key, @Nonnull Object element) throws EaafException;
}