1 package org.apache.maven.surefire.api.util.internal;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23 import java.nio.ByteBuffer;
24 import java.nio.channels.ClosedChannelException;
25 import java.nio.channels.NonReadableChannelException;
26 import java.nio.channels.ReadableByteChannel;
27
28
29
30
31
32
33
34 abstract class AbstractNoninterruptibleReadableChannel implements ReadableByteChannel
35 {
36 private volatile boolean open = true;
37
38 protected abstract int readImpl( ByteBuffer src ) throws IOException;
39 protected abstract void closeImpl() throws IOException;
40
41 @Override
42 public final int read( ByteBuffer src ) throws IOException
43 {
44 if ( !isOpen() )
45 {
46 throw new ClosedChannelException();
47 }
48
49 if ( !src.hasArray() || src.isReadOnly() )
50 {
51 throw new NonReadableChannelException();
52 }
53
54 return src.hasRemaining() ? readImpl( src ) : 0;
55 }
56
57 @Override
58 public final boolean isOpen()
59 {
60 return open;
61 }
62
63 @Override
64 public final void close() throws IOException
65 {
66 try
67 {
68 closeImpl();
69 }
70 finally
71 {
72 open = false;
73 }
74 }
75 }