package org.marketcetera.core; import java.io.Closeable; import java.util.concurrent.locks.Lock; import org.apache.commons.lang.Validate; /* $License$ */ /** * Provides an auto-closeable implementation of {@link ReadWriteLock}. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: CloseableLock.java 16901 2014-05-11 16:14:11Z colin $ * @since 2.4.0 */ public class CloseableLock implements Closeable { /** * Creates a <code>CloseableLock</code> around the given <code>Lock</code>. * * @param inLock a <code>Lock</code> object to wrap in a closeable interface * @return a <code>CloseableLock</code> value */ public static CloseableLock create(Lock inLock) { return new CloseableLock(inLock); } /** * Locks the wrapped lock. * * @throws RuntimeException if the lock request was interrupted */ public void lock() { try { lock.lockInterruptibly(); } catch (InterruptedException e) { throw new RuntimeException(e); } } /** * Unlocks the wrapped lock. */ public void unlock() { close(); } /* (non-Javadoc) * @see java.io.Closeable#close() */ @Override public void close() { lock.unlock(); } /** * Create a new CloseableLock instance. * * @param inLock a <code>Lock</code> value */ private CloseableLock(Lock inLock) { Validate.notNull(inLock); lock = inLock; } /** * inner lock value */ private final Lock lock; }