in ldap/model/src/main/java/org/apache/directory/api/ldap/model/csn/Csn.java [123:272]
public Csn( String value )
{
sdf.setTimeZone( UTC_TIME_ZONE );
if ( Strings.isEmpty( value ) )
{
String message = I18n.err( I18n.ERR_13015_NULL_OR_EMPTY_CSN );
LOG.error( message );
throw new InvalidCSNException( message );
}
if ( value.length() != 40 )
{
String message = I18n.err( I18n.ERR_13016_INCORRECT_CSN_LENGTH );
LOG.error( message );
throw new InvalidCSNException( message );
}
// Get the Timestamp
int sepTS = value.indexOf( '#' );
if ( sepTS < 0 )
{
String message = I18n.err( I18n.ERR_13017_CANT_FIND_SHARP_IN_CSN );
LOG.error( message );
throw new InvalidCSNException( message );
}
String timestampStr = value.substring( 0, sepTS ).trim();
if ( timestampStr.length() != 22 )
{
String message = I18n.err( I18n.ERR_13018_TIMESTAMP_NOT_LONG_ENOUGH );
LOG.error( message );
throw new InvalidCSNException( message );
}
// Let's transform the Timestamp by removing the mulliseconds and microseconds
String realTimestamp = timestampStr.substring( 0, 14 );
long tempTimestamp = 0L;
synchronized ( sdf )
{
try
{
tempTimestamp = sdf.parse( realTimestamp ).getTime();
}
catch ( ParseException pe )
{
String message = I18n.err( I18n.ERR_13019_CANNOT_PARSE_TIMESTAMP, timestampStr );
LOG.error( message );
throw new InvalidCSNException( message, pe );
}
}
int millis = 0;
// And add the milliseconds and microseconds now
try
{
millis = Integer.parseInt( timestampStr.substring( 15, 21 ) );
}
catch ( NumberFormatException nfe )
{
String message = I18n.err( I18n.ERR_13020_INVALID_MICROSECOND );
LOG.error( message );
throw new InvalidCSNException( message, nfe );
}
tempTimestamp += ( millis / 1000 );
timestamp = tempTimestamp;
// Get the changeCount. It should be an hex number prefixed with '0x'
int sepCC = value.indexOf( '#', sepTS + 1 );
if ( sepCC < 0 )
{
String message = I18n.err( I18n.ERR_13014_DN_ATTR_FLAG_INVALID, value );
LOG.error( message );
throw new InvalidCSNException( message );
}
String changeCountStr = value.substring( sepTS + 1, sepCC ).trim();
try
{
changeCount = Integer.parseInt( changeCountStr, 16 );
}
catch ( NumberFormatException nfe )
{
String message = I18n.err( I18n.ERR_13021_INVALID_CHANGE_COUNT, changeCountStr );
LOG.error( message );
throw new InvalidCSNException( message, nfe );
}
// Get the replicaID
int sepRI = value.indexOf( '#', sepCC + 1 );
if ( sepRI < 0 )
{
String message = I18n.err( I18n.ERR_13022_MISSING_SHARP_IN_CSN, value );
LOG.error( message );
throw new InvalidCSNException( message );
}
String replicaIdStr = value.substring( sepCC + 1, sepRI ).trim();
if ( Strings.isEmpty( replicaIdStr ) )
{
String message = I18n.err( I18n.ERR_13023_REPLICA_ID_NULL );
LOG.error( message );
throw new InvalidCSNException( message );
}
try
{
replicaId = Integer.parseInt( replicaIdStr, 16 );
}
catch ( NumberFormatException nfe )
{
String message = I18n.err( I18n.ERR_13024_INVALID_REPLICA_ID, replicaIdStr );
LOG.error( message );
throw new InvalidCSNException( message, nfe );
}
// Get the modification number
if ( sepCC == value.length() )
{
String message = I18n.err( I18n.ERR_13025_NO_OPERATION_NUMBER );
LOG.error( message );
throw new InvalidCSNException( message );
}
String operationNumberStr = value.substring( sepRI + 1 ).trim();
try
{
operationNumber = Integer.parseInt( operationNumberStr, 16 );
}
catch ( NumberFormatException nfe )
{
String message = I18n.err( I18n.ERR_13026_INVALID_OPERATION_NUMBER, operationNumberStr );
LOG.error( message );
throw new InvalidCSNException( message, nfe );
}
csnStr = value;
bytes = Strings.getBytesUtf8( csnStr );
}