/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.uberfire.preferences.shared;
import java.util.Collection;
import java.util.List;
import org.jboss.errai.bus.server.annotations.Remote;
import org.uberfire.preferences.shared.impl.PreferenceScopeResolutionStrategyInfo;
import org.uberfire.preferences.shared.impl.PreferenceScopedValue;
/**
* Storage API for preferences.
*/
@Remote
public interface PreferenceStorage {
/**
* Checks if a given preference key is defined in a certain scope.
* @param preferenceScope Scope in which the key will be checked.
* @param key Key to be checked (must not be null).
* @return true if the key is defined in that scope, and false otherwise.
*/
boolean exists(PreferenceScope preferenceScope,
String key);
/**
* Checks if a given preference key is defined in any scope of the provided hierarchy.
* @param scopeResolutionStrategyInfo Hierarchy of scopes in which the key will be checked.
* @param key Key to be checked (must not be null).
* @return true if the key is defined in any scope, and false otherwise.
*/
boolean exists(PreferenceScopeResolutionStrategyInfo scopeResolutionStrategyInfo,
String key);
/**
* Tries to read a preference value from a specific scope.
* @param preferenceScope Scope in which the key will be searched.
* @param key Preference key to be read (must not be null).
* @param <T> Type of the preference value.
* @return The preference value (null if it is not defined).
*/
<T> T read(PreferenceScope preferenceScope,
String key);
/**
* Tries to read a preference value from a scope hierarchy.
* @param scopeResolutionStrategyInfo Scope hierarchy in which the key will be searched.
* @param key Preference key to be read (must not be null).
* @param <T> Type of the preference value.
* @return The preference value (null if it is not defined in any scope in the hierarchy).
*/
<T> T read(PreferenceScopeResolutionStrategyInfo scopeResolutionStrategyInfo,
String key);
/**
* Tries to read a preference value from a scope hierarchy.
* @param scopeResolutionStrategyInfo Scope hierarchy in which the key will be searched.
* @param key Preference key to be read (must not be null).
* @param <T> Type of the preference value.
* @return The preference value and its scope (null if it is not defined in any scope in the hierarchy).
*/
<T> PreferenceScopedValue<T> readWithScope(PreferenceScopeResolutionStrategyInfo scopeResolutionStrategyInfo,
String key);
/**
* (Over) Writes a preference value related to a preference key, for a specific scope.
* @param scope Scope in which the preference will be written.
* @param key The key of the preference, must not be null.
* @param value The value of the preference, could be null.
*/
void write(PreferenceScope scope,
String key,
Object value);
/**
* Deletes a preference, in a specific scope, if it exists.
* @param scope Scope in which the preference is stored.
* @param key The key of the preference to be deleted, must not be null.
*/
void delete(PreferenceScope scope,
String key);
/**
* Returns all preference keys defined in a specific scope.
* @param scope Scope in which the preference keys will be searched.
* @return All preference keys defined in the passed scope.
*/
Collection<String> allKeys(PreferenceScope scope);
/**
* Returns all preference keys defined in all passed scopes.
* @param scopes Scopes in which the preference keys will be searched.
* @return All preference keys defined in all passed scopes.
*/
Collection<String> allKeys(List<PreferenceScope> scopes);
}