From 1ce75d2da8beb77cb6ff06195942cb26389a0b0f Mon Sep 17 00:00:00 2001 From: Erik Forkalsrud Date: Sat, 23 Oct 2010 16:36:13 -0700 Subject: [PATCH] Adding search box, make searches case insensitive --- .../java/org/forkalsrud/album/exif/DirectoryEntry.java | 7 ++++++- src/main/java/org/forkalsrud/album/exif/Entry.java | 5 +++++ .../org/forkalsrud/album/exif/EntryWithChildren.java | 8 ++++---- .../java/org/forkalsrud/album/exif/SearchEngine.java | 3 ++- .../java/org/forkalsrud/album/exif/SearchResults.java | 7 ++++++- src/main/java/org/forkalsrud/album/web/AlbumServlet.java | 9 ++++----- src/main/webapp/WEB-INF/velocity/photo.vm | 7 ++++++- 7 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java b/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java index 3eaea46..ab1e9a4 100644 --- a/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java +++ b/src/main/java/org/forkalsrud/album/exif/DirectoryEntry.java @@ -21,7 +21,7 @@ import org.forkalsrud.album.db.DirectoryProps; /** * @author knut */ -public class DirectoryEntry extends EntryWithChildren { +public class DirectoryEntry extends EntryWithChildren { final static String CACHE_FILE = "cache.properties"; final static String OVERRIDE_FILE = "album.properties"; @@ -195,4 +195,9 @@ public class DirectoryEntry extends EntryWithChildren { loadChildren(); return earliest; } + + @Override + public boolean groupByYear() { + return parent == null; + } } diff --git a/src/main/java/org/forkalsrud/album/exif/Entry.java b/src/main/java/org/forkalsrud/album/exif/Entry.java index 022b4ca..c7353d5 100644 --- a/src/main/java/org/forkalsrud/album/exif/Entry.java +++ b/src/main/java/org/forkalsrud/album/exif/Entry.java @@ -116,4 +116,9 @@ public abstract class Entry { public Date getEarliest() { return getDate(); } + + + public boolean groupByYear() { + return false; + } } diff --git a/src/main/java/org/forkalsrud/album/exif/EntryWithChildren.java b/src/main/java/org/forkalsrud/album/exif/EntryWithChildren.java index 03c350e..bee3996 100644 --- a/src/main/java/org/forkalsrud/album/exif/EntryWithChildren.java +++ b/src/main/java/org/forkalsrud/album/exif/EntryWithChildren.java @@ -11,9 +11,9 @@ import java.util.List; * @author knut * */ -public class EntryWithChildren extends Entry { +public class EntryWithChildren extends Entry { - protected List children = new ArrayList(); + protected List children = new ArrayList(); protected EntryWithChildren(Entry root) { super(root); @@ -46,12 +46,12 @@ public class EntryWithChildren extends Entry { } } - public List getContents() { + public List getContents() { return children; } - public void addContents(Entry entry) { + public void addContents(T entry) { children.add(entry); } diff --git a/src/main/java/org/forkalsrud/album/exif/SearchEngine.java b/src/main/java/org/forkalsrud/album/exif/SearchEngine.java index a87bc8a..8c01f52 100644 --- a/src/main/java/org/forkalsrud/album/exif/SearchEngine.java +++ b/src/main/java/org/forkalsrud/album/exif/SearchEngine.java @@ -22,6 +22,7 @@ public class SearchEngine { DirectoryEntry next = queue.removeFirst(); processDirectory(next, query); } + results.sort(); results.fillLinkedList(); return results; } @@ -52,7 +53,7 @@ public class SearchEngine { } boolean isMatch(String candidate, String query) { - return candidate != null && candidate.indexOf(query) >= 0; + return candidate != null && candidate.toUpperCase().contains(query.toUpperCase()); } } diff --git a/src/main/java/org/forkalsrud/album/exif/SearchResults.java b/src/main/java/org/forkalsrud/album/exif/SearchResults.java index 14db095..78ef29d 100644 --- a/src/main/java/org/forkalsrud/album/exif/SearchResults.java +++ b/src/main/java/org/forkalsrud/album/exif/SearchResults.java @@ -1,11 +1,12 @@ package org.forkalsrud.album.exif; import java.io.File; +import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -public class SearchResults extends EntryWithChildren { +public class SearchResults extends EntryWithChildren { protected HashMap dupes = new HashMap(); Comparator sort = new Comparator() { @@ -34,6 +35,10 @@ public class SearchResults extends EntryWithChildren { } } + public void sort() { + Collections.sort(children, sort); + } + } diff --git a/src/main/java/org/forkalsrud/album/web/AlbumServlet.java b/src/main/java/org/forkalsrud/album/web/AlbumServlet.java index 83ecb7a..91120e4 100644 --- a/src/main/java/org/forkalsrud/album/web/AlbumServlet.java +++ b/src/main/java/org/forkalsrud/album/web/AlbumServlet.java @@ -187,6 +187,9 @@ public class AlbumServlet String pathInfo = req.getPathInfo(); if (pathInfo != null && pathInfo.startsWith(basePrefix)) { pathInfo = pathInfo.substring(basePrefix.length()); + } else if (pathInfo.equals("/search")) { + handleSearch(req, res, (DirectoryEntry)resolveEntry("/")); + return; } else { res.sendError(HttpServletResponse.SC_NOT_FOUND, "pathinfo=" + pathInfo); return; @@ -210,11 +213,6 @@ public class AlbumServlet return; } - if (pathInfo.endsWith(".search")) { - pathInfo = pathInfo.substring(0, pathInfo.length() - ".search".length()); - handleSearch(req, res, (DirectoryEntry)resolveEntry(pathInfo)); - return; - } File file = new File(base, pathInfo); if (!file.canRead()) { @@ -299,6 +297,7 @@ public class AlbumServlet SearchResults results = search.search(query); res.setContentType("text/html"); + req.setAttribute("search", query); req.setAttribute("entry", results); req.setAttribute("thmb", new Integer(250)); req.setAttribute("full", new Integer(800)); diff --git a/src/main/webapp/WEB-INF/velocity/photo.vm b/src/main/webapp/WEB-INF/velocity/photo.vm index b735121..1ad8877 100644 --- a/src/main/webapp/WEB-INF/velocity/photo.vm +++ b/src/main/webapp/WEB-INF/velocity/photo.vm @@ -27,6 +27,10 @@ h1 { text-align: left; } + form { + float: right; + display: inline; + } h2 { margin-left: 30px; text-align: left; @@ -89,6 +93,7 @@ $(document).ready(function() { +
#macro(navlink $entry)${base}$mapper.map(${entry.getPath()}).#if($entry.isFile())photo#{else}album#end#end #macro(navbutton $entry $direction)#if($entry)#else#end#end

#navbutton(${entry.prev()} "left")#navbutton(${entry.parent()} "up")#navbutton(${entry.next()} "right") $entry.name

@@ -100,7 +105,7 @@ $(document).ready(function() { #set($thpath = $mapper.map(${en.thumbnail.getPath()})) #set($cdate = ${en.earliest}) #set($cyr = $mapper.year($cdate)) -#if($cyr != $yr && !${entry.parent()}) +#if($cyr != $yr && ${entry.groupByYear()}) #set($yr = $cyr)

$yr

#end