// Path: cumulusrdf-framework/src/main/java/edu/kit/aifb/cumulus/framework/datasource/CounterDAO.java
// public interface CounterDAO<K> extends MapDAO<K, Long> {
// 
// 	/**
// 	 * Decrements a counter.
// 	 * 
// 	 * @param key the key of the counter.
// 	 * @param delta the decrement.
// 	 */
// 	void decrement(K key, Long delta);
// 
// 	/**
// 	 * Increments a counter.
// 	 * 
// 	 * @param key the key of the counter.
// 	 * @param delta the increment.
// 	 */
// 	void increment(K key, Long delta);
// }
// 
// Path: cumulusrdf-framework/src/main/java/edu/kit/aifb/cumulus/log/Log.java
// public class Log {
// 	
// 	private final Logger _logger;
// 
// 	/**
// 	 * Builds a new Log wrapper with a given logger.
// 	 * 
// 	 * @param logger the {@link Logger} implementation.
// 	 */
// 	public Log(final Logger logger) {
// 		_logger = logger;
// 	}
// 
// 	/**
// 	 * Logs out the given message with INFO level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void info(final String message) {
// 		_logger.info(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with INFO level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void info(final String message, final Object ... values) {
// 		_logger.info(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with DEBUG level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void debug(final String message) {
// 		_logger.debug(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with DEBUG level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void debug(final String message, final Object ... values) {
// 		if (_logger.isDebugEnabled()) {
// 			_logger.debug(String.format(message, values));
// 		}
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void error(final String message, final Object ... values) {
// 		_logger.error(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param cause the underlying cause.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void error(final String message, final Throwable cause, final Object ... values) {
// 		_logger.error(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param cause the underlying cause.
// 	 */
// 	public void error(final String message, final Throwable cause) {
// 		_logger.error(message, cause);
// 	}
// 
// 	/**
// 	 * Logs out the given message with WARNING level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void warning(final String message) {
// 		_logger.warn(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with WARNING level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void warning(final String message, final Object ... values) {
// 		_logger.warn(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Returns true if the DEBUG level has been enabled for this logger.
// 	 * 
// 	 * @return true if the DEBUG level has been enabled for this logger.
// 	 */
// 	public boolean isDebugEnabled() {
// 		return _logger.isDebugEnabled();
// 	}
// }


import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.slf4j.LoggerFactory;
import edu.kit.aifb.cumulus.framework.Initialisable;
import edu.kit.aifb.cumulus.framework.InitialisationException;
import edu.kit.aifb.cumulus.framework.datasource.CounterDAO;
import edu.kit.aifb.cumulus.framework.datasource.DataAccessLayerException;
import edu.kit.aifb.cumulus.framework.datasource.DataAccessLayerFactory;
import edu.kit.aifb.cumulus.log.Log;
import edu.kit.aifb.cumulus.log.MessageCatalog;
			sync();
			return _data;
		}

		/**
		 * Sets the counter to the given value.
		 * 
		 * @param val the target counter value. 
		 * @throws DataAccessLayerException if the counter cannot be set.
		 */
		public synchronized void set(final long val) throws DataAccessLayerException {
			_dao.set(_id, val);
			sync();
		}

		/**
		 * Reads the current counter value from the DAO.
		 * 
		 * @throws DataAccessLayerException if the counter value can not be read.
		 */
		private void sync() throws DataAccessLayerException {
			_data = _dao.get(_id);
		}

		@Override
		public String toString() {
			return "counter: " + _id;
		}
	}

// Path: cumulusrdf-framework/src/main/java/edu/kit/aifb/cumulus/framework/datasource/CounterDAO.java
// public interface CounterDAO<K> extends MapDAO<K, Long> {
// 
// 	/**
// 	 * Decrements a counter.
// 	 * 
// 	 * @param key the key of the counter.
// 	 * @param delta the decrement.
// 	 */
// 	void decrement(K key, Long delta);
// 
// 	/**
// 	 * Increments a counter.
// 	 * 
// 	 * @param key the key of the counter.
// 	 * @param delta the increment.
// 	 */
// 	void increment(K key, Long delta);
// }
// 
// Path: cumulusrdf-framework/src/main/java/edu/kit/aifb/cumulus/log/Log.java
// public class Log {
// 	
// 	private final Logger _logger;
// 
// 	/**
// 	 * Builds a new Log wrapper with a given logger.
// 	 * 
// 	 * @param logger the {@link Logger} implementation.
// 	 */
// 	public Log(final Logger logger) {
// 		_logger = logger;
// 	}
// 
// 	/**
// 	 * Logs out the given message with INFO level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void info(final String message) {
// 		_logger.info(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with INFO level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void info(final String message, final Object ... values) {
// 		_logger.info(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with DEBUG level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void debug(final String message) {
// 		_logger.debug(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with DEBUG level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void debug(final String message, final Object ... values) {
// 		if (_logger.isDebugEnabled()) {
// 			_logger.debug(String.format(message, values));
// 		}
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void error(final String message, final Object ... values) {
// 		_logger.error(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param cause the underlying cause.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void error(final String message, final Throwable cause, final Object ... values) {
// 		_logger.error(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Logs out the given message with ERROR level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param cause the underlying cause.
// 	 */
// 	public void error(final String message, final Throwable cause) {
// 		_logger.error(message, cause);
// 	}
// 
// 	/**
// 	 * Logs out the given message with WARNING level.
// 	 * 
// 	 * @param message the log message.
// 	 */
// 	public void warning(final String message) {
// 		_logger.warn(message);
// 	}
// 
// 	/**
// 	 * Logs out the given message with WARNING level.
// 	 * 
// 	 * @param message the log message.
// 	 * @param values values that will replace the message placeholders.
// 	 */
// 	public void warning(final String message, final Object ... values) {
// 		_logger.warn(String.format(message, values));
// 	}
// 
// 	/**
// 	 * Returns true if the DEBUG level has been enabled for this logger.
// 	 * 
// 	 * @return true if the DEBUG level has been enabled for this logger.
// 	 */
// 	public boolean isDebugEnabled() {
// 		return _logger.isDebugEnabled();
// 	}
// }


// Path: cumulusrdf-core/src/main/java/edu/kit/aifb/cumulus/store/CounterFactory.java
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.slf4j.LoggerFactory;
import edu.kit.aifb.cumulus.framework.Initialisable;
import edu.kit.aifb.cumulus.framework.InitialisationException;
import edu.kit.aifb.cumulus.framework.datasource.CounterDAO;
import edu.kit.aifb.cumulus.framework.datasource.DataAccessLayerException;
import edu.kit.aifb.cumulus.framework.datasource.DataAccessLayerFactory;
import edu.kit.aifb.cumulus.log.Log;
import edu.kit.aifb.cumulus.log.MessageCatalog;

			sync();
			return _data;
		}

		/**
		 * Sets the counter to the given value.
		 * 
		 * @param val the target counter value. 
		 * @throws DataAccessLayerException if the counter cannot be set.
		 */
		public synchronized void set(final long val) throws DataAccessLayerException {
			_dao.set(_id, val);
			sync();
		}

		/**
		 * Reads the current counter value from the DAO.
		 * 
		 * @throws DataAccessLayerException if the counter value can not be read.
		 */
		private void sync() throws DataAccessLayerException {
			_data = _dao.get(_id);
		}

		@Override
		public String toString() {
			return "counter: " + _id;
		}
	}

	private static final Log LOGGER = new Log(LoggerFactory.getLogger(CounterFactory.class));