1
2
3
4
5
6
7
8
9
10
11 package org.mule.module.pgp;
12
13 import java.io.PipedOutputStream;
14 import java.util.concurrent.Semaphore;
15
16
17
18
19
20 public class TransformPerRequestPolicy extends AbstractTransformPolicy
21 {
22
23 private Semaphore writeSemaphore;
24
25 public TransformPerRequestPolicy()
26 {
27 this.writeSemaphore = new Semaphore(1);
28 }
29
30
31
32
33 @Override
34 public void readRequest(long length)
35 {
36 super.readRequest(length);
37 this.writeSemaphore.release();
38 }
39
40
41
42
43
44 @Override
45 public void release()
46 {
47 this.writeSemaphore.release();
48 super.release();
49 }
50
51
52
53
54 @Override
55 protected Thread getCopyingThread()
56 {
57 return new PerRequestWork();
58 }
59
60 private class PerRequestWork extends TransformerWork
61 {
62 @Override
63 protected void execute() throws Exception
64 {
65 getTransformer().initialize(getInputStream().getOut());
66
67 boolean finishWriting = false;
68 while (!finishWriting && !isClosed)
69 {
70 writeSemaphore.acquire();
71 finishWriting = getTransformer().write(getInputStream().getOut(), getBytesRequested());
72 }
73 }
74 }
75 }
76
77