From: <jbo...@li...> - 2005-09-12 21:03:24
|
Author: szimano Date: 2005-09-12 17:02:06 -0400 (Mon, 12 Sep 2005) New Revision: 1090 Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp Log: servlet things Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-09-12 20:01:57 UTC (rev 1089) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-09-12 21:02:06 UTC (rev 1090) @@ -19,6 +19,7 @@ import javax.portlet.*; import org.jboss.portlet.*; import org.jboss.wiki.fileaccess.WikiFileAccessFilter; +import org.jboss.wiki.management.WikiServiceMenagement; import org.apache.commons.fileupload.PortletDiskFileUpload; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.FileItem; @@ -43,11 +44,16 @@ public void init() { wikiEngine = new WikiEngine(); - //WikiCommon wikiCommon = new WikiCommon(); + WikiCommon wikiCommon = new WikiCommon(); - //WikiServiceMenagement wikiServiceMenagement = wikiCommon.getWikiManagement(); + WikiServiceMenagement wikiServiceMenagement = wikiCommon.getWikiManagement(); - //wikiServiceMenagement.setWikiEngine(wikiEngine); + wikiServiceMenagement.setWikiEngine(wikiEngine); + + if (wikiEngine == null) { + wikiEngine = new WikiEngine(); + wikiServiceMenagement.setWikiEngine(wikiEngine); + } } public void processAction(JBossActionRequest rReq, JBossActionResponse rResp) { Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-09-12 20:01:57 UTC (rev 1089) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2005-09-12 21:02:06 UTC (rev 1090) @@ -18,6 +18,8 @@ import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -26,7 +28,10 @@ import javax.servlet.http.HttpServletResponse; import org.jboss.wiki.FileDataSource; +import org.jboss.wiki.WikiCommon; +import org.jboss.wiki.WikiEngine; import org.jboss.wiki.WikiPlugin; +import org.jboss.wiki.management.WikiServiceMenagement; // import org.jboss.forge.common.content.ContentManager; // import org.jboss.forge.common.ForgeHelper; @@ -43,20 +48,41 @@ * <code>BUF_SIZE</code> - size of a buffer, which is used while reading a * file and sending it to the client. */ + + public static final String specialPage = "!WikiButtons"; - public static final String specialPage = "!WikiButtons"; + public static final char specialChar = '!'; + private final int BUF_SIZE = 32768; private String attachementsPath; private String wikiHome; + private WikiEngine wikiEngine; + /* * private ForgeHelper forgeHelper; private ContentManager contentManager; */ private MimetypesFileTypeMap mimeTypes; public void init(FilterConfig conf) { + // get wikiEnigne form wikiMenagement + + wikiEngine = new WikiEngine(); + + WikiCommon wikiCommon = new WikiCommon(); + + WikiServiceMenagement wikiServiceMenagement = wikiCommon + .getWikiManagement(); + + wikiServiceMenagement.setWikiEngine(wikiEngine); + + if (wikiEngine == null) { + wikiEngine = new WikiEngine(); + wikiServiceMenagement.setWikiEngine(wikiEngine); + } + // load mime types map mimeTypes = new MimetypesFileTypeMap(WikiFileAccessFilter.class @@ -78,7 +104,7 @@ // get the host wikiHome = props.getProperty("wikiHome"); - + } catch (IOException e) { System.err.println(e); } @@ -88,8 +114,9 @@ } public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) throws IOException { + FilterChain chain) throws IOException, ServletException { + if (request instanceof HttpServletRequest) { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; @@ -99,43 +126,57 @@ // Parse URI to get filename and page name String[] tokens = requestURI.split("[/]"); - //System.out.println("length " + tokens.length); + // System.out.println("length " + tokens.length); - if (tokens[tokens.length - 2].equals(specialPage)) { - // show apropriate buttons - InputStream imageIS = WikiFileAccessFilter.class.getResourceAsStream("/"+tokens[tokens.length - 1]); - - ServletOutputStream os = response.getOutputStream(); + if (tokens[tokens.length - 2].charAt(0) == specialChar) { + if (tokens[tokens.length - 2].equals(specialPage)) { + // show apropriate buttons + InputStream imageIS = WikiFileAccessFilter.class + .getResourceAsStream("/" + + tokens[tokens.length - 1]); - response.setContentType("image/png"); + ServletOutputStream os = response.getOutputStream(); - // Transferring the bytes - try { - byte[] buffer = new byte[BUF_SIZE]; - int read; - while ((read = imageIS.read(buffer)) != -1) - os.write(buffer, 0, read); - } catch (Exception e2) { - // Nothing that we can really do. Just send an incomplete - // file. - } finally { - os.close(); - imageIS.close(); + response.setContentType("image/png"); + + // Transferring the bytes + try { + byte[] buffer = new byte[BUF_SIZE]; + int read; + while ((read = imageIS.read(buffer)) != -1) + os.write(buffer, 0, read); + } catch (Exception e2) { + // Nothing that we can really do. Just send an + // incomplete + // file. + } finally { + os.close(); + imageIS.close(); + } + } - - } - else if (tokens.length == 3) { - String hostURL = ((request.isSecure()) ? "https" : "http") + "://"+request.getServerName()+((request.getServerPort() == 80) ? "" : ":"+ request.getServerPort()); - - httpResponse.sendRedirect(hostURL+wikiHome + "&page=" - + tokens[tokens.length - 1]); + else { + // show plugin with name after "!" + + } + } else if (tokens.length == 3) { + /*String hostURL = ((request.isSecure()) ? "https" : "http") + + "://" + + request.getServerName() + + ((request.getServerPort() == 80) ? "" : ":" + + request.getServerPort()); + + httpResponse.sendRedirect(hostURL + wikiHome + "&page=" + + tokens[tokens.length - 1]);*/ + request.getRequestDispatcher("/WEB-INF/jsp/Wiki.jsp").include(request, response); } else { // get fileName of attachement and page which is connected to String fileName = tokens[tokens.length - 1]; String pageName = tokens[tokens.length - 2]; - //System.out.println("[WikiFileAccess]Getting file: " + fileName - // + " of page: " + pageName); + // System.out.println("[WikiFileAccess]Getting file: " + + // fileName + // + " of page: " + pageName); Properties props = new Properties(); @@ -195,7 +236,202 @@ "This servlet should be called as HTTPServletRequest"); } } + + private void doServletDispatch(HttpServletRequest rReq, HttpServletResponse rResp) { + + //FIXME wrong url + String wikiURL = rReq.getRequestURI(); + rReq.setAttribute("actionURL", wikiURL); + + // Create server host and put it into session for plugins + String hostURL = ((rReq.isSecure()) ? "https" : "http") + "://"+rReq.getServerName()+((rReq.getServerPort() == 80) ? "" : ":"+ rReq.getServerPort()); + + rReq.getPortletSession().setAttribute("hostURL", hostURL); + rReq.getPortletSession().setAttribute("actionURL", wikiURL.toString()); + + rReq.getPortletSession().setAttribute("isSecure", + new Boolean(rReq.isSecure())); + + WikiPage noSuchPage = new WikiPage("", new Credentials(""), + "There is no such page. Click on EDIT to start it.", 0, 0, + null, wikiEngine.getMediaDataSource()); + + String page = "Wiki.jsp"; + + String wikiPage = defaultPage; + + WikiPage pageToShow = null; + + WikiContext wikiContext = null; + + if (rReq.getParameter("page") != null) { + wikiPage = rReq.getParameter("page"); + } + + if ((rReq.getParameter("action") != null) + && (rReq.getParameter("action").equals("Attach"))) { + rReq.setAttribute("fileAttach", "true"); + } + + if ((rReq.getParameter("action") != null) + && (rReq.getParameter("action").equals("Edit")) + && (rReq.getUser() != null)) { + page = "Edit.jsp"; + + pageToShow = wikiEngine.getByName(wikiPage, null); + + if (rReq.getParameter("version") != null) { + // show previous version of page + + System.out.println("Getting page " + wikiPage + " at version " + + rReq.getParameter("version")); + pageToShow = wikiEngine.getByName(wikiPage, null, Integer + .valueOf(rReq.getParameter("version"))); + + if (pageToShow.getLastVersion() != pageToShow.getVersion()) { + rReq.setAttribute("showedVersion", Integer.valueOf(rReq + .getParameter("version"))); + } + } else { + pageToShow = wikiEngine.getByName(wikiPage, null); + } + + if (pageToShow == null) { + // start editing new page + // wikiPage = defaultPage; + + pageToShow = new WikiPage(wikiPage, new Credentials(rReq + .getUser().getUserName()), "", 0, 0, new Date(), + wikiEngine.getMediaDataSource()); + // 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 if ((rReq.getParameter("action") != null) + && (rReq.getParameter("action").equals("Info"))) { + page = "PageInfo.jsp"; + + pageToShow = wikiEngine.getByName(wikiPage, null); + + if (pageToShow == null) { // if somebody entered a link to info + // non-existing page + page = "Wiki.jsp"; + try { + pageToShow = (WikiPage) noSuchPage.clone(); + } catch (CloneNotSupportedException cnse) { + System.out.println(cnse); + } + + pageToShow.setName(wikiPage); + } else { + rReq.setAttribute("pageAtTop", pageToShow); + } + + } else { + page = "Wiki.jsp"; + + String type = "HTML"; + + if (rReq.getParameter("type") != null) { + type = rReq.getParameter("type"); + //System.out.println("Getting type: " + type); + } + + wikiContext = new WikiContext(rReq.getUser(), wikiEngine + .getWikiType(type), new PortletWikiSession(rReq + .getPortletSession())); + + if (rReq.getParameter("version") != null) { + // show previous version of page + System.out.println("Getting page " + wikiPage + " at version " + + rReq.getParameter("version")); + pageToShow = wikiEngine.getByName(wikiPage, wikiContext, + Integer.valueOf(rReq.getParameter("version"))); + + if (pageToShow.getLastVersion() != pageToShow.getVersion()) { + rReq.setAttribute("showedVersion", Integer.valueOf(rReq + .getParameter("version"))); + } + } else { + pageToShow = wikiEngine.getByName(wikiPage, wikiContext); + } + + if (pageToShow == null) { + + try { + pageToShow = (WikiPage) noSuchPage.clone(); + } catch (CloneNotSupportedException cnse) { + System.out.println(cnse); + } + + pageToShow.setName(wikiPage); + } + + } + + rReq + .setAttribute( + "wikiName", + "<img src=\""+hostURL+"/wiki/"+WikiFileAccessFilter.specialPage+"/JBossWikiLogoMedium.png\" width=\"100\" border=\"0\" style=\"vertical-align: middle\"/>"); + + rReq.setAttribute("wikiContent", pageToShow.getContent()); + + rReq.setAttribute("wikiImagesUrl", hostURL+"/wiki/"+WikiFileAccessFilter.specialPage+"/"); + + rReq.setAttribute("wikiPage", wikiPage); + + rReq.setAttribute("editDate", pageToShow.getEditDate()); + + rReq.setAttribute("author", pageToShow.getLastAuthor()); + + rReq.setAttribute("logedIn", (rReq.getUser() != null) ? "true" + : "false"); + + rReq.setAttribute("defaultPage", defaultPage); + + // FIXME make this more elegant (ie. plugin) + // pass friendly link + /*Properties props = new Properties(); + props.load(WikiPlugin.class + .getResourceAsStream("wikiPlugins.properties")); + String href = props.getProperty("htmlTranslatorURL") + "wiki/" + + pageToShow.getName(); + String[] replaces = props.getProperty("sslRedirectReplaces").split(","); + + if (rReq.isSecure() && (replaces.length % 2 == 0)) { + // chage normal url to secure + for (int i = 0; i < replaces.length; i += 2) + href = href.replaceAll(replaces[i], replaces[i + 1]); + }*/ + + rReq.setAttribute("friendlyLink", hostURL+"/wiki/"+pageToShow.getName()); + + rRes.setTitle("Wiki"); + if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState()) + || javax.portlet.WindowState.MAXIMIZED.equals(rReq + .getWindowState())) { + rRes.setContentType("text/html"); + javax.portlet.PortletRequestDispatcher pRD = this + .getPortletContext().getRequestDispatcher(jspPath + page); + pRD.include(rReq, rRes); + return; + } + doDispatch(rReq, rRes); + } + public void destroy() { } Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-09-12 20:01:57 UTC (rev 1089) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2005-09-12 21:02:06 UTC (rev 1090) @@ -4,10 +4,8 @@ See terms of license at gnu.org. --> -<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" %> <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <%@ page isELIgnored ="false" %> -<portlet:defineObjects/> <% String actionURL = (String)request.getAttribute("actionURL"); Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp 2005-09-12 20:01:57 UTC (rev 1089) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp 2005-09-12 21:02:06 UTC (rev 1090) @@ -4,10 +4,8 @@ See terms of license at gnu.org. --> -<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" %> <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <%@ page isELIgnored ="false" %> -<portlet:defineObjects/> <% String actionURL = (String)request.getAttribute("actionURL"); Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-09-12 20:01:57 UTC (rev 1089) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2005-09-12 21:02:06 UTC (rev 1090) @@ -4,10 +4,8 @@ See terms of license at gnu.org. --> -<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" %> <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %> <%@ page isELIgnored ="false" %> -<portlet:defineObjects/> <% String actionURL = (String)request.getAttribute("actionURL"); |