public void assign(Identifier id)
  {
    if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
      tc.entry(
        cclass,
        "assign",
        "identifier: " + id);
    
    // Assign ordinal position
    String key = null;
    switch (id.getType()) 
    {
      case Identifier.STRING :
        // Changed from using the Identifier name to using the full name under defect 504438. The full name is only
        // relevant in the XPath Selector Domain and incorporates the full path for the attribute or element referenced.
        // This is necessary so that we are able to distinguish between common names at the same depth in an XML
        // document. For example you might encounter 2 XPath expressions:
        //
        // /company/department[@name='test'] and /company/location[@name='London']
        //
        // We must ensure that the system can distinguish these attributes.
        //
        key = "S:" + id.getFullName();
        break;
      case Identifier.BOOLEAN :
        key = "B:" + id.getFullName();
        break;
      case Identifier.CHILD :
        key = "C:" + id.getFullName();
        break;
      case Identifier.TOPIC:
        key = "T:" + id.getFullName();
        break;
      case Identifier.UNKNOWN :
      case Identifier.OBJECT :
        key = "U:" + id.getFullName();
        break;
      default :
        key = "N:" + id.getFullName();
    }
 
    // Get the map for the specified level. The level is only relevant in the XPath Selector Domain. It represents the
    // level of a location step in an XPath expression
    Integer level = new Integer(id.getStep());
    LevelEntry positions = (LevelEntry) levels.get(level);
    if (positions == null)
    {
      positions = new LevelEntry();
      levels.put(level, positions);
    }
    
    int levelPos = 0;
    if (key != null)
    {
      levelPos = positions.getPosition(key);
    }
    
    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
      tc.debug(this,cclass, "assign", "level: " + level + ", levelPos: " + Integer.valueOf(levelPos) + ", for key: " + key);   
    
    // Now we're ready to set the OrdinalPosition
    OrdinalPosition ordPos = new OrdinalPosition(level.intValue(), levelPos);
    id.setOrdinalPosition(ordPos);
    
    if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
      tc.exit(this,cclass, "assign");
  }
public void assign ( Identifier id ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) tc . entry ( cclass , "assign" , "identifier: " + id ) ; String key = null ; switch ( id . getType ( ) ) { case Identifier . STRING : key = "S:" + id . getFullName ( ) ; break ; case Identifier . BOOLEAN : key = "B:" + id . getFullName ( ) ; break ; case Identifier . CHILD : key = "C:" + id . getFullName ( ) ; break ; case Identifier . TOPIC : key = "T:" + id . getFullName ( ) ; break ; case Identifier . UNKNOWN : case Identifier . OBJECT : key = "U:" + id . getFullName ( ) ; break ; default : key = "N:" + id . getFullName ( ) ; } Integer level = new Integer ( id . getStep ( ) ) ; LevelEntry positions = ( LevelEntry ) levels . get ( level ) ; if ( positions == null ) { positions = new LevelEntry ( ) ; levels . put ( level , positions ) ; } int levelPos = 0 ; if ( key != null ) { levelPos = positions . getPosition ( key ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) tc . debug ( this , cclass , "assign" , "level: " + level + ", levelPos: " + Integer . valueOf ( levelPos ) + ", for key: " + key ) ; OrdinalPosition ordPos = new OrdinalPosition ( level . intValue ( ) , levelPos ) ; id . setOrdinalPosition ( ordPos ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) tc . exit ( this , cclass , "assign" ) ; }
Implement the assignPosition method