From: <jbo...@li...> - 2005-08-16 16:07:03
|
Author: szimano Date: 2005-08-16 12:06:49 -0400 (Tue, 16 Aug 2005) New Revision: 865 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/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/WikiPage.java trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPlugin.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/plugins/HTMLTranslator.java trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp Log: some changes 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-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/FileDataSource.java 2005-08-16 16:06:49 UTC (rev 865) @@ -90,6 +90,8 @@ } public WikiPage getPage(String pageName) { + System.out.println("[WIKI:FileDataSource]: Getting new page: "+pageName); + WikiPage page = null; File pageFile = new File(pathToMedia + "/" + pageName + ".txt"); @@ -252,4 +254,15 @@ } } + public boolean pageExists(String pageName) { + File pageFile = new File(pathToMedia + "/" + pageName + ".txt"); + + if (pageFile.exists()) { + return true; + } + else { + return false; + } + } + } 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-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/MediaDataSource.java 2005-08-16 16:06:49 UTC (rev 865) @@ -71,6 +71,8 @@ public WikiPage getPageAtVersion(String pageName, String languageCode, int version); public WikiPage getPageAtVersion(String pageName, int version); + + public boolean pageExists(String pageName); } 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-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiEngine.java 2005-08-16 16:06:49 UTC (rev 865) @@ -88,6 +88,11 @@ // your code here return false; } + + public boolean pageExists(String pageName) { + + return false; + } /** * <p> @@ -115,9 +120,7 @@ * @param wikiContext */ public WikiPage getByName(String pageName, WikiContext wikiContext) { - - // TODO: make user authentication with wikiContext - + WikiPage ret = null; if (pages.containsKey(pageName)) { @@ -128,10 +131,14 @@ pages.put(pageName, ret); } - if (wikiContext != null) { - return wikiContext.process(ret); + if (ret != null) { + if (wikiContext != null) { + return wikiContext.process(ret); + } else { + return ret; + } } else { - return ret; + return null; } } Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPage.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPage.java 2005-08-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPage.java 2005-08-16 16:06:49 UTC (rev 865) @@ -9,6 +9,7 @@ package org.jboss.wiki; import java.io.Serializable; +import java.util.Calendar; import java.util.Date; import java.util.HashMap; @@ -32,9 +33,13 @@ */ private static final long serialVersionUID = 1L; + /* number of minutes after which page lock will expire */ + private static final int LOCK_TIME = 30; + private Date lockTime = null; - + private String lockUser; + /** * <p> * Represents ... @@ -315,12 +320,47 @@ getPageContent(), getLastVersion(), getEditDate()); return clonedPage; } - + + public void unlock(User user) { + System.out.println("UNLOCK: "+user.getUserName()+" save user: "+lockUser); + if ((user.getUserName()).equals(lockUser)) { + System.out.println("Unlocking page"); + lockTime = null; + lockUser = null; + } + } + public Date lock(User user) { - Date lockTime = null; - - //if - return lockTime; + Date now = new Date(); + Date expDate = null; + Date retDate = lockTime; + + if (this.lockTime != null) { + // lets calculete expire date of current lock + + Calendar calExpireDate = Calendar.getInstance(); + calExpireDate.setTime(this.lockTime); + calExpireDate.add(Calendar.MINUTE, LOCK_TIME); + expDate = calExpireDate.getTime(); + + if (expDate.before(now)) { + // lock expired. take it out + lockTime = null; + lockUser = null; + } + } + + if (this.lockTime == null) { + System.out.println("LOCK: "+user.getUserName()); + + // page isn't locked or lock expired. Lets lock it. + this.lockTime = now; + this.lockUser = user.getUserName(); + System.out.println("LOCK: "+lockUser); + retDate = null; + } + + return retDate; } public String getLockUser() { Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPlugin.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPlugin.java 2005-08-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPlugin.java 2005-08-16 16:06:49 UTC (rev 865) @@ -33,7 +33,7 @@ * @return * @param content */ - public abstract WikiPage process(WikiPage wikiPage); + public abstract WikiPage process(final WikiPage wikiPage); /** * <p>Does ...</p> 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-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-08-16 16:06:49 UTC (rev 865) @@ -16,8 +16,9 @@ import org.jboss.portlet.*; /** - * The WikiPortlet.<p> - * + * The WikiPortlet. + * <p> + * * @author <a href="mailto:ds...@jb...">Damon Sicore</a> * @author <a href="mailto:tom...@jb...">Tomasz Szimanski</a> * @version $Id$ @@ -36,21 +37,28 @@ } public void processAction(JBossActionRequest rReq, JBossActionResponse rResp) { - - WikiContext wikiContext = new WikiContext(rReq.getUser(), wikiEngine.getWikiType("HTML")); - + + WikiContext wikiContext = new WikiContext(rReq.getUser(), wikiEngine + .getWikiType("HTML")); + if (rReq.getParameter("action") != null) { rResp.setRenderParameter("action", rReq.getParameter("action")); } if (rReq.getParameter("page") != null) { rResp.setRenderParameter("page", rReq.getParameter("page")); - + } if (rReq.getParameter("editAction") != null) { System.out.println("EDITING PAGE"); + // unlock page + WikiPage edPage = wikiEngine.getByName((String) rReq + .getParameter("editedPage"), wikiContext); + + edPage.unlock(rReq.getUser()); + // saving, previewing or canceling if (rReq.getParameter("editAction").equals("Save")) { @@ -60,8 +68,6 @@ System.out.println("SAVING PAGE"); // save the page - WikiPage edPage = wikiEngine.getByName(rReq - .getParameter("editedPage"), wikiContext); if (edPage == null) { edPage = new WikiPage(rReq.getParameter("editedPage"), @@ -89,51 +95,79 @@ public void doView(JBossRenderRequest rReq, JBossRenderResponse rRes) throws PortletException, java.io.IOException { + + WikiPage noSuchPage = new WikiPage("", new Credentials(""), "There is no such page. Click on EDIT to start it.", 0, null); String page = "Wiki.jsp"; - + String wikiPage = defaultPage; - + WikiPage pageToShow = null; - - WikiContext wikiContext = null ; - + + WikiContext wikiContext = null; + if (rReq.getParameter("page") != null) { wikiPage = rReq.getParameter("page"); } - + if ((rReq.getParameter("action") != null) - && (rReq.getParameter("action").equals("Edit"))) { + && (rReq.getParameter("action").equals("Edit")) + && (rReq.getUser() != null)) { page = "Edit.jsp"; + pageToShow = wikiEngine.getByName(wikiPage, wikiContext); - + + if (pageToShow == null) { + // start editing new page + // wikiPage = defaultPage; + + pageToShow = new WikiPage(wikiPage, new Credentials(rReq + .getUser().getUserName()), "", 0, new Date()); + // wikiEngine.getByName(wikiPage, wikiContext); + } + Date dateLock = pageToShow.lock(rReq.getUser()); - + if (dateLock != null) { - + rReq + .setAttribute( + "lockMsg", + "Page is locked by " + + pageToShow.getLockUser() + + " from " + + dateLock + + ".<br> I won't stop you from saving, but you or he can erease each other changes. Lock will expire: "); } - + } else { page = "Wiki.jsp"; - wikiContext = new WikiContext(rReq.getUser(), wikiEngine.getWikiType("HTML")); + wikiContext = new WikiContext(rReq.getUser(), wikiEngine + .getWikiType("HTML")); pageToShow = wikiEngine.getByName(wikiPage, wikiContext); - + + if (pageToShow == null) { + + try { + pageToShow = (WikiPage)noSuchPage.clone(); + } + catch (CloneNotSupportedException cnse){ + System.out.println(cnse); + } + + pageToShow.setName(wikiPage); + } + } - + PortletURL wikiURL = rRes.createActionURL(); rReq.setAttribute("actionURL", wikiURL.toString()); - rReq.setAttribute("wikiName", "<img src=\"/file-access/default/members/jbosswiki/images/JBossWikiLogoMedium.png\" width=\"100\" />"); + rReq + .setAttribute( + "wikiName", + "<img src=\"/file-access/default/members/jbosswiki/images/JBossWikiLogoMedium.png\" width=\"100\" />"); - if (pageToShow == null) { - // TODO MOVE IT UP !!! - - wikiPage = defaultPage; - - pageToShow = wikiEngine.getByName(wikiPage, wikiContext); - } - rReq.setAttribute("wikiContent", pageToShow.getContent()); rReq.setAttribute("wikiPage", wikiPage); @@ -142,6 +176,9 @@ rReq.setAttribute("author", pageToShow.getLastAuthor()); + rReq.setAttribute("logedIn", (rReq.getUser() != null) ? "true" + : "false"); + rRes.setTitle("Wiki"); if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState()) || javax.portlet.WindowState.MAXIMIZED.equals(rReq Modified: trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/HTMLTranslator.java =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/HTMLTranslator.java 2005-08-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/java/org/jboss/wiki/plugins/HTMLTranslator.java 2005-08-16 16:06:49 UTC (rev 865) @@ -787,7 +787,7 @@ return clean.toString(); } - public WikiPage process(WikiPage wikiPage) { + public WikiPage process(final WikiPage wikiPage) { WikiPage newPage = null; try { Modified: trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp =================================================================== --- trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-08-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-08-16 16:06:49 UTC (rev 865) @@ -11,12 +11,17 @@ String wikiName = (String)request.getAttribute("wikiName"); String wikiContent = (String)request.getAttribute("wikiContent"); String wikiPage = (String)request.getAttribute("wikiPage"); + String lockMsg = (String)request.getAttribute("lockMsg"); + + if (lockMsg == null) + lockMsg = ""; + %> <h2><%=wikiName%>: <%=wikiPage%></h2> <hr /> - +<div style="color:#FF0000"><%=lockMsg%></div> <form method="post" action="<%=actionURL%>"> <textarea name="wikiContent" rows="40" cols="80" style="width:100%;"> 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-16 11:28:17 UTC (rev 864) +++ trunk/forge/portal-extensions/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-08-16 16:06:49 UTC (rev 865) @@ -41,7 +41,26 @@ <tr> <td class="wikiFooter"> <hr /> -<a href="<%=actionURL%>&action=Edit&page=<%=wikiPage%>">Edit this page</a> <a href="<%=actionURL%>">More info...</a> <a href="<%=actionURL%>">Attach file...</a> + + +<% + + String logedIn = (String)request.getAttribute("logedIn"); + + + if (logedIn.equals("true")) { + out.print("<a href='"+actionURL+"&action=Edit&page="+wikiPage+"'>Edit page</a>"); + + } + else { + out.print("<i>Login to edit pages</i>"); + } + +%> + + + +<a href="<%=actionURL%>">More info...</a> <a href="<%=actionURL%>">Attach file...</a> </td> </tr> </table> |