package uk.ac.manchester.cs.owl.owlapi.concurrent;

import java.io.Serializable;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import javax.annotation.Nullable;

/**
 * Matthew Horridge Stanford Center for Biomedical Informatics Research 13/04/15
 */
class NoOpLock implements Lock, Serializable {

    public static final NoOpCondition NO_OP_CONDITION = new NoOpCondition();

    @Override
    public void lock() {
        // nothing to do
    }

    @Override
    public void lockInterruptibly() {
        // nothing to do
    }

    @Override
    public boolean tryLock() {
        return true;
    }

    @Override
    public boolean tryLock(long time, @Nullable TimeUnit unit) {
        return true;
    }

    @Override
    public void unlock() {
        // nothing to do
    }

    @Override
    public Condition newCondition() {
        return NO_OP_CONDITION;
    }

    private static class NoOpCondition implements Condition, Serializable {

        public NoOpCondition() {
            // nothing to do
        }

        @Override
        public void await() {
            // nothing to do
        }

        @Override
        public void awaitUninterruptibly() {
            // nothing to do
        }

        @Override
        public long awaitNanos(long nanosTimeout) {
            return 0;
        }

        @Override
        public boolean await(long time, @Nullable TimeUnit unit) {
            return true;
        }

        @Override
        public boolean awaitUntil(@Nullable Date deadline) {
            return true;
        }

        @Override
        public void signal() {
            // nothing to do
        }

        @Override
        public void signalAll() {
            // nothing to do
        }
    }
}
