/*
* Copyright (C) 2012, Katy Hilgenberg.
* Special acknowledgments to: Knowledge & Data Engineering Group, University of Kassel (http://www.kde.cs.uni-kassel.de).
* Contact: sdcf@cs.uni-kassel.de
*
* This file is part of the SDCFramework (Sensor Data Collection Framework) project.
*
* The SDCFramework is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The SDCFramework is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the SDCFramework. If not, see <http://www.gnu.org/licenses/>.
*/
package de.unikassel.android.sdcframework.preferences;
import android.annotation.SuppressLint;
import de.unikassel.android.sdcframework.data.DatabaseConfigurationEntry;
import de.unikassel.android.sdcframework.data.SDCConfiguration;
import de.unikassel.android.sdcframework.data.TransmissionConfigurationEntry;
import de.unikassel.android.sdcframework.data.TransmissionProtocolConfigurationEntry;
import de.unikassel.android.sdcframework.persistence.DeleteSamplesStrategy;
import de.unikassel.android.sdcframework.persistence.WaitStrategy;
import de.unikassel.android.sdcframework.persistence.facade.DBFullStrategyDescription;
import de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration;
import de.unikassel.android.sdcframework.preferences.facade.TransmissionConfiguration;
import de.unikassel.android.sdcframework.preferences.facade.TransmissionProtocolConfiguration;
import de.unikassel.android.sdcframework.util.ObjectUtils;
/**
* Implementation of the service configuration.
*
* @author Katy Hilgenberg
*
*/
public class ServiceConfigurationImpl
implements ServiceConfiguration
{
/**
* The flag for the service sample broadcast behavior
*/
private boolean isBroadcastingSamples;
/**
* The flag for attachment of a location fix to each sample
*/
private boolean isAddingSampleLocation;
/**
* The flag for persistent storage of samples for transmission purpose
*/
private boolean isStoringSamples;
/**
* The transmission behavior flag
*/
private boolean isTransmittingSamples;
/**
* The maximum database size in bytes
*/
private long maxDBSize;
/**
* Flag if the database full strategy does work priority based. <br/>
* If this flag is true and the {link {@link DeleteSamplesStrategy database
* full strategy} is executed, it will first delete the oldest samples with
* lowest priority.
*/
private boolean dbFullDeletionIsPriorityBased;
/**
* The record count which is deleted every time the {link
* {@link DeleteSamplesStrategy database full strategy} is executed.
*/
private int dbFullDeletionRecordCount;
/**
* The milliseconds the persistent storage manager is paused every time the
* {link {@link WaitStrategy database full strategy} is executed.
*/
private long dbFullWaitTime;
/**
* The configured @link {@link DBFullStrategyDescription database full
* strategy }.
*/
private DBFullStrategyDescription dbFullStrategy;
/**
* The transmission configuration
*/
private final TransmissionConfiguration transmissionConfiguration;
/**
* The log transfer configuration
*/
private final TransmissionProtocolConfiguration logTransferConfiguration;
/**
* Constructor
*/
public ServiceConfigurationImpl()
{
transmissionConfiguration = new TransmissionConfigurationImpl();
logTransferConfiguration = new TransmissionProtocolConfigurationImpl();
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.UpdatableConfiguration
* #update(java.lang.Object)
*/
@Override
public void update( ServiceConfiguration configuration )
{
setBroadcastingSamples( configuration.isBroadcastingSamples() );
setIsAddingSampleLocation( configuration.isAddingSampleLocation() );
setStoringSamples( configuration.isStoringSamples() );
setTransmittingSamples( configuration.isTransmittingSamples() );
setMaximumDatabaseSize( configuration.getMaximumDatabaseSize() );
setDBFullDeletionPriorityBased( configuration.isDBFullDeletionPriorityBased() );
setDBFullDeletionRecordCount( configuration.getDBFullDeletionRecordCount() );
setDBFullWaitTime( configuration.getDBFullWaitTime() );
setDBFullStrategy( configuration.getDBFullStrategy() );
getTransmissionConfiguration().update(
configuration.getTransmissionConfiguration() );
setLogTransferConfiguration( configuration.getLogTransferConfiguration() );
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #update(de.unikassel.android.sdcframework.data.SDCConfiguration)
*/
@SuppressLint( "DefaultLocale" ) // intended ignore of locals
@Override
public void update( SDCConfiguration config )
{
setBroadcastingSamples( config.isBroadcastingSamples() );
setIsAddingSampleLocation( config.isAddingSampleLocation() );
setStoringSamples( config.isStoringSamples() );
setTransmittingSamples( config.isTransmittingSamples() );
DatabaseConfigurationEntry databaseConfiguration =
config.getDatabaseConfiguration();
if ( databaseConfiguration != null )
{
setMaximumDatabaseSize( databaseConfiguration.getMaxDBSize() );
setDBFullDeletionPriorityBased( databaseConfiguration.isDBFullDeletionPriorityBased() );
setDBFullDeletionRecordCount( databaseConfiguration.getDBFullDeletionRecordCount() );
setDBFullWaitTime( databaseConfiguration.getDBFullWaitTime() );
String sDBFullStrategy = databaseConfiguration.getDBFullStrategy();
if ( sDBFullStrategy != null )
{
setDBFullStrategy( DBFullStrategyDescription.valueOf( sDBFullStrategy.toUpperCase() ) );
}
}
TransmissionConfigurationEntry transmissionConfig =
config.getTransmissionConfiguration();
if ( transmissionConfig != null )
{
transmissionConfiguration.update( transmissionConfig );
}
TransmissionProtocolConfigurationEntry logTransferConfig = config.getLogTransferConfiguration();
if ( logTransferConfig != null )
{
this.logTransferConfiguration.update( logTransferConfig );
}
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals( Object o )
{
if ( o instanceof ServiceConfiguration )
{
ServiceConfiguration conf = (ServiceConfiguration) o;
return conf.getMaximumDatabaseSize() == getMaximumDatabaseSize()
&&
conf.isBroadcastingSamples() == isBroadcastingSamples()
&&
conf.isAddingSampleLocation() == isAddingSampleLocation()
&&
conf.isStoringSamples() == isStoringSamples()
&&
conf.isTransmittingSamples() == isTransmittingSamples()
&&
conf.isDBFullDeletionPriorityBased() == isDBFullDeletionPriorityBased()
&&
conf.getDBFullDeletionRecordCount() == getDBFullDeletionRecordCount()
&&
conf.getDBFullWaitTime() == conf.getDBFullWaitTime()
&&
conf.getDBFullStrategy() == getDBFullStrategy()
&&
getTransmissionConfiguration().equals(
conf.getTransmissionConfiguration() )
&&
ObjectUtils.equals( getLogTransferConfiguration(), conf.getLogTransferConfiguration() );
}
return false;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #isBroadcastingSamples()
*/
@Override
public boolean isBroadcastingSamples()
{
return isBroadcastingSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setBroadcastingSamples(boolean)
*/
@Override
public void setBroadcastingSamples( Boolean isBroadcastingSamples )
{
if ( isBroadcastingSamples != null )
this.isBroadcastingSamples = isBroadcastingSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #isStoringSamples()
*/
@Override
public final boolean isStoringSamples()
{
return isStoringSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setStoringSamples(boolean)
*/
@Override
public final void setStoringSamples( Boolean isStoringSamples )
{
if ( isStoringSamples != null )
this.isStoringSamples = isStoringSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #isTransmittingSamples()
*/
@Override
public boolean isTransmittingSamples()
{
return isTransmittingSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setTransmittingSamples(boolean)
*/
@Override
public void setTransmittingSamples( Boolean isTransmittingSamples )
{
if ( isTransmittingSamples != null )
this.isTransmittingSamples = isTransmittingSamples;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setMaximumDatabaseSize(long)
*/
@Override
public void setMaximumDatabaseSize( Long maxDBSize )
{
if ( maxDBSize != null )
this.maxDBSize = maxDBSize;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getMaximumDatabaseSize()
*/
@Override
public long getMaximumDatabaseSize()
{
return maxDBSize;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setDBFullWaitTime(long)
*/
@Override
public void setDBFullWaitTime( Long dbFullWaitTime )
{
if ( dbFullWaitTime != null )
this.dbFullWaitTime = dbFullWaitTime;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getDBFullWaitTime()
*/
@Override
public long getDBFullWaitTime()
{
return dbFullWaitTime;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setDBFullDeletionRecordCount(int)
*/
@Override
public void setDBFullDeletionRecordCount( Integer dbFullDeletionRecordCount )
{
if ( dbFullDeletionRecordCount != null )
this.dbFullDeletionRecordCount = dbFullDeletionRecordCount;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getDBFullDeletionRecordCount()
*/
@Override
public int getDBFullDeletionRecordCount()
{
return dbFullDeletionRecordCount;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setDBFullDeletionPriorityBased(boolean)
*/
@Override
public void setDBFullDeletionPriorityBased(
Boolean dbFullDeletionIsPriorityBased )
{
if ( dbFullDeletionIsPriorityBased != null )
this.dbFullDeletionIsPriorityBased = dbFullDeletionIsPriorityBased;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #isDBFullDeletionPriorityBased()
*/
@Override
public boolean isDBFullDeletionPriorityBased()
{
return dbFullDeletionIsPriorityBased;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setDBFullStrategy(de.unikassel.android.sdcframework.persistence.facade.
* DatabaseFullStrategyBuilder.DBFullStrategies)
*/
@Override
public void setDBFullStrategy( DBFullStrategyDescription dbFullStrategy )
{
if ( dbFullStrategy != null )
this.dbFullStrategy = dbFullStrategy;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getDBFullStrategy()
*/
@Override
public DBFullStrategyDescription getDBFullStrategy()
{
return dbFullStrategy;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setTransmissionConfiguration
* (de.unikassel.android.sdcframework.preferences.
* facade.TransmissionConfiguration)
*/
@Override
public void setTransmissionConfiguration( TransmissionConfiguration config )
{
transmissionConfiguration.update( config );
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getTransmissionConfiguration()
*/
@Override
public TransmissionConfiguration getTransmissionConfiguration()
{
return transmissionConfiguration;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setLogTransferConfiguration
* (de.unikassel.android.sdcframework.preferences.facade
* .TransmissionProtocolConfiguration)
*/
@Override
public void setLogTransferConfiguration(
TransmissionProtocolConfiguration config )
{
this.logTransferConfiguration.update( config );
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #getLogTransferConfiguration()
*/
@Override
public TransmissionProtocolConfiguration getLogTransferConfiguration()
{
return logTransferConfiguration;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #isAddingSampleLocation()
*/
@Override
public boolean isAddingSampleLocation()
{
return isAddingSampleLocation;
}
/*
* (non-Javadoc)
*
* @see
* de.unikassel.android.sdcframework.preferences.facade.ServiceConfiguration
* #setIsAddingSampleLocation(java.lang.Boolean)
*/
@Override
public void setIsAddingSampleLocation( Boolean isAddingSampleLocation )
{
if ( isAddingSampleLocation != null )
this.isAddingSampleLocation = isAddingSampleLocation;
}
}