1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.internal.test.util.http;
20
21 import java.io.ByteArrayOutputStream;
22 import java.nio.Buffer;
23 import java.nio.ByteBuffer;
24
25 import org.eclipse.aether.spi.connector.transport.TransportListener;
26 import org.eclipse.aether.transfer.TransferCancelledException;
27
28 public class RecordingTransportListener extends TransportListener {
29
30 private final ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
31
32 private long dataOffset;
33
34 private long dataLength;
35
36 private int startedCount;
37
38 private int progressedCount;
39
40 private boolean cancelStart;
41
42 private boolean cancelProgress;
43
44 @Override
45 public void transportStarted(long dataOffset, long dataLength) throws TransferCancelledException {
46 startedCount++;
47 progressedCount = 0;
48 this.dataLength = dataLength;
49 this.dataOffset = dataOffset;
50 baos.reset();
51 if (cancelStart) {
52 throw new TransferCancelledException();
53 }
54 }
55
56 @Override
57 public void transportProgressed(ByteBuffer data) throws TransferCancelledException {
58 progressedCount++;
59 if (data.hasArray()) {
60 baos.write(data.array(), data.arrayOffset() + ((Buffer) data).position(), data.remaining());
61 } else {
62 byte[] arr = new byte[data.remaining()];
63 data.mark();
64 data.get(arr);
65 data.reset();
66 }
67 if (cancelProgress) {
68 throw new TransferCancelledException();
69 }
70 }
71
72 public ByteArrayOutputStream getBaos() {
73 return baos;
74 }
75
76 public long getDataOffset() {
77 return dataOffset;
78 }
79
80 public long getDataLength() {
81 return dataLength;
82 }
83
84 public int getStartedCount() {
85 return startedCount;
86 }
87
88 public int getProgressedCount() {
89 return progressedCount;
90 }
91
92 public boolean isCancelStart() {
93 return cancelStart;
94 }
95
96 public boolean isCancelProgress() {
97 return cancelProgress;
98 }
99
100 public void cancelStart() {
101 this.cancelStart = true;
102 }
103
104 public void cancelProgress() {
105 this.cancelProgress = true;
106 }
107 }