/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.user.server.spi;
import org.eclipse.che.api.core.ServerException;
import java.util.Map;
/**
* Defines data access object contract for user preferences.
*
* @author Yevhenii Voevodin
*/
public interface PreferenceDao {
/**
* Sets user preferences, overrides existing preferences if any.
*
* @param userId
* user identifier
* @param preferences
* new preferences, if preferences are empty - removes user preferences
* @throws NullPointerException
* when preferences or userId is null
* @throws ServerException
* when any other error occurs
*/
void setPreferences(String userId, Map<String, String> preferences) throws ServerException;
/**
* Gets user preferences.
*
* <p>Note that this method must always return upgradable map, thus it may be used as:
* <pre>{@code
* Map<String, String> prefs = dao.getPreferences("user123");
* prefs.put("key", "secret");
* spi.setPreferences("user123", prefs);
* }</pre>
*
* @param userId
* user identifier
* @return user preferences, or empty map
* @throws NullPointerException
* when userId is null
* @throws ServerException
* when any error occurs
*/
Map<String, String> getPreferences(String userId) throws ServerException;
/**
* Gets user preferences filtered with given regexp.
*
* <p>Note that this method must always return upgradable map, thus it may be used as:
* <pre>{@code
* Map<String, String> prefs = spi.getPreferences("user123", ".*key.*");
* prefs.put("new-key", "secret");
* prefs.setPreferences("user123", prefs);
* }</pre>
*
* @param userId
* user identifier
* @param filter
* {@link java.util.regex.Pattern regexp} which is used to filter preferences by their keys
* @return user preferences with keys which match given {@code filter} or empty map if user doesn't have any preferences
* @throws NullPointerException
* {@code userId} or {@code filter} is null
* @throws ServerException
* when any other error occurs
*/
Map<String, String> getPreferences(String userId, String filter) throws ServerException;
/**
* Removes user preferences.
*
* <p>Note that this method doesn't throw any exception if user doesn't exist
* or user doesn't have any preferences
*
* @param userId
* user identifier
* @throws NullPointerException
* when {@code userId} is null
* @throws ServerException
* when any error occurs
*/
void remove(String userId) throws ServerException;
}