From: <jbo...@li...> - 2005-08-25 12:30:41
|
Author: szimano Date: 2005-08-25 08:30:24 -0400 (Thu, 25 Aug 2005) New Revision: 955 Added: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiSearch.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/FindResultPlugin.java Modified: trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/FileDataSource.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/MediaDataSource.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiEngine.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiType.java trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp Log: search prototype Modified: trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/etc/org/jboss/wiki/WikiTypes.xml 2005-08-25 12:30:24 UTC (rev 955) @@ -33,4 +33,16 @@ <class>org.jboss.wiki.plugins.DiffPlugin</class> </plugin> </wikiType> + <wikiType> + <name>FIND</name> + <class>org.jboss.wiki.plugins.DefaultWikiType</class> + <plugin> + <name>findResult</name> + <class>org.jboss.wiki.plugins.FindResultPlugin</class> + </plugin> + <plugin> + <name>wikiToHtmlTranslator</name> + <class>org.jboss.wiki.plugins.HTMLTranslator</class> + </plugin> + </wikiType> </wikiTypes> \ No newline at end of file Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/FileDataSource.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/FileDataSource.java 2005-08-25 12:30:24 UTC (rev 955) @@ -63,8 +63,7 @@ pathToMedia = fileDSProps.getProperty("pathToMedia"); System.out.println("Path to media is: " + pathToMedia); pathToAttachments = fileDSProps.getProperty("pathToAttachements"); - System.out - .println("Path to attachements is: " + pathToAttachments); + System.out.println("Path to attachements is: " + pathToAttachments); } else { System.err .println("Your properties file lacks of pathToMedia property. It will not run properly ! Please update " @@ -198,16 +197,21 @@ public Properties getPageProps(String pageName) { Properties pageProps = new Properties(); - + try { - pageProps.load(new FileInputStream(new File(pathToMedia + "/OLD/" - + pageName + "/page.properties"))); + FileInputStream fpi = new FileInputStream(new File(pathToMedia + "/OLD/" + + pageName + "/page.properties")); + pageProps.load(fpi); + fpi.close(); } catch (IOException ioe) { - System.err.println("Cannot read page.properties for page: " - + pageName + " file: " + pathToMedia + "/OLD/" + pageName - + "/page.properties\n" + ioe); + //TODO make file structure if this happens + + //System.err.println("Cannot read page.properties for page: " + // + pageName + " file: " + pathToMedia + "/OLD/" + pageName + // + "/page.properties\n" + ioe); return null; } + return pageProps; } @@ -222,7 +226,7 @@ // create dirs for this property file propFile.mkdirs(); } - + propFile = new File(pathToAttachments + "/" + pageName + "-att/" + attName + "-dir/attachment.properties"); @@ -260,8 +264,8 @@ } public WikiPage getPage(String pageName) { - System.out.println("[WIKI:FileDataSource]: Getting new page: " - + pageName); + // System.out.println("[WIKI:FileDataSource]: Getting new page: " + + // pageName); WikiPage page = null; @@ -283,7 +287,7 @@ Credentials author = new Credentials(pageProps .getProperty(String.valueOf(i) + ".author")); - String pageContent = ""; + StringBuilder pageContent = new StringBuilder(); try { FileInputStream input = new FileInputStream(pageFile); @@ -291,19 +295,20 @@ int nextChr = input.read(); while (nextChr != -1) { - pageContent += (char) nextChr; + pageContent.append((char) nextChr); nextChr = input.read(); } } catch (IOException ioe) { System.err.println(ioe); } - page = new WikiPage(pageName, author, pageContent, i, i, - new Date(pageFile.lastModified()), this); + page = new WikiPage(pageName, author, pageContent.toString(), + i, i, new Date(pageFile.lastModified()), this); page.setLength(pageFile.length()); } } + return page; @@ -382,7 +387,7 @@ public void getContentAtVersion(WikiPage page, boolean loadContent, int version) { - String ret = null; + StringBuilder ret = null; File pageFile = new File(pathToMedia + "/OLD/" + page.getName() + "/" + version + ".txt"); @@ -393,14 +398,14 @@ int nextChr = input.read(); - ret = ""; + ret = new StringBuilder(); while (nextChr != -1) { - ret += (char) nextChr; + ret.append((char) nextChr); nextChr = input.read(); } - page.setPageContent(ret); + page.setPageContent(ret.toString()); page.setLength(ret.length()); } catch (IOException ioe) { @@ -439,7 +444,8 @@ } } - public void addAtachement(File attFile, String attName, WikiPage page, String user) { + public void addAtachement(File attFile, String attName, WikiPage page, + String user) { String pageName = page.getName(); Properties attProps = getAttProps(pageName, attName); @@ -491,36 +497,57 @@ System.err.println(e); } } - + // at the end delete the temp file attFile.delete(); - + attProps.setProperty(lastVersion + ".author", user); - + saveAttProps(attProps, pageName, attName); } public Set<String> getAttachementsSet(WikiPage page) { Set<String> attSet = new HashSet<String>(); - - File attDir = new File(pathToAttachments+"/"+page.getName()+"-att"); - + + File attDir = new File(pathToAttachments + "/" + page.getName() + + "-att"); + if (attDir.exists()) { File[] attachements = attDir.listFiles(); - + for (int i = 0; i < attachements.length; i++) { - if ((attachements[i].isDirectory())&&(attachements[i].getName().endsWith("-dir"))) { + if ((attachements[i].isDirectory()) + && (attachements[i].getName().endsWith("-dir"))) { String[] tokens = attachements[i].getName().split("/"); - attSet.add(tokens[tokens.length - 1].substring(0, tokens[tokens.length - 1].length()-4)); + attSet.add(tokens[tokens.length - 1].substring(0, + tokens[tokens.length - 1].length() - 4)); } } - } - else { + } else { // page has no attachements return null; } - + return attSet; } + public Set<String> getAllPageNames() { + Set<String> attSet = new HashSet<String>(); + + File attDir = new File(pathToMedia + "/"); + + File[] pageFiles = attDir.listFiles(); + + for (int i = 0; i < pageFiles.length; i++) { + if ((pageFiles[i].isFile()) + && (pageFiles[i].getName().endsWith(".txt"))) { + String[] tokens = pageFiles[i].getName().split("/"); + attSet.add(tokens[tokens.length - 1].substring(0, + tokens[tokens.length - 1].length() - 4)); + } + } + + return attSet; + } + } Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/MediaDataSource.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/MediaDataSource.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/MediaDataSource.java 2005-08-25 12:30:24 UTC (rev 955) @@ -92,6 +92,8 @@ public void addAtachement(File attFile, String attName, WikiPage page, String user); public Set<String> getAttachementsSet(WikiPage page); + + public Set<String> getAllPageNames(); } Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiEngine.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiEngine.java 2005-08-25 12:30:24 UTC (rev 955) @@ -10,10 +10,12 @@ import java.util.Date; import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; + import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; - /** * * @author <a href="mailto:ds...@jb...">Damon Sicore</a> @@ -39,6 +41,8 @@ private MediaDataSource mediaDataSource; + WikiPage noSuchPage; + /** * <p> * Does ... @@ -69,9 +73,9 @@ // your code here return false; } - + public boolean pageExists(String pageName) { - + return mediaDataSource.pageExists(pageName); } @@ -101,7 +105,7 @@ * @param wikiContext */ public WikiPage getByName(String pageName, WikiContext wikiContext) { - + WikiPage ret = null; if (pages.containsKey(pageName)) { @@ -119,14 +123,26 @@ return ret; } } else { - return null; + try { + ret = (WikiPage) noSuchPage.clone(); + ret.setName(pageName); + } catch (CloneNotSupportedException cne) { + System.err.println(cne); + + } + if (wikiContext != null) { + return wikiContext.process(ret); + } else { + return ret; + } } } - - public WikiPage getByName(String pageName, WikiContext wikiContext, int version) { - + + public WikiPage getByName(String pageName, WikiContext wikiContext, + int version) { + WikiPage ret = null; - + if (pages.containsKey(pageName)) { ret = pages.get(pageName); } else { @@ -134,9 +150,9 @@ pages.put(pageName, ret); } - + ret = ret.getPageAtVersion(true, version); - + if (ret != null) { if (wikiContext != null) { return wikiContext.process(ret); @@ -144,6 +160,18 @@ return ret; } } else { + // return noSuchPage if there isn't any + /*try { + ret = (WikiPage) noSuchPage.clone(); + } catch (CloneNotSupportedException cne) { + System.err.println(cne); + + } + if (wikiContext != null) { + return wikiContext.process(ret); + } else { + return ret; + }*/ return null; } } @@ -161,6 +189,10 @@ pages = new HashMap<String, WikiPage>(); wikiTypes = new HashMap<String, WikiType>(); + noSuchPage = new WikiPage("", new Credentials(""), + "There is no such page. Click on EDIT to start it.", 0, 0, + null, mediaDataSource); + loadWikiTypes(); } @@ -175,7 +207,7 @@ protected void loadWikiTypes() { try { wikiTypes.clear(); - + SAXParser sp = (SAXParserFactory.newInstance()).newSAXParser(); sp.parse( WikiTypeHandler.class.getResourceAsStream("WikiTypes.xml"), @@ -300,11 +332,32 @@ System.out.println(wp.getContent()); } - + public void refreshPage(String pageName) { if (pages.containsKey(pageName)) { pages.remove(pageName); } } + public Set<String> findPages(String searchQuery) { + System.out.println("Starting search: " + searchQuery); + WikiSearch wikiSearch = new WikiSearch(searchQuery); + + Set<String> resPages = new TreeSet<String>(); + + Set<String> pages = getMediaDataSource().getAllPageNames(); + + for (String name : pages) { + WikiPage temp = getByName(name, null); + if (temp != null) { + if (wikiSearch.matches(temp.getPageContent().toLowerCase())) { + resPages.add(name); + } + } + } + + System.out.println("Search completed"); + return resPages; + } + } Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-08-25 12:30:24 UTC (rev 955) @@ -14,6 +14,7 @@ import java.util.Iterator; import java.util.List; import java.util.Properties; +import java.util.Set; import javax.portlet.*; import org.jboss.portlet.*; @@ -111,6 +112,21 @@ } } + if (rReq.getParameter("page") != null) { + rResp.setRenderParameter("page", rReq.getParameter("page")); + + } + + if (rReq.getParameter("searchQuery") != null) { + //TODO do it man ! + Set<String> pages = wikiEngine.findPages(rReq.getParameter("searchQuery")); + + rReq.getPortletSession().setAttribute("findResult", pages); + + // show the results + rResp.setRenderParameter("page", "FindResult"); + } + if (rReq.getParameter("action") != null) { rResp.setRenderParameter("action", rReq.getParameter("action")); } @@ -126,11 +142,6 @@ rResp.setRenderParameter("version", rReq.getParameter("version")); } - if (rReq.getParameter("page") != null) { - rResp.setRenderParameter("page", rReq.getParameter("page")); - - } - if (rReq.getParameter("editAction") != null) { System.out.println("EDITING PAGE"); Added: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiSearch.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiSearch.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiSearch.java 2005-08-25 12:30:24 UTC (rev 955) @@ -0,0 +1,77 @@ +package org.jboss.wiki; + +import java.util.StringTokenizer; +import java.util.Vector; + +public class WikiSearch { + Vector<String> requestTokens; + Vector<String> forbiddenTokens; + Vector<String> requiredTokens; + + public WikiSearch(String searchQuery) { + requestTokens = new Vector<String>(); + forbiddenTokens = new Vector<String>(); + requiredTokens = new Vector<String>(); + + StringTokenizer st = new StringTokenizer( searchQuery, " \t," ); + + + // + // Parse incoming search string + // + + while( st.hasMoreTokens() ) + { + String token = st.nextToken().toLowerCase(); + + + switch( token.charAt(0) ) + { + case '+': + token = token.substring(1); + requiredTokens.add(token); + break; + + case '-': + token = token.substring(1); + forbiddenTokens.add(token); + break; + + default: + requestTokens.add(token); + break; + } + } + } + + public boolean matches(String content) { + for (int i = 0; i < forbiddenTokens.size(); i++) { + if (content.indexOf(forbiddenTokens.get(i)) != -1) { + // there is forbidden token + return false; + } + } + + for (int i = 0; i < requiredTokens.size(); i++) { + if (content.indexOf(requiredTokens.get(i)) == -1) { + // lack of one of the required tokens + return false; + } + } + + if (requiredTokens.size() > 0) { + // there is at least one requirted token and it has been found + return true; + } + + for (int i = 0; i < requestTokens.size(); i++) { + if (content.indexOf(requestTokens.get(i)) != -1) { + // found at least one required token + return true; + } + } + + // didn't found anything that fits + return false; + } +} Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiType.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiType.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiType.java 2005-08-25 12:30:24 UTC (rev 955) @@ -86,6 +86,7 @@ System.out.println("cannot clone the page: " + cnse); } + // execute the plugins for (int i = 0; i < plugins.size(); i++) { System.out.println("Executing plugin: "+plugins.get(i).getName()); newPage = (plugins.get(i)).process(newPage, wikiSession); Added: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/FindResultPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/FindResultPlugin.java 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/FindResultPlugin.java 2005-08-25 12:30:24 UTC (rev 955) @@ -0,0 +1,45 @@ +package org.jboss.wiki.plugins; + +import java.util.Set; + +import org.jboss.wiki.WikiPage; +import org.jboss.wiki.WikiPlugin; +import org.jboss.wiki.WikiSession; + +public class FindResultPlugin extends WikiPlugin { + + @Override + public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) { + WikiPage newPage = null; + + try { + newPage = (WikiPage) wikiPage.clone(); + } catch (CloneNotSupportedException cl) { + System.err.println(cl); + } + + Set<String> pages = (Set<String>) wikiSession + .getAttribute("findResult"); + + StringBuilder pageStr = new StringBuilder("!!!__Find results:__\n"); + + if (pages.size() == 0) { + pageStr.append("''NONE FOUND''"); + } else { + for (String p : pages) { + pageStr.append("[").append(p).append("]").append("\\\\\n"); + } + } + + newPage.setPageContent(pageStr.toString()); + + return newPage; + } + + @Override + public void init() { + // TODO Auto-generated method stub + + } + +} Modified: trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-08-24 22:14:20 UTC (rev 954) +++ trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-08-25 12:30:24 UTC (rev 955) @@ -13,6 +13,7 @@ String wikiPage = (String)request.getAttribute("wikiPage"); String defaultPage = (String)request.getAttribute("defaultPage"); String firendlyLink = (String)request.getAttribute("firendlyLink"); + String type = (String)request.getParameter("type"); java.util.Date editDate = (java.util.Date)request.getAttribute("editDate"); org.jboss.wiki.Credentials author = (org.jboss.wiki.Credentials)request.getAttribute("author"); %> @@ -21,7 +22,7 @@ <!--<a href="<%=actionURL%>&page=<%=defaultPage%>"><%=defaultPage%></a><br />--> -<!--<form method="post" action="<%=actionURL%>">--> +<form method="post" action="<%=actionURL%>&type=FIND"> <table style="width: 100%" border="0"> <tr style="vertical-align: bottom;"> <td style="vertical-align: bottom; align-bottom: 0px;"> @@ -34,24 +35,30 @@ String logedIn = (String)request.getAttribute("logedIn"); - if (logedIn.equals("true")) { - out.print("<a href='"+actionURL+"&action=Edit&page="+wikiPage+"'><img alt=\"EDIT\" src=\"/file-access/default/members/jbosswiki/images/editButton.png\"</img></a>\n"+ - "<a href=\""+actionURL+"&action=Attach\"><img alt=\"ATTACH\" src=\"/file-access/default/members/jbosswiki/images/attachButton.png\"</img></a>"); - + if ((type == null)||(type.equals("HTML"))) { + if (logedIn.equals("true")) { + out.print("<a href='"+actionURL+"&action=Edit&page="+wikiPage+"'><img alt=\"EDIT\" src=\"/file-access/default/members/jbosswiki/images/editButton.png\"</img></a>\n"+ + "<a href=\""+actionURL+"&action=Attach\"><img alt=\"ATTACH\" src=\"/file-access/default/members/jbosswiki/images/attachButton.png\"</img></a>"); + + } + else { + out.print("<div style='font-size: xx-small'><i>Login to edit pages and attach files</i></div>"); + } } - else { - out.print("<div style='font-size: xx-small'><i>Login to edit pages and attach files</i></div>"); - } %> - <a href="<%=actionURL%>&action=Info&page=<%=wikiPage%>"><img alt="HISTORY" src="/file-access/default/members/jbosswiki/images/historyButton.png"</img></a><br /> -<!--<input type="text" name="page" /> -<input type="submit" value="GO" />--> +<% +if ((type == null)||(type.equals("HTML"))) { + out.println("<a href=\""+actionURL+"&action=Info&page="+wikiPage+"\"><img alt=\"HISTORY\" src=\"/file-access/default/members/jbosswiki/images/historyButton.png\"</img></a><br />"); + } + %> +<input type="text" name="searchQuery" /> +<input type="submit" value="SEARCH" /> </td> </tr> </table> -<!--</form>--> +</form> <hr /> @@ -86,9 +93,9 @@ } %> -<table style="width: 100%"> -<tr> -<td class="wikiContent"><%=wikiContent%><td> +<table style="width: 100%; margin: 0px; padding: 0px;"> +<tr style="width: 100%; margin: 0px; padding: 0px;"> +<td style="width: 100%; margin: 0px; padding: 0px;"><%=wikiContent%><td> </tr> <tr> <td class="wikiFooter"> @@ -101,5 +108,10 @@ </tr> </table> <br /> -<div class="author">The page last changed on <%=editDate%> by <%=author%>. </div> +<% +if ((type == null)||(type.equals("HTML"))) { + out.println("<div>The page last changed on "+editDate+" by "+author+". </div>"); +} +%> + |