Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.uberfire.io.lock.impl;
  
  
  import  org.uberfire.java.nio.file.FileSystem;
 
 public class FSLockServiceImpl implements FSLockService {
 
     private final Lock lock = new ReentrantLocktrue );
     private final ConcurrentHashMap<FileSystem, FSLocklockControl = new ConcurrentHashMap<FileSystem, FSLock>();
 
     @Override
     public void lock( FileSystem fs ) {
         .lock();
         try {
             FSLock fSLock = getFSLockfs );
             fSLock.lock();
         } finally {
             .unlock();
         }
     }
 
     @Override
     public void unlock( FileSystem fs ) {
         .lock();
         try {
             FSLock fSLock = getFSLockfs );
             fSLock.unlock();
         } finally {
             .unlock();
         }
     }
 
     boolean isLocked( FileSystem fs ) throws InterruptedException {
         FSLock fsLock = .get( fs );
         return fsLock != null && fsLock.isLocked();
     }
 
     @Override
     public void waitForUnlock( FileSystem fs ) {
         FSLock fsLock = .get( fs );
         if ( fsLock != null ) {
             fsLock.waitForUnlock();
         }
     }
 
     @Override
     public void removeFromService( FileSystem fs ) {
         .lock();
         try {
             .remove( fs );
         } finally {
             .unlock();
         }
 
     }
 
     private FSLock getFSLock( FileSystem fs ) {
         .putIfAbsent( fsnew FSLock() );
         return .get( fs );
     }
 
     private class FSLock {
 
         private Condition conditional;
         private Boolean locked;
         private Thread currentThread;
 
         FSLock() {
             this. = .;
             this. = .newCondition();
         }
 
         boolean isLocked() throws InterruptedException {
             return ;
         }
 
         void lock() {
             if (  && !lockedByMe() ) {
                 try {
                     .await();
                 } catch ( InterruptedException e ) {
                     throw new FSLockServiceExceptione );
                 }
             }
             this. = .;
             this. = Thread.currentThread();
         }
 
         private boolean lockedByMe() {
             return this. == null ||  == Thread.currentThread();
         }
 
         void unlock() {
             this. = .;
            this. = null;
            .signal();
        }
        public void waitForUnlock() {
            while ( this. && !lockedByMe() ) {
                try {
                    .await();
                } catch ( InterruptedException e ) {
                    throw new FSLockServiceExceptione );
                }
            }
        }
        private class FSLockServiceException extends RuntimeException {
            public FSLockServiceExceptionInterruptedException e ) {
            }
        }
    }
New to GrepCode? Check out our FAQ X