KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > mainint > TKOpenSiteTreeIterator


1 package com.teamkonzept.webman.mainint;
2
3 import com.teamkonzept.lib.*;
4 import de.webman.sitetree.eventhandler.SiteTreeUtils;
5 import java.util.*;
6
7 /**
8  * Iterator fuer die Navigationsanzeige im Sitetree
9  * @author $Author: alex $
10  * @version $Revision: 1.8 $
11 */

12 public class TKOpenSiteTreeIterator implements TKListIterator {
13
14     TKListIterator oldIterator;
15     String JavaDoc listName;
16     TKDBResult dbResult;
17     int lastLeft = -1;
18     int lastRight = -1;
19     int destId = -1;
20     Stack parents;
21     int level;
22     int levels = 0;
23     int maxlevels;
24     
25     public TKOpenSiteTreeIterator( TKDBResult dbResult, TKListIterator oldIterator, String JavaDoc listName, int maxlevels )
26     {
27         this.oldIterator = oldIterator;
28         this.listName = listName;
29         this.dbResult = dbResult;
30         this.parents = new Stack();
31         this.level = 0;
32         this.maxlevels = maxlevels;
33     }
34     
35     public TKOpenSiteTreeIterator( TKDBResult dbResult, TKListIterator oldIterator, String JavaDoc listName, int destId, int maxlevels )
36     {
37         this.oldIterator = oldIterator;
38         this.listName = listName;
39         this.dbResult = dbResult;
40         this.destId = destId;
41         this.parents = new Stack();
42         this.level = 0;
43         this.maxlevels = maxlevels;
44     }
45     
46     public boolean apply( TKTemplate template, int i, String JavaDoc currListName )
47     {
48         if( currListName.equalsIgnoreCase( listName ) )
49         {
50             if( i >= dbResult.size() )
51             {
52                 if( !parents.empty() ) parents.pop();
53                 level = 0;
54                 lastLeft = -1;
55                 lastRight = -1;
56                 return false;
57             }
58             TKDBResultRow resultRow = (TKDBResultRow)(dbResult.get( i ));
59             if( !TKDBTemplate.prepareTemplate( resultRow,template ) ) return false;
60             try {
61                 int myId = Integer.parseInt( (String JavaDoc) resultRow.getColumn( "SITE_NODE_ID" ) );
62                 // vollstaendigen Pfad ins Template
63
String JavaDoc path = SiteTreeUtils.getCurrentPath(new Integer JavaDoc(myId));
64                 template.set("PATH", path);
65                 if( destId != -1 && myId == destId ) {
66                     template.set( "IS_DESTINATION", Boolean.TRUE );
67                 }
68                 int thisLeft = Integer.parseInt( (String JavaDoc) resultRow.getColumn( "LEFT_NR" ) );
69                 int thisRight = Integer.parseInt( (String JavaDoc) resultRow.getColumn( "RIGHT_NR" ) );
70                 String JavaDoc tmp = (String JavaDoc) resultRow.getColumn( "SITE_NODE_PARENT" );
71                 int thisParent = ( tmp == null || tmp.equals("") )?myId:Integer.parseInt( tmp );
72                 
73                 String JavaDoc nodeId = (String JavaDoc) resultRow.getColumn( "NODE_ID" );
74                 int thisPar = ( nodeId.equals("") )?myId+1:Integer.parseInt( nodeId );
75                 if( nodeId.equals("") ) {
76                     template.set( "IS_LEAF", Boolean.TRUE );
77                 }
78                 else if( thisPar == myId ) {
79                     template.set( "IS_CLOSED", Boolean.TRUE );
80                 }
81                 else {
82                     template.set( "IS_OPEN", Boolean.TRUE );
83                 }
84
85                 if( i == 0 ) template.set( "IS_ROOT", Boolean.TRUE );
86                 if( thisLeft > lastLeft && thisRight < lastRight ) {
87                     parents.push( new Integer JavaDoc( thisParent ) );
88                     level++;
89                 }
90                 else if( !parents.empty() ) {
91                     // wenn der oberste parent im stack gleich dem aktuellen parent, dann gleiche ebene
92
// und nix tun
93
// wenn der aktuelle parent tiefer im stack liegt, dann entspr. viele ebenen zurueck und
94
// level neu setzen
95
if( !(parents.peek().equals( new Integer JavaDoc (thisParent))) ) {
96                         while( !parents.empty() ) {
97                             if( parents.pop().equals( new Integer JavaDoc( thisParent )) ) {
98                                 parents.push( new Integer JavaDoc( thisParent ) );
99                                 break;
100                             }
101                             level--;
102                         }
103                     }
104                 }
105                 levels = level;
106                 template.set( "LEVEL", new Integer JavaDoc( level ) );
107                 template.set( "CURR_COLSPAN", new Integer JavaDoc( maxlevels-level+1 ) );
108                 lastLeft = thisLeft;
109                 lastRight = thisRight;
110             }
111             catch ( Throwable JavaDoc th ) {
112                 throw new Error JavaDoc( th.getMessage() );
113             }
114             return true;
115         }
116         else if( currListName.equalsIgnoreCase( "LEVELS" ) ) {
117             return (--levels >= 0);
118         }
119         else if( oldIterator != null ) {
120             return oldIterator.apply( template, i, currListName );
121         }
122         else {
123             return false;
124         }
125     }
126 }
127
128
Popular Tags