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 public void abandon()
58 {
59 if ( abandoned )
60 {
61 return;
62 }
63
64 abandoned = true;
65 if ( o == null )
66 {
67 o = new RequestObservable();
68 }
69 o.setChanged();
70 o.notifyObservers();
71 o.deleteObservers();
72 }
73
74
75 public boolean isAbandoned()
76 {
77 return abandoned;
78 }
79
80
81
82
83
84 public AbandonableRequest addAbandonListener( final AbandonListener listener )
85 {
86 if ( o == null )
87 {
88 o = new RequestObservable();
89 }
90
91 o.addObserver( new Observer()
92 {
93 public void update( Observable o, Object arg )
94 {
95 listener.requestAbandoned( AbstractAbandonableRequest.this );
96 }
97 } );
98
99 return this;
100 }
101
102
103 static class RequestObservable extends Observable
104 {
105 @Override
106 public void setChanged()
107 {
108 super.setChanged();
109 }
110 }
111 }