TKOpenSiteTreeIterator.java :  » Content-Management-System » webman » com » teamkonzept » webman » mainint » Java Open Source

Java Open Source » Content Management System » webman 
webman » com » teamkonzept » webman » mainint » TKOpenSiteTreeIterator.java
package com.teamkonzept.webman.mainint;

import com.teamkonzept.lib.*;
import de.webman.sitetree.eventhandler.SiteTreeUtils;
import java.util.*;

/**
 *  Iterator fuer die Navigationsanzeige im Sitetree
 * @author  $Author: alex $
 * @version $Revision: 1.8 $
*/
public class TKOpenSiteTreeIterator implements TKListIterator {

  TKListIterator oldIterator;
  String listName;
  TKDBResult dbResult;
  int lastLeft = -1;
  int lastRight = -1;
  int destId = -1;
  Stack parents;
  int level;
  int levels = 0;
  int maxlevels;
  
  public TKOpenSiteTreeIterator( TKDBResult dbResult, TKListIterator oldIterator, String listName, int maxlevels )
  {
    this.oldIterator = oldIterator;
    this.listName = listName;
    this.dbResult = dbResult;
    this.parents = new Stack();
    this.level = 0;
    this.maxlevels = maxlevels;
  }
  
  public TKOpenSiteTreeIterator( TKDBResult dbResult, TKListIterator oldIterator, String listName, int destId, int maxlevels )
  {
    this.oldIterator = oldIterator;
    this.listName = listName;
    this.dbResult = dbResult;
    this.destId = destId;
    this.parents = new Stack();
    this.level = 0;
    this.maxlevels = maxlevels;
  }
  
  public boolean apply( TKTemplate template, int i, String currListName )
  {
    if( currListName.equalsIgnoreCase( listName ) ) 
    {
      if( i >= dbResult.size() )
      {
        if( !parents.empty() ) parents.pop();
        level = 0;
        lastLeft = -1;
        lastRight = -1;
        return false;
      }
      TKDBResultRow resultRow = (TKDBResultRow)(dbResult.get( i ));
      if( !TKDBTemplate.prepareTemplate( resultRow,template ) ) return false;
      try {
        int myId = Integer.parseInt( (String) resultRow.getColumn( "SITE_NODE_ID" ) );
        // vollstaendigen Pfad ins Template
        String path = SiteTreeUtils.getCurrentPath(new Integer(myId));
        template.set("PATH", path);
        if( destId != -1 && myId == destId ) {
          template.set( "IS_DESTINATION", Boolean.TRUE );
        }
        int thisLeft = Integer.parseInt( (String) resultRow.getColumn( "LEFT_NR" ) );
        int thisRight = Integer.parseInt( (String) resultRow.getColumn( "RIGHT_NR" ) );
        String tmp = (String) resultRow.getColumn( "SITE_NODE_PARENT" );
        int thisParent = ( tmp == null || tmp.equals("") )?myId:Integer.parseInt( tmp );
        
        String nodeId = (String) resultRow.getColumn( "NODE_ID" );
        int thisPar = ( nodeId.equals("") )?myId+1:Integer.parseInt( nodeId );
        if( nodeId.equals("") ) {
          template.set( "IS_LEAF", Boolean.TRUE );
        }
        else if( thisPar == myId ) {
          template.set( "IS_CLOSED", Boolean.TRUE );
        }
        else {
          template.set( "IS_OPEN", Boolean.TRUE );
        }

        if( i == 0 ) template.set( "IS_ROOT", Boolean.TRUE );
        if( thisLeft > lastLeft && thisRight < lastRight ) {
          parents.push( new Integer( thisParent ) );
          level++;
        }
        else if( !parents.empty() ) {
          // wenn der oberste parent im stack gleich dem aktuellen parent, dann gleiche ebene
          // und nix tun
          // wenn der aktuelle parent tiefer im stack liegt, dann entspr. viele ebenen zurueck und
          // level neu setzen
          if( !(parents.peek().equals( new Integer (thisParent))) ) {
            while( !parents.empty() ) {
              if( parents.pop().equals( new Integer( thisParent )) ) {
                parents.push( new Integer( thisParent ) );
                break;
              }
              level--;
            }
          }
        }
        levels = level;
        template.set( "LEVEL", new Integer( level ) );
        template.set( "CURR_COLSPAN", new Integer( maxlevels-level+1 ) );
        lastLeft = thisLeft;
        lastRight = thisRight;
      }
      catch ( Throwable th ) {
        throw new Error( th.getMessage() );
      }
      return true;
    }
    else if( currListName.equalsIgnoreCase( "LEVELS" ) ) {
      return (--levels >= 0);
    }
    else if( oldIterator != null ) {
      return oldIterator.apply( template, i, currListName );
    }
    else {
      return false;
    }
  }
}

java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.