/* ********************************************************************** **
** Copyright notice **
** **
** (c) 2005-2009 RSSOwl Development Team **
** http://www.rssowl.org/ **
** **
** 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.rssowl.org/legal/epl-v10.html **
** **
** A copy is found in the file epl-v10.html and important notices to the **
** license from the team is found in the textfile LICENSE.txt distributed **
** in this package. **
** **
** This copyright notice MUST APPEAR in all copies of the file! **
** **
** Contributors: **
** RSSOwl Development Team - initial API and implementation **
** **
** ********************************************************************** */
package org.rssowl.core.internal.persist.pref;
import org.eclipse.core.runtime.Assert;
import org.rssowl.core.persist.IEntity;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.pref.IPreferenceScope;
import java.util.Arrays;
/**
* Implementation of <code>IPreferencesScope</code> that asks the given
* instance of <code>IEntity</code> for its Preferences.
*
* @author bpasero
*/
public class EntityScope implements IPreferenceScope {
private final IEntity fEntity;
private final IPreferenceScope fParent;
/**
* @param entity the {@link IEntity} to obtain preferences from
* @param parent the {@link IPreferenceScope} that is being consulted in case
* this scope is not providing a value.
*/
public EntityScope(IEntity entity, IPreferenceScope parent) {
Assert.isNotNull(entity, "entity cannot be null"); //$NON-NLS-1$
fEntity = entity;
fParent = parent;
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesScope#getParent()
*/
public IPreferenceScope getParent() {
return fParent;
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesScope#flush()
*/
public void flush() {
DynamicDAO.save(fEntity);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#delete(java.lang.String)
*/
public void delete(String key) {
fEntity.removeProperty(key);
}
/*
* @see org.rssowl.core.persist.pref.IPreferenceScope#hasKey(java.lang.String)
*/
public boolean hasKey(String key) {
return fEntity.getProperty(key) != null;
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getBoolean(java.lang.String)
*/
public boolean getBoolean(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (Boolean) prop;
/* Ask Parent */
return fParent.getBoolean(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getInteger(java.lang.String)
*/
public int getInteger(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (Integer) prop;
/* Ask Parent */
return fParent.getInteger(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getIntegers(java.lang.String)
*/
public int[] getIntegers(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (int[]) prop;
/* Ask Parent */
return fParent.getIntegers(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getLong(java.lang.String)
*/
public long getLong(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (Long) prop;
/* Ask Parent */
return fParent.getLong(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getLongs(java.lang.String)
*/
public long[] getLongs(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (long[]) prop;
/* Ask Parent */
return fParent.getLongs(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getString(java.lang.String)
*/
public String getString(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (String) prop;
/* Ask Parent */
return fParent.getString(key);
}
/*
* @see org.rssowl.core.model.preferences.IPreferencesNode#getStrings(java.lang.String)
*/
public String[] getStrings(String key) {
/* Ask Entity */
Object prop = fEntity.getProperty(key);
if (prop != null)
return (String[]) prop;
/* Ask Parent */
return fParent.getStrings(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putBoolean(java.lang.String,
* boolean)
*/
public void putBoolean(String key, boolean value) {
if (value != fParent.getBoolean(key))
fEntity.setProperty(key, value);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putInteger(java.lang.String,
* int)
*/
public void putInteger(String key, int value) {
if (value != fParent.getInteger(key))
fEntity.setProperty(key, value);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putIntegers(java.lang.String,
* int[])
*/
public void putIntegers(String key, int[] values) {
Assert.isNotNull(values);
if (!Arrays.equals(values, fParent.getIntegers(key)))
fEntity.setProperty(key, values);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putLong(java.lang.String,
* long)
*/
public void putLong(String key, long value) {
if (value != fParent.getLong(key))
fEntity.setProperty(key, value);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putLongs(java.lang.String,
* long[])
*/
public void putLongs(String key, long[] values) {
Assert.isNotNull(values);
if (!Arrays.equals(values, fParent.getLongs(key)))
fEntity.setProperty(key, values);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putString(java.lang.String,
* java.lang.String)
*/
public void putString(String key, String value) {
Assert.isNotNull(value);
if (!value.equals(fParent.getString(key)))
fEntity.setProperty(key, value);
else
delete(key);
}
/*
* @see org.rssowl.ui.internal.preferences.IPreferencesNode#putStrings(java.lang.String,
* java.lang.String[])
*/
public void putStrings(String key, String[] values) {
Assert.isNotNull(values);
if (!Arrays.equals(values, fParent.getStrings(key)))
fEntity.setProperty(key, values);
else
delete(key);
}
}