%@page language="java"%>
<%@ page import="java.util.Vector" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="java.util.Vector" %>
<%@ page import="java.util.StringTokenizer" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="ab.website.WebTools" %>
<%@ page import="ab.website.Friends" %>
www.AsoBrain.com
Friends - Search for Episode
<% WebTools wt = WebTools.get( request , pageContext );
String keywords = wt.getQuery( "keywords" );
if ( keywords == null ) keywords = "";
%>
<% if ( keywords.length() > 0 )
{
Hashtable found = new Hashtable();
Hashtable count = new Hashtable();
int maxCount = 0;
Vector allkeywords = new Vector();
StringTokenizer tokenizer = new StringTokenizer( keywords , " " );
while( tokenizer.hasMoreTokens() )
{
String token = tokenizer.nextToken();
if ( token.equalsIgnoreCase( "the" ) || token.equalsIgnoreCase( "in" ) || token.equalsIgnoreCase( "and" ) )
continue;
allkeywords.addElement( token );
Friends[] matches = (Friends[])wt.query( Friends.class , "SELECT * FROM Friends WHERE name LIKE '%"+token+"%' OR content LIKE '%"+token+"%' OR keywords LIKE '%"+token+"%' ORDER BY episode ASC");
for ( int i = 0 ; i < matches.length ; i++ )
{
String key = ""+matches[i].season+"."+matches[i].episode;
int c = 0;
if ( !found.containsKey( key ) )
{
found.put( key , matches[i] );
count.put( key , new Integer( 1 ) );
c = 1;
}
else
{
c = ((Integer)count.get( key )).intValue()+1;
count.remove( key );
count.put( key , new Integer( c ) );
}
maxCount = Math.max( maxCount , c );
}
}
Vector resultVector = new Vector();
Enumeration e = found.keys();
while( e.hasMoreElements() )
{
String key = (String)e.nextElement();
Friends f = (Friends)found.get( key );
int c = ((Integer)count.get( key )).intValue();
if ( c < maxCount )
continue;
resultVector.addElement( f );
}
if ( found.size() == 0 )
out.println( "No episodes found for that search string.
" );
else
out.println( "Found " + resultVector.size() + " episode(s) in which " + maxCount + " of the keywords were found:
" );
Friends[] result = new Friends[ resultVector.size() ];
for ( int w = 0 ; w < result.length ; w++ )
result[w] = (Friends)resultVector.elementAt( w );
Arrays.sort( result );
int pagesize = 5;
String pageString = wt.getQuery( "page" );
int p = pageString != null && pageString.length() > 0 ? new Integer( pageString ).intValue() : 0;
int pageCount = (int)Math.min( Math.ceil( (float)result.length / (float)pagesize ) , 10 );
if ( pageCount > 1 )
{
out.print( "" );
out.print( "| Page: | " );
if ( p > 0 )
{
out.print( "" );
out.print( "< | " );
}
for ( int cp = 0 ; cp < pageCount ; cp++ )
{
out.print( "" );
out.print( ""+(cp+1)+" | " );
}
if ( (p+1) < pageCount )
{
out.print( "" );
out.print( "> | " );
}
out.print( "
" );
out.println( "
" );
}
for ( int w = p*pagesize ; w < (p+1)*pagesize && w < result.length; w++ )
{
Friends f = result[w];
out.println( "" );
String se = f.season+"."+f.episode;
if ( se.length() < 4 ) se+=" ";
if ( se.length() < 5 ) se+=" ";
out.println( "
"+se+" |
" );
out.println( "" );
String content = f.content;
for ( int i = 0 ; i < allkeywords.size() ; i++ )
{
String kw = (String)allkeywords.elementAt( i );
content = wt.hilite( content , kw );
}
out.println( content );
if ( f.keywords != null && f.keywords.length() > 0 )
out.println( "
Keywords: " + f.keywords );
out.println( " |
" );
}
if ( pageCount > 1 )
{
out.print( "" );
out.print( "| Page: | " );
if ( p > 0 )
{
out.print( "" );
out.print( "< | " );
}
for ( int cp = 0 ; cp < pageCount ; cp++ )
{
out.print( "" );
out.print( ""+(cp+1)+" | " );
}
if ( (p+1) < pageCount )
{
out.print( "" );
out.print( "> | " );
}
out.print( "
" );
out.println( "
" );
}
}
%>