1 // Copyright 2003-2005 Arthur van Hoff, Rick Blair
2 // Licensed under Apache License version 2.0
3 // Original license LGPL
4
5 package javax.jmdns.impl.constants;
6
7 /**
8 * DNSState defines the possible states for services registered with JmDNS.
9 *
10 * @author Werner Randelshofer, Rick Blair, Pierre Frisch
11 */
12 public enum DNSState {
13
14 /**
15 *
16 */
17 PROBING_1("probing 1", StateClass.probing),
18 /**
19 *
20 */
21 PROBING_2("probing 2", StateClass.probing),
22 /**
23 *
24 */
25 PROBING_3("probing 3", StateClass.probing),
26 /**
27 *
28 */
29 ANNOUNCING_1("announcing 1", StateClass.announcing),
30 /**
31 *
32 */
33 ANNOUNCING_2("announcing 2", StateClass.announcing),
34 /**
35 *
36 */
37 ANNOUNCED("announced", StateClass.announced),
38 /**
39 *
40 */
41 CANCELING_1("canceling 1", StateClass.canceling),
42 /**
43 *
44 */
45 CANCELING_2("canceling 2", StateClass.canceling),
46 /**
47 *
48 */
49 CANCELING_3("canceling 3", StateClass.canceling),
50 /**
51 *
52 */
53 CANCELED("canceled", StateClass.canceled),
54 /**
55 *
56 */
57 CLOSING("closing", StateClass.closing),
58 /**
59 *
60 */
61 CLOSED("closed", StateClass.closed);
62
63 private enum StateClass {
64 probing, announcing, announced, canceling, canceled, closing, closed
65 }
66
67 // private static Logger logger = Logger.getLogger(DNSState.class.getName());
68
69 private final String _name;
70
71 private final StateClass _state;
72
73 private DNSState(String name, StateClass state) {
74 _name = name;
75 _state = state;
76 }
77
78 @Override
79 public final String toString() {
80 return _name;
81 }
82
83 /**
84 * Returns the next advanced state.<br/>
85 * In general, this advances one step in the following sequence: PROBING_1, PROBING_2, PROBING_3, ANNOUNCING_1, ANNOUNCING_2, ANNOUNCED.<br/>
86 * or CANCELING_1, CANCELING_2, CANCELING_3, CANCELED Does not advance for ANNOUNCED and CANCELED state.
87 *
88 * @return next state
89 */
90 public final DNSState advance() {
91 switch (this) {
92 case PROBING_1:
93 return PROBING_2;
94 case PROBING_2:
95 return PROBING_3;
96 case PROBING_3:
97 return ANNOUNCING_1;
98 case ANNOUNCING_1:
99 return ANNOUNCING_2;
100 case ANNOUNCING_2:
101 return ANNOUNCED;
102 case ANNOUNCED:
103 return ANNOUNCED;
104 case CANCELING_1:
105 return CANCELING_2;
106 case CANCELING_2:
107 return CANCELING_3;
108 case CANCELING_3:
109 return CANCELED;
110 case CANCELED:
111 return CANCELED;
112 case CLOSING:
113 return CLOSED;
114 case CLOSED:
115 return CLOSED;
116 default:
117 // This is just to keep the compiler happy as we have covered all cases before.
118 return this;
119 }
120 }
121
122 /**
123 * Returns to the next reverted state. All states except CANCELED revert to PROBING_1. Status CANCELED does not revert.
124 *
125 * @return reverted state
126 */
127 public final DNSState revert() {
128 switch (this) {
129 case PROBING_1:
130 case PROBING_2:
131 case PROBING_3:
132 case ANNOUNCING_1:
133 case ANNOUNCING_2:
134 case ANNOUNCED:
135 return PROBING_1;
136 case CANCELING_1:
137 case CANCELING_2:
138 case CANCELING_3:
139 return CANCELING_1;
140 case CANCELED:
141 return CANCELED;
142 case CLOSING:
143 return CLOSING;
144 case CLOSED:
145 return CLOSED;
146 default:
147 // This is just to keep the compiler happy as we have covered all cases before.
148 return this;
149 }
150 }
151
152 /**
153 * Returns true, if this is a probing state.
154 *
155 * @return <code>true</code> if probing state, <code>false</code> otherwise
156 */
157 public final boolean isProbing() {
158 return _state == StateClass.probing;
159 }
160
161 /**
162 * Returns true, if this is an announcing state.
163 *
164 * @return <code>true</code> if announcing state, <code>false</code> otherwise
165 */
166 public final boolean isAnnouncing() {
167 return _state == StateClass.announcing;
168 }
169
170 /**
171 * Returns true, if this is an announced state.
172 *
173 * @return <code>true</code> if announced state, <code>false</code> otherwise
174 */
175 public final boolean isAnnounced() {
176 return _state == StateClass.announced;
177 }
178
179 /**
180 * Returns true, if this is a canceling state.
181 *
182 * @return <code>true</code> if canceling state, <code>false</code> otherwise
183 */
184 public final boolean isCanceling() {
185 return _state == StateClass.canceling;
186 }
187
188 /**
189 * Returns true, if this is a canceled state.
190 *
191 * @return <code>true</code> if canceled state, <code>false</code> otherwise
192 */
193 public final boolean isCanceled() {
194 return _state == StateClass.canceled;
195 }
196
197 /**
198 * Returns true, if this is a closing state.
199 *
200 * @return <code>true</code> if closing state, <code>false</code> otherwise
201 */
202 public final boolean isClosing() {
203 return _state == StateClass.closing;
204 }
205
206 /**
207 * Returns true, if this is a closing state.
208 *
209 * @return <code>true</code> if closed state, <code>false</code> otherwise
210 */
211 public final boolean isClosed() {
212 return _state == StateClass.closed;
213 }
214
215 }