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

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

import com.teamkonzept.lib.*;
import java.util.*;

/** 
 * Dieser Iterator wird benutzt um einen Content Tree zu rendern.  Er
 * bercksichtigt dabei, ob ein Knoten geffnet oder geschlossen ist und
 * stellt die ntigen Templateinformationen zur Verfgung um die Liste der
 * Contents baumartig darstellen zu knnen.
 *
 * @author alex (?)
 * @version $Revision: 1.8 $
 **/
public class TKOpenContentTreeIterator 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 TKOpenContentTreeIterator( 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 TKOpenContentTreeIterator( 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.clear();
        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( "CONTENT_NODE_ID" ) );
        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( "CONTENT_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 );
        
        String nodeType =  (String) resultRow.getColumn( "CONTENT_NODE_TYPE" );
        if(nodeType != null && nodeType.equals(DatabaseDefaults.GROUP)) {
          template.set( "IS_GROUP", Boolean.TRUE );
        }        

        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.