13742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Copyright 2003-2005 Arthur van Hoff, Rick Blair
23742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Licensed under Apache License version 2.0
33742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman// Original license LGPL
43742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
53742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpackage javax.jmdns.impl.constants;
63742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
73742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman/**
83742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * DNSState defines the possible states for services registered with JmDNS.
93742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman *
103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman * @author Werner Randelshofer, Rick Blair, Pierre Frisch
113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman */
123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Romanpublic enum DNSState {
133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    PROBING_1("probing 1", StateClass.probing),
183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    PROBING_2("probing 2", StateClass.probing),
223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    PROBING_3("probing 3", StateClass.probing),
263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    ANNOUNCING_1("announcing 1", StateClass.announcing),
303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    ANNOUNCING_2("announcing 2", StateClass.announcing),
343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    ANNOUNCED("announced", StateClass.announced),
383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CANCELING_1("canceling 1", StateClass.canceling),
423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CANCELING_2("canceling 2", StateClass.canceling),
463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CANCELING_3("canceling 3", StateClass.canceling),
503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    *
523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    */
533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CANCELED("canceled", StateClass.canceled),
543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CLOSING("closing", StateClass.closing),
583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    CLOSED("closed", StateClass.closed);
623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    private enum StateClass {
643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        probing, announcing, announced, canceling, canceled, closing, closed
653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    // private static Logger logger = Logger.getLogger(DNSState.class.getName());
683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    private final String     _name;
703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    private final StateClass _state;
723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    private DNSState(String name, StateClass state) {
743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        _name = name;
753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        _state = state;
763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    @Override
793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final String toString() {
803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _name;
813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns the next advanced state.<br/>
853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * In general, this advances one step in the following sequence: PROBING_1, PROBING_2, PROBING_3, ANNOUNCING_1, ANNOUNCING_2, ANNOUNCED.<br/>
863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * or CANCELING_1, CANCELING_2, CANCELING_3, CANCELED Does not advance for ANNOUNCED and CANCELED state.
873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return next state
893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final DNSState advance() {
913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        switch (this) {
923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_1:
933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return PROBING_2;
943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_2:
953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return PROBING_3;
963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_3:
973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return ANNOUNCING_1;
983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCING_1:
993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return ANNOUNCING_2;
1003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCING_2:
1013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return ANNOUNCED;
1023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCED:
1033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return ANNOUNCED;
1043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_1:
1053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELING_2;
1063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_2:
1073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELING_3;
1083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_3:
1093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELED;
1103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELED:
1113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELED;
1123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CLOSING:
1133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CLOSED;
1143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CLOSED:
1153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CLOSED;
1163742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            default:
1173742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                // This is just to keep the compiler happy as we have covered all cases before.
1183742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return this;
1193742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        }
1203742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1213742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1223742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1233742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns to the next reverted state. All states except CANCELED revert to PROBING_1. Status CANCELED does not revert.
1243742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1253742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return reverted state
1263742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1273742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final DNSState revert() {
1283742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        switch (this) {
1293742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_1:
1303742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_2:
1313742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case PROBING_3:
1323742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCING_1:
1333742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCING_2:
1343742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case ANNOUNCED:
1353742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return PROBING_1;
1363742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_1:
1373742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_2:
1383742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELING_3:
1393742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELING_1;
1403742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CANCELED:
1413742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CANCELED;
1423742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CLOSING:
1433742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CLOSING;
1443742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            case CLOSED:
1453742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return CLOSED;
1463742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman            default:
1473742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                // This is just to keep the compiler happy as we have covered all cases before.
1483742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman                return this;
1493742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        }
1503742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1513742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1523742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1533742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is a probing state.
1543742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1553742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if probing state, <code>false</code> otherwise
1563742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1573742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isProbing() {
1583742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.probing;
1593742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1603742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1613742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1623742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is an announcing state.
1633742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1643742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if announcing state, <code>false</code> otherwise
1653742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1663742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isAnnouncing() {
1673742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.announcing;
1683742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1693742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1703742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1713742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is an announced state.
1723742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1733742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if announced state, <code>false</code> otherwise
1743742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1753742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isAnnounced() {
1763742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.announced;
1773742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1783742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1793742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1803742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is a canceling state.
1813742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1823742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if canceling state, <code>false</code> otherwise
1833742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1843742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isCanceling() {
1853742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.canceling;
1863742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1873742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1883742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1893742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is a canceled state.
1903742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
1913742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if canceled state, <code>false</code> otherwise
1923742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
1933742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isCanceled() {
1943742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.canceled;
1953742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
1963742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
1973742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
1983742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is a closing state.
1993742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
2003742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if closing state, <code>false</code> otherwise
2013742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
2023742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isClosing() {
2033742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.closing;
2043742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
2053742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
2063742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    /**
2073742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * Returns true, if this is a closing state.
2083742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     *
2093742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     * @return <code>true</code> if closed state, <code>false</code> otherwise
2103742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman     */
2113742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    public final boolean isClosed() {
2123742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman        return _state == StateClass.closed;
2133742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman    }
2143742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman
2153742d9db8b6edb10627b0f89336cca5249f1d15aManuel Roman}
216