KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > webman > mainint > db > SearchListIterator


1 package com.teamkonzept.webman.mainint.db;
2
3 import com.teamkonzept.lib.TKListIterator;
4 import com.teamkonzept.db.TKUnprepQuery;
5 import com.teamkonzept.db.TKDBManager;
6 import com.teamkonzept.db.QueryConstants;
7 import com.teamkonzept.lib.TKTemplate;
8
9
10 /**
11  * ein Listiterator für die Klassen : TKDBGetOneNodeContentSearch,TKDBGetWholetreeContentSearch
12  * Dieser Listiterator representiert die Template-Variable
13  * SEARCH_STRING; es wird pro Element &lt;TK:SEARCH&gt; und &lt;TK:CONN&gt; ausgegeben <br>
14  *
15  * Note that two formats of &lt;TK:SEARCH&gt; tag exist. <br>
16  * <ul>
17  * <li>Sybase (non-Oracle): '%searchpattern%'</li>
18  * <li>Oracle: searchpattern (without enclosing "%" and "'", respectively)</li>
19  * </ul>
20  *
21  * @author $Author: sebastian $
22  * @version $Revision: 1.4 $
23  */

24 public class SearchListIterator implements TKListIterator
25 {
26     private java.util.Vector JavaDoc data;
27     private String JavaDoc listname;
28     private TKUnprepQuery query;
29         
30     /* konvertiert den suchenparameter nach sql-Format */
31     
32     private static String JavaDoc konvSearchParameter(String JavaDoc search)
33     {
34         if (search == null)
35             return(null);
36         if (search.length() == 0)
37             return(search);
38         
39         StringBuffer JavaDoc sb = new StringBuffer JavaDoc(search);
40         
41         int i = sb.length() - 1;
42         while (i >= 0)
43         {
44             if ((sb.charAt(i) == '%') || (sb.charAt(i) == '_') || (sb.charAt(i) == '\\'))
45                 sb.insert(i,'\\');
46             
47             i--;
48         }
49         return( '%' + sb.toString() + '%');
50     }
51     
52     /* für Suche : bastelt aus dem übergebenen Suchstring
53        einen Vektor, der die Suchwerte mit den dazugehörigen
54        Verknüpfungen enthählt (OR,AND)
55     */

56     
57     private static java.util.Vector JavaDoc getSearchParameter(String JavaDoc search)
58     {
59         if (search == null)
60             return null;
61         
62         java.util.Vector JavaDoc back = new java.util.Vector JavaDoc();
63         String JavaDoc[] stringarray = new String JavaDoc[2];
64         int pre = 0;
65         int i;
66         for (i = 0;i < search.length();i++)
67         {
68             if (search.startsWith(" OR ",i) || search.startsWith(" AND ",i))
69             {
70                 stringarray[0] = search.substring(pre, i );
71                 if (search.startsWith(" OR ",i))
72                 {
73                     pre = i + 4;
74                     stringarray[1] = "OR";
75                 }
76                 else
77                 {
78                     pre = i + 5;
79                     stringarray[1] = "AND";
80                 }
81                 if (stringarray[0] != null)
82                 {
83                     if (stringarray[0].length() != 0)
84                         back.add(new String JavaDoc[] {stringarray[0],stringarray[1]});
85                 }
86             }
87         }
88         if (pre != i)
89             back.add(new String JavaDoc[] {search.substring(pre, i), ""});
90             
91         if (back.isEmpty())
92             return(null);
93         else
94             return(back);
95     }
96         
97     public SearchListIterator(String JavaDoc data, String JavaDoc listname, TKUnprepQuery query)
98     {
99         this.data = getSearchParameter( data );
100         this.listname = listname;
101         this.query = query;
102     }
103
104     public boolean apply(TKTemplate t, int count, String JavaDoc type)
105     {
106         if ( this.listname.equalsIgnoreCase( type ) )
107         {
108             if (count >= data.size() )
109                 return(false);
110                 
111             String JavaDoc[] help = (String JavaDoc[])this.data.elementAt( count );
112             String JavaDoc h = "";
113             try
114             {
115                 h = query.convert( "SEARCH_UNC", new String JavaDoc(help[0]));
116                 t.set( "SEARCH_UNC", h);
117                 h = query.convert( "SEARCH", new String JavaDoc(konvSearchParameter(help[0])));
118                 t.set( "SEARCH", h);
119             }
120             catch(Exception JavaDoc e)
121             {
122                 h = ""; // für JTest
123
}
124             t.set("CONN",new String JavaDoc(help[1]));
125             return(true);
126         }
127         return(false);
128     }
129 }
130
Popular Tags