All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.archinnov.achilles.context.ThriftConsistencyContext Maven / Gradle / Ivy

package info.archinnov.achilles.context;

import info.archinnov.achilles.consistency.AchillesConsistencyLevelPolicy;
import info.archinnov.achilles.context.execution.SafeExecutionContext;
import info.archinnov.achilles.type.ConsistencyLevel;

import com.google.common.base.Optional;

/**
 * ThriftConsistencyContext
 * 
 * @author DuyHai DOAN
 * 
 */
public class ThriftConsistencyContext implements ConsistencyContext
{
	private final AchillesConsistencyLevelPolicy policy;

	private Optional readLevelO;
	private Optional writeLevelO;

	public ThriftConsistencyContext(AchillesConsistencyLevelPolicy policy,
			Optional readLevelO, Optional writeLevelO)
	{
		this.policy = policy;
		this.readLevelO = readLevelO;
		this.writeLevelO = writeLevelO;
	}

	public  T executeWithReadConsistencyLevel(SafeExecutionContext context)
	{
		if (readLevelO.isPresent())
		{
			policy.setCurrentReadLevel(readLevelO.get());
			return reinitConsistencyLevels(context);
		}
		else
		{
			return context.execute();
		}
	}

	public  T executeWithReadConsistencyLevel(SafeExecutionContext context,
			ConsistencyLevel readLevel)
	{
		Optional levelO = readLevelO.isPresent() ? readLevelO : Optional
				.fromNullable(readLevel);

		if (levelO.isPresent())
		{
			policy.setCurrentReadLevel(levelO.get());
			return reinitConsistencyLevels(context);
		}
		else
		{
			return context.execute();
		}
	}

	public  T executeWithWriteConsistencyLevel(SafeExecutionContext context)
	{
		if (writeLevelO.isPresent())
		{
			policy.setCurrentWriteLevel(writeLevelO.get());
			return reinitConsistencyLevels(context);
		}
		else
		{
			return context.execute();
		}
	}

	public  T executeWithWriteConsistencyLevel(SafeExecutionContext context,
			ConsistencyLevel writeLevel)
	{
		Optional levelO = writeLevelO.isPresent() ? writeLevelO : Optional
				.fromNullable(writeLevel);

		if (levelO.isPresent())
		{
			policy.setCurrentWriteLevel(levelO.get());
			return reinitConsistencyLevels(context);
		}
		else
		{
			return context.execute();
		}
	}

	@Override
	public void setReadConsistencyLevel(Optional readLevelO)
	{
		if (readLevelO.isPresent())
		{
			this.readLevelO = readLevelO;
			policy.setCurrentReadLevel(readLevelO.get());
		}
	}

	public void setReadConsistencyLevel()
	{
		if (readLevelO.isPresent())
		{
			policy.setCurrentReadLevel(readLevelO.get());
		}
	}

	@Override
	public void setWriteConsistencyLevel(Optional writeLevelO)
	{
		if (writeLevelO.isPresent())
		{
			this.writeLevelO = writeLevelO;
			policy.setCurrentWriteLevel(writeLevelO.get());
		}
	}

	public void setWriteConsistencyLevel()
	{
		if (writeLevelO.isPresent())
		{
			policy.setCurrentWriteLevel(writeLevelO.get());
		}
	}

	@Override
	public void reinitConsistencyLevels()
	{
		policy.reinitCurrentConsistencyLevels();
		policy.reinitDefaultConsistencyLevels();
	}

	public Optional getReadLevelO()
	{
		return readLevelO;
	}

	public Optional getWriteLevelO()
	{
		return writeLevelO;
	}

	private  T reinitConsistencyLevels(SafeExecutionContext context)
	{
		try
		{
			return context.execute();
		}
		finally
		{
			policy.reinitCurrentConsistencyLevels();
			policy.reinitDefaultConsistencyLevels();
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy