blob: 54d1439c17630608896958d2080c7e155783ceba [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.server.ntp.messages;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Reference Identifier: This is a 32-bit bitstring identifying the
* particular reference source. In the case of NTP Version 3 or Version
* 4 stratum-0 (unspecified) or stratum-1 (primary) servers, this is a
* four-character ASCII string, left justified and zero padded to 32
* bits. In NTP Version 3 secondary servers, this is the 32-bit IPv4
* address of the reference source. In NTP Version 4 secondary servers,
* this is the low order 32 bits of the latest transmit timestamp of the
* reference source. NTP primary (stratum 1) servers should set this
* field to a code identifying the external reference source according
* to the following list. If the external reference is one of those
* listed, the associated code should be used. Codes for sources not
* listed can be contrived as appropriate.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ReferenceIdentifier implements Comparable<ReferenceIdentifier>
{
/**
* Constant for the "INIT" reference identifier type.
*/
public static final ReferenceIdentifier INIT = new ReferenceIdentifier( 0, "INIT", "initializing" );
/**
* Constant for the "LOCL" reference identifier type.
*/
public static final ReferenceIdentifier LOCL = new ReferenceIdentifier( 1, "LOCL", "uncalibrated local clock" );
/**
* Constant for the "PPL" reference identifier type.
*/
public static final ReferenceIdentifier PPS = new ReferenceIdentifier( 2, "PPL", "pulse-per-second source" );
/**
* Constant for the "ACTS" reference identifier type.
*/
public static final ReferenceIdentifier ACTS = new ReferenceIdentifier( 3, "ACTS", "NIST dialup modem service" );
/**
* Constant for the "USNO" reference identifier type.
*/
public static final ReferenceIdentifier USNO = new ReferenceIdentifier( 4, "USNO", "USNO modem service" );
/**
* Constant for the "PTB" reference identifier type.
*/
public static final ReferenceIdentifier PTB = new ReferenceIdentifier( 5, "PTB", "PTB (Germany) modem service" );
/**
* Constant for the "TDF" reference identifier type.
*/
public static final ReferenceIdentifier TDF = new ReferenceIdentifier( 6, "TDF", "Allouis (France) Radio 164 kHz" );
/**
* Constant for the "DCF" reference identifier type.
*/
public static final ReferenceIdentifier DCF = new ReferenceIdentifier( 7, "DCF",
"Mainflingen (Germany) Radio 77.5 kHz" );
/**
* Constant for the "MSF" reference identifier type.
*/
public static final ReferenceIdentifier MSF = new ReferenceIdentifier( 8, "MSF", "Rugby (UK) Radio 60 kHz" );
/**
* Constant for the "WWV" reference identifier type.
*/
public static final ReferenceIdentifier WWV = new ReferenceIdentifier( 9, "WWV",
"Ft. Collins (US) Radio 2.5, 5, 10, 15, 20 MHz" );
/**
* Constant for the "WWVB" reference identifier type.
*/
public static final ReferenceIdentifier WWVB = new ReferenceIdentifier( 10, "WWVB", "Boulder (US) Radio 60 kHz" );
/**
* Constant for the "WWVH" reference identifier type.
*/
public static final ReferenceIdentifier WWVH = new ReferenceIdentifier( 11, "WWVH",
"Kaui Hawaii (US) Radio 2.5, 5, 10, 15 MHz" );
/**
* Constant for the "CHU" reference identifier type.
*/
public static final ReferenceIdentifier CHU = new ReferenceIdentifier( 12, "CHU",
"Ottawa (Canada) Radio 3330, 7335, 14670 kHz" );
/**
* Constant for the "LORC" reference identifier type.
*/
public static final ReferenceIdentifier LORC = new ReferenceIdentifier( 13, "LORC",
"LORAN-C radionavigation system" );
/**
* Constant for the "OMEG" reference identifier type.
*/
public static final ReferenceIdentifier OMEG = new ReferenceIdentifier( 14, "OMEG", "OMEGA radionavigation system" );
/**
* Constant for the "GPS" reference identifier type.
*/
public static final ReferenceIdentifier GPS = new ReferenceIdentifier( 15, "GPS", "Global Positioning Service" );
/**
* Constant for the "GOES" reference identifier type.
*/
public static final ReferenceIdentifier GOES = new ReferenceIdentifier( 16, "GOES",
"Geostationary Orbit Environment Satellite" );
/**
* Constant for the "CDMA" reference identifier type.
*/
public static final ReferenceIdentifier CDMA = new ReferenceIdentifier( 17, "CDMA",
"CDMA mobile cellular/PCS telephone system" );
/**
* Array for building a List of VALUES.
*/
private static final ReferenceIdentifier[] values =
{ INIT, LOCL, PPS, ACTS, USNO, PTB, TDF, DCF, MSF, WWV, WWVB, WWVH, CHU, LORC, OMEG, GPS, GOES, CDMA };
/**
* A list of all the reference identifier type constants.
*/
public static final List<ReferenceIdentifier> VALUES = Collections.unmodifiableList( Arrays.asList( values ) );
/**
* The value/code for the reference identifier type.
*/
private final int ordinal;
/**
* The name of the reference identifier type.
*/
private final String name;
/**
* The code of the reference identifier type.
*/
private final String code;
/**
* Private constructor prevents construction outside of this class.
*/
private ReferenceIdentifier( int ordinal, String code, String name )
{
this.ordinal = ordinal;
this.code = code;
this.name = name;
}
/**
* Returns the reference identifier type when specified by its ordinal.
*
* @param type
* @return The reference identifier type.
*/
public static ReferenceIdentifier getTypeByOrdinal( int type )
{
for ( int ii = 0; ii < values.length; ii++ )
{
if ( values[ii].ordinal == type )
{
return values[ii];
}
}
return LOCL;
}
/**
* Returns the reference identifier type when specified by its name.
*
* @param type
* @return The reference identifier type.
*/
public static ReferenceIdentifier getTypeByName( String type )
{
for ( int ii = 0; ii < values.length; ii++ )
{
if ( values[ii].code.equalsIgnoreCase( type ) )
{
return values[ii];
}
}
return LOCL;
}
/**
* Returns the code associated with this reference identifier type.
*
* @return The reference identifier type code.
*/
public String getCode()
{
return code;
}
/**
* Returns the number associated with this reference identifier type.
*
* @return The reference identifier type ordinal.
*/
public int getOrdinal()
{
return ordinal;
}
/**
* {@inheritDoc}
*/
public int compareTo( ReferenceIdentifier that )
{
return ordinal - that.ordinal;
}
/**
* {@inheritDoc}
*/
public int hashCode()
{
return ordinal;
}
/**
* {@inheritDoc}
*/
public boolean equals( Object that )
{
if ( that == this )
{
return true;
}
if ( !( that instanceof ReferenceIdentifier ) )
{
return false;
}
ReferenceIdentifier thatRef = ( ReferenceIdentifier ) that;
return ordinal == thatRef.ordinal;
}
public String toString()
{
return name;
}
}