1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.api.ldap.model.message;
21
22
23 import java.util.Observable;
24 import java.util.Observer;
25
26
27
28
29
30
31
32
33 public abstract class AbstractAbandonableRequest extends AbstractRequest implements AbandonableRequest
34 {
35 static final long serialVersionUID = -4511116249089399040L;
36
37
38 private boolean abandoned = false;
39
40
41 private RequestObservable observable;
42
43
44
45
46
47
48
49
50 protected AbstractAbandonableRequest( final int id, final MessageTypeEnum type )
51 {
52 super( id, type, true );
53 }
54
55
56
57
58
59 @Override
60 public void abandon()
61 {
62 if ( abandoned )
63 {
64 return;
65 }
66
67 abandoned = true;
68
69 if ( observable == null )
70 {
71 observable = new RequestObservable();
72 }
73
74 observable.setChanged();
75 observable.notifyObservers();
76 observable.deleteObservers();
77 }
78
79
80
81
82
83 @Override
84 public boolean isAbandoned()
85 {
86 return abandoned;
87 }
88
89
90
91
92
93 @Override
94 public AbandonableRequest addAbandonListener( final AbandonListener listener )
95 {
96 if ( observable == null )
97 {
98 observable = new RequestObservable();
99 }
100
101 observable.addObserver( new Observer()
102 {
103 @Override
104 public void update( Observable o, Object arg )
105 {
106 listener.requestAbandoned( AbstractAbandonableRequest.this );
107 }
108 } );
109
110 return this;
111 }
112
113
114 static class RequestObservable extends Observable
115 {
116 @Override
117 public void setChanged()
118 {
119 super.setChanged();
120 }
121 }
122 }