/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id$ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 19Aug98 subtle start of recorded history ** */ package key; import java.util.Enumeration; import java.util.Vector; import java.io.IOException; import java.io.DataInput; import java.io.DataOutput; import java.util.NoSuchElementException; public class AliasListKey implements java.io.Serializable { private static final long serialVersionUID = -6663255759351326195L; protected String primaryKey; protected Vector secondarys; protected transient int[] secondaryHashcodes; protected transient int primaryHashcode; public AliasListKey() { primaryKey = ""; secondarys = null; secondaryHashcodes = null; } public String getPrimary() { return( primaryKey ); } public void setPrimary( String pk ) { primaryKey = pk.toLowerCase(); if( secondaryHashcodes != null ) primaryHashcode = primaryKey.hashCode(); } public void addSecondary( String sk ) { ensureSecondary(); secondarys.addElement( sk.toLowerCase() ); secondaryHashcodes = null; } public void removeSecondary( String sk ) { if( secondarys != null ) { secondarys.removeElement( sk.toLowerCase() ); secondaryHashcodes = null; } } public void copySecondaries( AliasListKey alk ) { if( alk.secondarys != null ) secondarys = (Vector) alk.secondarys.clone(); else secondarys = null; } public Enumeration secondaryKeys() { ensureSecondary(); return( secondarys.elements() ); } public boolean hasSecondaries() { return( !( secondarys == null || secondarys.size() == 0 ) ); } private void ensureSecondary() { if( secondarys == null ) secondarys = new Vector( 1, 3 ); } public String toString() { return( primaryKey ); } private void ensureHashcodes() { if( secondaryHashcodes == null ) { primaryHashcode = primaryKey.hashCode(); if( secondarys != null ) { secondaryHashcodes = new int[ secondarys.size() ]; for( int i = 0; i < secondarys.size(); i++ ) secondaryHashcodes[i] = secondarys.elementAt( i ).hashCode(); } } } /** * Returns the strength of this match (0 = no match, 1 = primary * match, 2 = first secondary, etc) based on the hashcode and * string supplied. hc = match.toLowercase().hashCode(); */ public int getMatchStrength( int hc, String match ) { ensureHashcodes(); if( hc == primaryHashcode ) { if( primaryKey.equalsIgnoreCase( match ) ) return( 1 ); } if( secondaryHashcodes != null ) { for( int i = 0; i < secondaryHashcodes.length; i++ ) { if( hc == secondaryHashcodes[i] ) { if( ((String)secondarys.elementAt( i )).equalsIgnoreCase( match ) ) return( i+2 ); } } } return( 0 ); } }