package org.glassfish.pfl.tf.timer.spi ;
public abstract class NamedBase implements Named {
private TimerFactory factory ;
private String name ;
private String toStringName ;
protected NamedBase( TimerFactory factory, String name ) {
this.name = name ;
if (factory != null)
setFactory( factory ) ;
}
protected void setFactory( TimerFactory factory ) {
if (this.factory == null) {
this.factory = factory ;
final String className = this.getClass().getName() ;
final int lastDot = className.lastIndexOf( '.' ) ;
this.toStringName = className.substring( lastDot + 1 )
+ "[" + factory.name() + ":" + name + "]";
} else {
throw new IllegalStateException( "NamedBase.factory can only be set once!" ) ;
}
}
private void checkFactorySet() {
if (factory == null)
throw new IllegalStateException( "NamedBase.factory is not set!" ) ;
}
public TimerFactory factory() {
checkFactorySet() ;
return factory ;
}
public String name() {
return name ;
}
public boolean equals( Object obj ) {
if (obj == this)
return true ;
if (!(obj instanceof Named))
return false ;
Named other = Named.class.cast( obj ) ;
return other.name().equals( name ) &&
other.getClass().equals( this.getClass() ) ;
}
public int hashCode() {
return name.hashCode() ;
}
public String toString() {
checkFactorySet() ;
return toStringName ;
}
}