|
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>");
+}
+%>
+
|