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 class AbstractAbandonableRequest extends AbstractRequest implements AbandonableRequest
34 {
35 static final long serialVersionUID = -4511116249089399040L;
36
37
38 private boolean abandoned = false;
39
40 private RequestObservable o;
41
42
43
44
45
46
47
48
49
50
51 protected AbstractAbandonableRequest( final int id, final MessageTypeEnum type )
52 {
53 super( id, type, true );
54 }
55
56
57 @Override
58 public void abandon()
59 {
60 if ( abandoned )
61 {
62 return;
63 }
64
65 abandoned = true;
66 if ( o == null )
67 {
68 o = new RequestObservable();
69 }
70 o.setChanged();
71 o.notifyObservers();
72 o.deleteObservers();
73 }
74
75
76 @Override
77 public boolean isAbandoned()
78 {
79 return abandoned;
80 }
81
82
83
84
85
86 @Override
87 public AbandonableRequest addAbandonListener( final AbandonListener listener )
88 {
89 if ( o == null )
90 {
91 o = new RequestObservable();
92 }
93
94 o.addObserver( new Observer()
95 {
96 @Override
97 public void update( Observable o, Object arg )
98 {
99 listener.requestAbandoned( AbstractAbandonableRequest.this );
100 }
101 } );
102
103 return this;
104 }
105
106
107 static class RequestObservable extends Observable
108 {
109 @Override
110 public void setChanged()
111 {
112 super.setChanged();
113 }
114 }
115 }