From: <jbo...@li...> - 2006-05-04 22:25:59
|
Author: szimano Date: 2006-05-04 18:25:33 -0400 (Thu, 04 May 2006) New Revision: 4095 Added: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/countryCodes.dtd labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/wikiTypes.dtd labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileAttachmentDataSource.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileWikiPageDictionary.java Removed: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/project.xml labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/CountryCodes.xml labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiInsidePlugin.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPlugin.java labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-test/project.properties labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-test/project.xml Log: MERGED: -r 3348:4094 https://svn.labs.jboss.org/labs/jbosslabs/trunk/portal-extensions/jbosswiki . Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2006-05-04 22:25:33 UTC (rev 4095) @@ -23,22 +23,29 @@ import java.io.File; import java.io.FileInputStream; +import java.io.UnsupportedEncodingException; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.portlet.*; +import javax.portlet.ActionRequest; +import javax.portlet.ActionResponse; +import javax.portlet.GenericPortlet; +import javax.portlet.PortletException; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.PortletDiskFileUpload; import org.jboss.logging.Logger; import org.jboss.wiki.exceptions.EditSessionExpired; import org.jboss.wiki.exceptions.EditingNotAllowedException; import org.jboss.wiki.exceptions.WikiManagementNotFoundException; import org.jboss.wiki.exceptions.WikiSaveException; import org.jboss.wiki.management.WikiServiceMenagement; -import org.apache.commons.fileupload.PortletDiskFileUpload; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.FileItem; /** * The WikiPortlet. @@ -76,8 +83,35 @@ } } + private Map<String, String> convertParameters(ActionRequest rReq) { + Map<String, String> convertedParameters = new HashMap<String, String>(); + + Map paramMap = rReq.getParameterMap(); + + for (Object key : paramMap.keySet()) { + try { + if (rReq.getParameter("editAction") != null) { + convertedParameters.put((String) key, new String(rReq + .getParameter((String) key).getBytes("ISO-8859-1"), + "UTF-8")); + } else { + convertedParameters.put((String) key, rReq + .getParameter((String) key)); + } + } catch (UnsupportedEncodingException e) { + log.error(e); + convertedParameters.put((String) key, (String) paramMap + .get(key)); + } + } + + return convertedParameters; + } + public void processAction(ActionRequest rReq, ActionResponse rResp) { + Map<String, String> convertedParameters = convertParameters(rReq); + Credentials credentials = wikiEngine.getCredentialsInstance(rReq); // wikiContext is null - to get refernece to actual page @@ -145,9 +179,9 @@ log.info("serverFileName : " + tempDir + "/" + serverFileName + " filename: " + fileName); - WikiPage pageWithAtt = wikiEngine.getByName(rReq - .getParameter("page"), null, (String) rReq - .getParameter("language")); + WikiPage pageWithAtt = wikiEngine.getByName( + convertedParameters.get("page"), null, + (String) convertedParameters.get("language")); FileInputStream fis = new FileInputStream(serverFile); @@ -169,9 +203,10 @@ } } - if (rReq.getParameter("page") != null - && (rReq.getParameter("page").length() > 0)) { - StringBuffer sBuf = new StringBuffer(rReq.getParameter("page")); + if (convertedParameters.get("page") != null + && (convertedParameters.get("page").length() > 0)) { + StringBuffer sBuf = new StringBuffer(convertedParameters + .get("page")); if (Character.isLowerCase(sBuf.charAt(0))) { // change first letter to upper if it isn't @@ -194,10 +229,10 @@ } - if (rReq.getParameter("searchQuery") != null) { - Map<String, Integer> pages = wikiEngine.findPages(rReq - .getParameter("searchQuery"), (String) rReq - .getParameter("language")); + if (convertedParameters.get("searchQuery") != null) { + Map<String, Integer> pages = wikiEngine.findPages( + convertedParameters.get("searchQuery"), + (String) convertedParameters.get("language")); rReq.getPortletSession().setAttribute("findResult", pages); @@ -207,63 +242,66 @@ int i = 1; - while (rReq.getParameter("var" + i) != null) { + while (convertedParameters.get("var" + i) != null) { rReq.getPortletSession().setAttribute("var" + i, - rReq.getParameter("var" + i)); + convertedParameters.get("var" + i)); i++; } - if (rReq.getParameter("action") != null) { - rResp.setRenderParameter("action", rReq.getParameter("action")); + if (convertedParameters.get("action") != null) { + rResp.setRenderParameter("action", convertedParameters + .get("action")); } - if (rReq.getParameter("type") != null) { - rResp.setRenderParameter("type", rReq.getParameter("type")); + if (convertedParameters.get("type") != null) { + rResp.setRenderParameter("type", convertedParameters.get("type")); } - if (rReq.getParameter("version") != null) { + if (convertedParameters.get("version") != null) { log.info("[process action]Getting page " - + rReq.getParameter("page") + " at version " - + rReq.getParameter("version")); - rResp.setRenderParameter("version", rReq.getParameter("version")); + + convertedParameters.get("page") + " at version " + + convertedParameters.get("version")); + rResp.setRenderParameter("version", convertedParameters + .get("version")); } - if (rReq.getParameter("language") != null) { - rResp.setRenderParameter("language", (String) rReq - .getParameter("language")); + if (convertedParameters.get("language") != null) { + rResp.setRenderParameter("language", (String) convertedParameters + .get("language")); } else { rResp.setRenderParameter("language", wikiEngine.defaultLangugeCode); } - if (rReq.getParameter("editAction") != null) { + if (convertedParameters.get("editAction") != null) { log.debug("EDITING PAGE"); + String editedPageName = convertedParameters.get("editedPage"); + // unlock page - WikiPage edPage = wikiEngine.getByName((String) rReq - .getParameter("editedPage"), wikiContext, (String) rReq - .getParameter("language")); + WikiPage edPage = wikiEngine.getByName(editedPageName, wikiContext, + (String) convertedParameters.get("language")); if (edPage != null) { // it may be null if the page isn't saved // yet - edPage.unlock(credentials, Integer.valueOf((String) rReq - .getParameter("editSessionId"))); + edPage.unlock(credentials, Integer + .valueOf((String) convertedParameters + .get("editSessionId"))); } // saving, previewing or canceling - if (rReq.getParameter("editAction").equals("Save")) { + if (convertedParameters.get("editAction").equals("Save")) { // save the page if (edPage == null) { - edPage = new WikiPage(rReq.getParameter("editedPage"), - credentials, "", 0, 0, new Date(), wikiEngine, - true, true, null, null, 0, (String) rReq - .getParameter("language")); + edPage = new WikiPage(editedPageName, credentials, "", 0, + 0, new Date(), wikiEngine, true, true, null, null, + 0, (String) convertedParameters.get("language")); } // set new content - edPage.setContent(rReq.getParameter("wikiContent")); + edPage.setContent(convertedParameters.get("wikiContent")); // set author name for new version edPage.setLastAuthor(credentials); @@ -276,9 +314,10 @@ // save the page try { - edPage.save(credentials, Integer.valueOf((String) rReq - .getParameter("editSessionId")), (String) rReq - .getParameter("language")); + edPage.save(credentials, Integer + .valueOf((String) convertedParameters + .get("editSessionId")), + (String) convertedParameters.get("language")); } catch (NumberFormatException e) { log.error(e); } catch (EditSessionExpired e) { @@ -577,7 +616,7 @@ if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState()) || javax.portlet.WindowState.MAXIMIZED.equals(rReq .getWindowState())) { - rRes.setContentType("text/html"); + rRes.setContentType("text/html; charset=UTF-8"); javax.portlet.PortletRequestDispatcher pRD = this .getPortletContext().getRequestDispatcher( jspPath + page); Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2006-05-04 22:25:33 UTC (rev 4095) @@ -25,6 +25,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.net.URLDecoder; +import java.net.URLEncoder; import java.util.Properties; import javax.activation.MimetypesFileTypeMap; @@ -40,7 +42,7 @@ import javax.servlet.http.HttpServletResponse; import org.jboss.logging.Logger; -import org.jboss.wiki.FileDataSource; +import org.jboss.wiki.FileMediaDataSource; import org.jboss.wiki.ServletWikiSession; import org.jboss.wiki.SimpleCredentials; import org.jboss.wiki.WikiAttachment; @@ -53,8 +55,6 @@ import org.jboss.wiki.exceptions.WikiManagementNotFoundException; import org.jboss.wiki.management.WikiServiceMenagement; -// import org.jboss.forge.common.content.ContentManager; -// import org.jboss.forge.common.ForgeHelper; /** * A filter that enables to download files form the jspwiki structure + @@ -110,7 +110,7 @@ Properties props = new Properties(); try { - props.load(FileDataSource.class + props.load(FileMediaDataSource.class .getResourceAsStream("filedatasource.properties")); // get the path to attachment property @@ -148,8 +148,10 @@ + request.getServerPort()); wikiSession.setAttribute("hostURL", hostURL); - String requestURI = httpRequest.getRequestURI(); + String requestURI = URLDecoder.decode(httpRequest.getRequestURI(), + "UTF-8"); + // get off "/wiki/" from the begining requestURI = requestURI.substring("/wiki/".length()); @@ -188,31 +190,36 @@ } // check if user is browsing different then default language - if (wikiEngine.getUsedLanguageCodes().containsKey(tokens[0].toUpperCase())) { + if (wikiEngine.getUsedLanguageCodes().containsKey( + tokens[0].toUpperCase())) { langCode = tokens[0].toUpperCase(); // redo tokens but without language - if (requestURI.startsWith(tokens[0]+ "/")) { - requestURI = requestURI.substring((tokens[0] + "/").length()); - } - else { + if (requestURI.startsWith(tokens[0] + "/")) { + requestURI = requestURI.substring((tokens[0] + "/") + .length()); + } else { requestURI = requestURI.substring((tokens[0]).length()); } - + tokens = requestURI.split("[/]"); - + if ((tokens.length == 1) && (tokens[0].equals(""))) { // show Main page - as there is no place to go specified :) - httpResponse.sendRedirect(hostURL + wikiHome + "&language=" + langCode); + httpResponse.sendRedirect(hostURL + wikiHome + "&language=" + + langCode); return; } } - + // check if all tokens are UpperCase (meanins they are all wiki // pages) boolean isAllUpperCase = true; for (int i = 0; i < tokens.length; i++) - if (!Character.isUpperCase(tokens[i].charAt(0))) { + // uppercase or UTF character + if (!(Character.isUpperCase(tokens[i].charAt(0)) || (tokens[i] + .charAt(0) > 127 && Character.isLetter(tokens[i] + .charAt(0))))) { isAllUpperCase = false; break; } @@ -221,14 +228,16 @@ String pageName = ""; for (int i = 0; i < tokens.length; i++) { - pageName += "/" + tokens[i]; + pageName += "/" + URLEncoder.encode(tokens[i], "UTF-8"); } - if (Character.isUpperCase(tokens[tokens.length - 1].charAt(0))) { + if (Character.isUpperCase(tokens[tokens.length - 1].charAt(0)) + || (tokens[tokens.length - 1].charAt(0) > 127 && Character + .isLetter(tokens[tokens.length - 1].charAt(0)))) { httpResponse.sendRedirect(hostURL + wikiHome + "&page=" + pageName.substring(1) + ((version != -1) ? "&version=" + version : "") - + "&language="+langCode); + + "&language=" + langCode); } else { PrintWriter out = httpResponse.getWriter(); httpResponse.setContentType("text/html"); @@ -297,17 +306,16 @@ httpResponse.setContentLength(page.getPageContent() .length()); - + httpResponse.getWriter().print(page.getPageContent()); httpResponse.getWriter().flush(); } else { // show error response httpResponse.setContentType("text/html"); - httpResponse - .getWriter() - .println( - "<html><body><h3>ERROR</h3><br />\nThere is no such wikiType: "+wikiTypeName+"</body></html>"); + httpResponse.getWriter().println( + "<html><body><h3>ERROR</h3><br />\nThere is no such wikiType: " + + wikiTypeName + "</body></html>"); } } else { httpResponse.setContentType("text/html"); Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2006-05-04 22:25:33 UTC (rev 4095) @@ -3,7 +3,7 @@ Distributable under LGPL license. See terms of license at gnu.org. --> - +<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <%@ page isELIgnored ="false" %> <% Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/PageInfo.jsp 2006-05-04 22:25:33 UTC (rev 4095) @@ -3,7 +3,7 @@ Distributable under LGPL license. See terms of license at gnu.org. --> - +<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" contentType="text/html; charset=UTF-8"%> <%@ page isELIgnored ="false" %> <% Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Wiki.jsp 2006-05-04 22:25:33 UTC (rev 4095) @@ -3,6 +3,7 @@ Distributable under LGPL license. See terms of license at gnu.org. --> +<%@ page language="java" extends="org.jboss.portal.core.servlet.jsp.PortalJsp" contentType="text/html; charset=UTF-8"%> <%@ page isELIgnored ="false" %> <% Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/project.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/project.xml 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/project.xml 2006-05-04 22:25:33 UTC (rev 4095) @@ -9,6 +9,7 @@ <extend>../common.xml</extend> <id>wiki-common</id> <name>Wiki common</name> + <currentVersion>1.0</currentVersion> <build> <!-- <unitTestSourceDirectory>./src/test/java</unitTestSourceDirectory> Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/CountryCodes.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/CountryCodes.xml 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/CountryCodes.xml 2006-05-04 22:25:33 UTC (rev 4095) @@ -1,3 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> + <countries> <country> <description>Afar</description> Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties 2006-05-04 22:25:33 UTC (rev 4095) @@ -12,15 +12,15 @@ credentialsClass=org.jboss.wiki.JBossPortalCredentials #mediaDataSourceClass class to use for mediaDataSource -mediaDataSourceClass=org.jboss.wiki.FileDataSource +mediaDataSourceClass=org.jboss.wiki.FileMediaDataSource #mediaDataSourceClass=org.jboss.wiki.ShotokuMediaDataSource #attachmentDataSourceClass class to use for AttachmentDataSource -attachmentDataSourceClass=org.jboss.wiki.FileDataSource +attachmentDataSourceClass=org.jboss.wiki.FileAttachmentDataSource #attachmentDataSourceClass=org.jboss.wiki.ShotokuAttachmentDataSource #wikiPageDictionaryClass class to use for WikiPageDictionary -wikiPageDictionaryClass=org.jboss.wiki.FileDataSource +wikiPageDictionaryClass=org.jboss.wiki.FileWikiPageDictionary #wikiPageDictionaryClass=org.jboss.wiki.ShotokuWikiPageDictionary #defaultLanguageCode - country letter of the default code language Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/WikiTypes.xml 2006-05-04 22:25:33 UTC (rev 4095) @@ -1,3 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> <!-- JBoss, the OpenSource J2EE webOS Distributable under LGPL license. @@ -3,5 +4,4 @@ See terms of license at gnu.org. --> - <wikiTypes> <wikiType> Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/countryCodes.dtd (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/countryCodes.dtd) Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/etc/wikiTypes.dtd (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/wikiTypes.dtd) Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileAttachmentDataSource.java (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileAttachmentDataSource.java) Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java) Deleted: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2006-05-04 22:25:33 UTC (rev 4095) @@ -1,1400 +0,0 @@ -/* - * JBoss, Home of Professional Open Source - * Copyright 2005, JBoss Inc., and individual contributors as indicated - * by the @authors tag. See the copyright.txt in the distribution for a - * full listing of individual contributors. - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this software; if not, write to the Free - * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA, or see the FSF site: http://www.fsf.org. - */ -package org.jboss.wiki; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; - -import org.jboss.logging.Logger; -import org.jboss.wiki.exceptions.DataSourceException; -import org.jboss.wiki.exceptions.PageRenamingException; -import org.jboss.wiki.exceptions.WikiSaveException; - -/** - * <p> - * </p> - * - */ -public class FileDataSource implements MediaDataSource, AttachmentDataSource, - WikiPageDictionary { - - /** - * <p> - * Represents ... - * </p> - * - */ - private final static String SAVE_COMMENT = "Saved by FileDataSource of JBoss Wiki"; - - private final static String OTHER_LANG_DIR = "LANG/"; - - private final static String LANG_FILE = "languages.properties"; - - public static final String propFileName = "filedatasource.properties"; - - public static final String propModFileName = "fileMod.properties"; - - public String pathToMediaTrash; - - public String pathToAttTrash; - - private String pathToMedia; - - private String pathToAttachments; - - private boolean lock = false; - - // private Properties fileDSProps; - - private final int BUF_SIZE = 32768; - - private Properties pageModProps; - - private Properties pageDictionary; - - private Properties pageRevDictionary; - - private File modFile; - - private File pageDictionaryFile; - - private WikiEngine wikiEngine; - - private Logger log; - - private String langCode = null; - - public void setWikiEngine(WikiEngine wikiEngine) { - this.wikiEngine = wikiEngine; - - if (langCode == null) - langCode = wikiEngine.defaultLangugeCode; - } - - public FileDataSource() { - init(""); - } - - private void init(String prefix) { - log = Logger.getLogger(FileDataSource.class); - - log.info("Looking for props file !"); - - Properties fileDSProps = new Properties(); - - try { - - fileDSProps.load(FileDataSource.class - .getResourceAsStream(propFileName)); - - } catch (IOException ioe) { - log.error("Can't load the file " + propFileName + "\n", ioe); - } - - loadProperties(fileDSProps, prefix); - - File mainWikiDir = new File(pathToMedia); - File attWikiDir = new File(pathToAttachments); - - if (!mainWikiDir.exists()) - mainWikiDir.mkdirs(); - - if (!attWikiDir.exists()) - attWikiDir.mkdirs(); - - pageModProps = new Properties(); - modFile = new File(pathToMedia + "/" + propModFileName); - - FileInputStream fis = null; - - try { - if (!modFile.exists()) { - modFile.createNewFile(); - } - - fis = new FileInputStream(modFile); - - pageModProps.load(fis); - - } catch (IOException ioe) { - log.error("Can't load the file " + propModFileName + "\n", ioe); - } finally { - try { - fis.close(); - } catch (IOException ioe) { - log.error("Can't close input stream \n", ioe); - } - } - - // create trash directory for deleted pages if it doesn't exists - - pathToMediaTrash = pathToMedia + "/" + MediaDataSource.mediaTrashName; - - File pathToTrashFile = new File(pathToMediaTrash + "/OLD"); - - if (!pathToTrashFile.exists()) { - pathToTrashFile.mkdirs(); - } - - // create trash directory for deleted attachments if it doesn't exists - - pathToAttTrash = pathToMedia + "/" + AttachmentDataSource.attTrashName; - - File pathToAttachmentsFile = new File(pathToAttTrash); - - if (!pathToAttachmentsFile.exists()) { - pathToAttachmentsFile.mkdirs(); - } - - // load dictionary props - pageDictionary = new Properties(); - pageRevDictionary = new Properties(); - - // TODO Do not load dictionary YET ! - - pageDictionaryFile = new File(pathToMedia + "/dictionary.properties"); - - if (!pageDictionaryFile.exists()) { - try { - pageDictionaryFile.createNewFile(); - } catch (IOException e) { - log.error("Cannot create dictionary file: ", e); - } - } else { - // there is dictionary file. Load props from it - FileInputStream is; - try { - is = new FileInputStream(pageDictionaryFile); - - try { - pageDictionary.load(is); - } catch (IOException e) { - e.printStackTrace(); - } - - try { - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - } - - // create pageRevDictionary - to make it work faster - - Set<Object> keys = pageDictionary.keySet(); - - for (Object key : keys) { - pageRevDictionary.setProperty(pageDictionary - .getProperty((String) key), (String) key); - } - } - - public void loadProperties(Properties fileDSProps, String prefix) { - if (fileDSProps.getProperty("pathToMedia") != null) { - pathToMedia = fileDSProps.getProperty("pathToMedia") - + (prefix.length() > 0 ? "/" + prefix : ""); - log.info("Path to media is: " + pathToMedia); - pathToAttachments = fileDSProps.getProperty("pathToAttachements") - + (prefix.length() > 0 ? "/" + prefix : ""); - log.info("Path to attachements is: " + pathToAttachments); - } else { - System.err - .println("Your properties file lacks of pathToMedia property. It will not run properly ! Please update " - + propFileName); - } - } - - public void preSave() throws WikiSaveException { - // do nothing - } - - public void savePage(String uid, WikiPage page) throws WikiSaveException { - - if (pageExists(uid)) { // page exists on - // harddisk - add new - // version - Properties pageProps = getPageProps(uid); - - pageProps.setProperty(page.getLastVersion() + ".author", page - .getLastAuthor().getName()); - - try { - pageProps.store(new FileOutputStream(new File(pathToMedia - + "/OLD/" + uid + "/page.properties")), - "Saved by FileDataSource of JBoss Wiki"); - } catch (Exception e) { - throw new WikiSaveException(e); - } - - log.info("Opening files"); - File pageFile = new File(pathToMedia + "/OLD/" + uid + "/" - + (page.getLastVersion() - 1) + ".txt"); - File pageOldFile = new File(pathToMedia + "/" + uid + ".txt"); - - FileOutputStream pageFileWriter; - FileInputStream pageFileReader; - - try { - pageFileWriter = new FileOutputStream(pageFile); - pageFileReader = new FileInputStream(pageOldFile); - - int b; - - while ((b = pageFileReader.read()) != -1) { - pageFileWriter.write(b); - } - - pageFile.setLastModified(pageOldFile.lastModified()); - - pageFileWriter.close(); - - pageOldFile.delete(); - - pageFileWriter = new FileOutputStream(pageOldFile); - - String pageContent = page.getContent(); - - for (int i = 0; i < pageContent.length(); i++) { - pageFileWriter.write((int) pageContent.charAt(i)); - } - - pageFileWriter.close(); - } catch (FileNotFoundException fnfe) { - throw new WikiSaveException(fnfe); - } catch (IOException ioe) { - throw new WikiSaveException(ioe); - } - - } else { // there is no page on disk. We have to create new one. - - try { - - // create needed dirs - File newPageFile = new File(pathToMedia + "/OLD/" + uid); - newPageFile.mkdirs(); - - // write the page - newPageFile = new File(pathToMedia + "/OLD/" + uid - + "/page.properties"); - - FileOutputStream pageWriter = new FileOutputStream(newPageFile); - - Properties properties = new Properties(); - properties.setProperty(page.getLastVersion() + ".author", page - .getLastAuthor().getName()); - - properties.store(pageWriter, SAVE_COMMENT); - - pageWriter.close(); - - String pageDirName = pathToMedia; - String[] pageNames = uid.split("/"); - - for (int i = 0; i < pageNames.length - 1; i++) { - pageDirName += "/" + pageNames[i]; - } - - File pageDir = new File(pageDirName); - - pageDir.mkdirs(); - - pageWriter = new FileOutputStream(new File(pathToMedia + "/" - + uid + ".txt")); - - String pageContent = page.getContent(); - - for (int i = 0; i < pageContent.length(); i++) { - pageWriter.write((int) pageContent.charAt(i)); - } - - pageWriter.close(); - - } catch (Exception e) { - throw new WikiSaveException(e); - } - } - - } - - public void postSave() throws WikiSaveException { - // do nothing - } - - public boolean preGet() { - return true; - } - - public Properties getPageProps(String pageName) { - Properties pageProps = new Properties(); - - try { - FileInputStream fpi = new FileInputStream(new File(pathToMedia - + "/OLD/" + pageName + "/page.properties")); - pageProps.load(fpi); - fpi.close(); - } catch (IOException ioe) { - // There is no prop file for some reson - create one. - - File pagePropsFile = new File(pathToMedia + "/OLD/" + pageName); - - // create dirs - pagePropsFile.mkdirs(); - - // create file - pagePropsFile = new File(pathToMedia + "/OLD/" + pageName - + "/page.properties"); - - try { - pagePropsFile.createNewFile(); - - if (pageExists(pageName)) { - // if page exists it looks like there is lack of the props - // structure - FileOutputStream fpo = new FileOutputStream(pagePropsFile); - - pageProps.setProperty("1.author", "unknown"); - pageProps.store(fpo, SAVE_COMMENT); - fpo.close(); - } - - } catch (IOException e) { - log.error( - "Cannot create page props file for page: " + pageName, - e); - } - return pageProps; - } - - return pageProps; - } - - public Properties getAttProps(String pageName, String attName, - boolean createProps) { - Properties attProps = new Properties(); - - File propFile = new File(pathToAttachments + "/" + pageName + "-att/" - + attName + "-dir/"); - - if (!propFile.exists()) { - - if (createProps) { - // create dirs for this property file - propFile.mkdirs(); - } else { - return null; - } - } - - propFile = new File(pathToAttachments + "/" + pageName + "-att/" - + attName + "-dir/attachment.properties"); - - try { - attProps.load(new FileInputStream(propFile)); - } catch (IOException ioe) { - System.err - .println("Cannot read attachment.properties for attachement: " - + pathToAttachments - + "/" - + pageName - + "-att/" - + attName + "-dir/attachment.properties\n" + ioe); - } - - return attProps; - } - - public void saveAttProps(Properties props, String pageName, String attName) { - try { - props.store(new FileOutputStream(new File(pathToAttachments + "/" - + pageName + "-att/" + attName - + "-dir/attachment.properties")), SAVE_COMMENT); - } catch (Exception ioe) { - System.err - .println("Cannot store attchement.properties for attachement: " - + pathToAttachments - + "/" - + pageName - + "-att/" - + attName + "-dir/attachments.properties\n" + ioe); - } - - } - - public void saveRolesSet(String uid, Set<String> roles, int action) - throws DataSourceException { - File rolesFile; - try { - rolesFile = getRolesFile(uid, action); - - if (rolesFile == null) - throw new DataSourceException("Wrong action number"); - - } catch (IOException e) { - throw new DataSourceException(e); - } - - FileOutputStream fos = null; - try { - fos = new FileOutputStream(rolesFile); - - Properties roleProps = new Properties(); - - int i = 1; - - for (String roleName : roles) { - roleProps.setProperty("Role." + i++, roleName); - } - - roleProps.store(fos, SAVE_COMMENT); - - fos.close(); - } catch (FileNotFoundException e) { - throw new DataSourceException(e); - } catch (IOException e) { - try { - fos.close(); - } catch (IOException e1) { - throw new DataSourceException(e); - } - throw new DataSourceException(e); - } - - } - - private File getRolesFile(String uid, int action) throws IOException { - String fileName = (action == MediaDataSource.EDITABLE) ? "editRoles" - : (action == MediaDataSource.VIEWABLE) ? "viewRoles" : null; - - if (fileName == null) - return null; - - File rolesFile = new File(pathToMedia + "/OLD/" + uid + "/" + fileName - + ".properties"); - - if (!rolesFile.exists()) { - rolesFile.createNewFile(); - } - - return rolesFile; - } - - private Set<String> getRoles(String uid, int action) throws IOException { - Set<String> set = new TreeSet<String>(); - - File rolesFile = getRolesFile(uid, action); - - if (rolesFile == null) - return null; - - FileInputStream rolesFileIs = new FileInputStream(rolesFile); - - Properties roleProps = new Properties(); - - roleProps.load(rolesFileIs); - - int i = 1; - - while (roleProps.getProperty("Role." + i) != null) { - set.add(roleProps.getProperty("Role." + i)); - i++; - } - - rolesFileIs.close(); - - return set; - } - - public WikiPage getPage(String pageName) { - // log.info("[WIKI:FileDataSource]: Getting new page: " + - // pageName); - - WikiPage page = null; - - File pageFile = new File(pathToMedia + "/" + pageName + ".txt"); - - if (pageFile.exists()) { - - Properties pageProps = getPageProps(pageName); - - if (pageProps != null) { - - int i = 1; - - // get the author of the latest version of page - while (pageProps.getProperty(String.valueOf(i + 1) + ".author") != null) { - i++; - } - - Credentials author = new SimpleCredentials(pageProps - .getProperty(String.valueOf(i) + ".author")); - - StringBuilder pageContent = new StringBuilder(); - - try { - FileInputStream input = new FileInputStream(pageFile); - - int nextChr = input.read(); - - while (nextChr != -1) { - pageContent.append((char) nextChr); - nextChr = input.read(); - } - } catch (IOException ioe) { - log.error(ioe); - } - - Set<String> viewRoles = null; - Set<String> editRoles = null; - - try { - editRoles = (getRoles(pageName, EDITABLE)); - } catch (IOException e) { - log.error("Couldn't read edit roles for page: " + pageName, - e); - } - try { - viewRoles = (getRoles(pageName, VIEWABLE)); - } catch (IOException e) { - log.error("Couldn't read view roles for page: " + pageName, - e); - } - - int pageMods = getPageMod(pageName); - - page = new WikiPage(pageName, author, pageContent.toString(), - i, i, new Date(pageFile.lastModified()), wikiEngine, - (pageMods & VIEWABLE) == VIEWABLE, - (pageMods & EDITABLE) == EDITABLE, editRoles, - viewRoles, pageFile.length(), langCode); - } - } - - // get Metadata props. - if (page != null) // page exists at all - page.setMetaDataProps(getMetadataProps(pageName)); - - return page; - - } - - public boolean postGet() { - return true; - } - - public WikiPage getPage(String pageName, String languageCode) { - if (languageCode != null) { - log - .info("As for now, languages aren't supported in the wiki. Please do not use language codes"); - } - return getPage(pageName); - } - - public WikiPage getPageAtVersion(WikiPage originPage, String uid, - boolean loadContent, int version) { - - /* - * Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); long - * oldMilis = cal.getTimeInMillis(); - */ - - WikiPage page = null; - - try { - page = (WikiPage) originPage.clone(); - } catch (CloneNotSupportedException e) { - log.error(e); - } - - if (page != null) { - if (page.getLastVersion() < version) { - log.info("There is no version " + version + " of page " - + page.getName()); - return null; - } - - getContentAtVersion(page, uid, loadContent, version); - - page.setLastAuthor(getAuthorAtVersion(uid, version)); - - page.setVersion(version); - - page.setEditDate(getDateAtVersion(uid, version)); - - } - - /* - * cal.setTime(new Date()); - * - * log.info("PAGE "+page.getName()+" loaded in: "+(cal.getTimeInMillis() - - * oldMilis)); - */ - return page; - } - - public void getContentAtVersion(WikiPage page, String uid, - boolean loadContent, int version) { - StringBuilder ret = null; - - File pageFile = new File(pathToMedia + "/OLD/" + uid + "/" + version - + ".txt"); - - if (loadContent) { - try { - FileInputStream input = new FileInputStream(pageFile); - - int nextChr = input.read(); - - ret = new StringBuilder(); - - while (nextChr != -1) { - ret.append((char) nextChr); - nextChr = input.read(); - } - - page.setContent(ret.toString()); - page.setLength(ret.length()); - - } catch (IOException ioe) { - log.error(ioe); - } - } else { - page.setLength(pageFile.length()); - page.setContent(null); - } - - } - - public Date getDateAtVersion(String pageName, int version) { - Date ret = null; - - File pageFile = new File(pathToMedia + "/OLD/" + pageName + "/" - + version + ".txt"); - - ret = new Date(pageFile.lastModified()); - - return ret; - } - - public Credentials getAuthorAtVersion(String pageName, int version) { - return new SimpleCredentials(getPageProps(pageName).getProperty( - version + ".author")); - } - - public boolean pageExists(String pageName) { - - File pageFile = new File(pathToMedia + "/" + pageName + ".txt"); - - if (pageFile.exists()) { - return true; - } else { - return false; - } - } - - public void addAttachment(InputStream attFile, String attName, String uid, - String user) { - String pageName = uid; - Properties attProps = getAttProps(pageName, attName, true); - - int lastVersion = 1; - - if (attProps.size() > 0) { - // find last version of this file - while (attProps.getProperty(lastVersion + ".author") != null) { - lastVersion++; - } - } - - String[] extension = attName.split("\\."); - String fileName = pathToAttachments - + "/" - + pageName - + "-att/" - + attName - + "-dir/" - + lastVersion - + "." - + ((attName.indexOf('.') != -1) ? extension[extension.length - 1] - : "bin"); - - InputStream oldFile = null; - FileOutputStream newFile = null; - - try { - newFile = new FileOutputStream(new File(fileName)); - oldFile = attFile; - } catch (FileNotFoundException e) { - log.error(e); - } - - // writing old file to new one - try { - byte[] buffer = new byte[BUF_SIZE]; - int read; - while ((read = oldFile.read(buffer)) != -1) - newFile.write(buffer, 0, read); - } catch (Exception e2) { - // Nothing that we can really do. Just send an incomplete - // file. - } finally { - try { - newFile.close(); - oldFile.close(); - } catch (IOException e) { - log.error(e); - } - } - - attProps.setProperty(lastVersion + ".author", user); - - saveAttProps(attProps, pageName, attName); - } - - public Set<String> getAttachmentsSet(String uid) { - Set<String> attSet = new HashSet<String>(); - - File attDir = new File(pathToAttachments + "/" + uid + "-att"); - - if (attDir.exists() && (attDir.listFiles().length > 0)) { - File[] attachements = attDir.listFiles(); - - for (int i = 0; i < attachements.length; i++) { - 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)); - - } - } - } else { - // page has no attachements - return null; - } - - return attSet; - } - - public Set<String> getAllPageNames() { - Set<String> attSet = new HashSet<String>(); - - getPageNamesFor("", attSet); - - return attSet; - } - - private void getPageNamesFor(String directory, Set<String> attSet) { - File attDir = new File(pathToMedia + "/" + directory); - - 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((directory + "/" + pageFiles[i].getName().substring( - 0, pageFiles[i].getName().length() - ".txt".length())) - .substring(1)); - } - } - - for (int i = 0; i < pageFiles.length; i++) { - if ((pageFiles[i].isDirectory()) - && (!pageFiles[i].getName().endsWith("-att"))) { - - // do not take dirs from OLD, .svn and trash folders - if ((!pageFiles[i].getAbsolutePath().equals( - pathToMedia + "/OLD")) - && (!pageFiles[i].getAbsolutePath().equals( - pathToMedia + "/.svn")) - && (!pageFiles[i].getAbsolutePath().equals( - pathToMedia + "/" - + MediaDataSource.mediaTrashName)) - && (!pageFiles[i].getAbsolutePath().equals( - pathToMedia + "/" - + AttachmentDataSource.attTrashName)) - && (!pageFiles[i].getAbsolutePath().equals( - pathToMedia + "/" - + OTHER_LANG_DIR.substring(0, OTHER_LANG_DIR.length()-1)))) { - // get names for subpages - getPageNamesFor(directory + "/" + pageFiles[i].getName(), - attSet); - } - } - } - } - - public WikiAttachment getAttachment(String pageName, String attachementName) { - return getAttachment(pageName, attachementName, - getLastAttachmentVersion(pageName, attachementName)); - } - - public WikiAttachment getAttachment(String pageName, - String attachementName, int version) { - - String[] tokens = attachementName.split("\\."); - - Properties props = getAttProps(pageName, attachementName, false); - - if (props == null) { - return null; - } - - String user = props.getProperty(version + ".author"); - - File file = new File( - pathToAttachments - + "/" - + pageName - + "-att/" - + attachementName - + "-dir/" - + version - + "." - + ((attachementName.indexOf(".") != -1) ? tokens[tokens.length - 1] - : "bin")); - - FileInputStream fis; - try { - fis = new FileInputStream(file); - return new WikiAttachment(attachementName, new Date(file - .lastModified()), user, file.length(), fis, version); - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } - - } - - public int getLastAttachmentVersion(String pageName, String attachementName) { - - Properties props = getAttProps(pageName, attachementName, false); - - if (props == null) - return -1; - - // looking for the newest version - int version = 1; - - while (props.getProperty((version + 1) + ".author") != null) { - version++; - } - - return version; - } - - public long getAttachmentSize(String pageName, String attachementName, - int version) { - String[] tokens = attachementName.split("\\."); - - File file = new File( - pathToAttachments - + "/" - + pageName - + "-att/" - + attachementName - + "-dir/" - + version - + "." - + ((attachementName.indexOf(".") != -1) ? tokens[tokens.length - 1] - : "bin")); - - return file.length(); - } - - public Set<String> getPagesFor(String pageName) { - Set<String> pages = new TreeSet<String>(); - - File pageDir = new File(pathToMedia + "/" + pageName); - - if ((pageDir.exists()) && (pageDir.isDirectory())) { - getPagesInside(pageDir, pages, pageName); - } - - return pages; - } - - private void getPagesInside(File pageDir, Set<String> pages, String prefix) { - File[] subFiles = pageDir.listFiles(); - - for (int i = 0; i < subFiles.length; i++) { - if ((subFiles[i].isFile()) - && (subFiles[i].getName().endsWith(".txt"))) { - pages.add(prefix - + "/" - + subFiles[i].getName().substring( - 0, - subFiles[i].getName().length() - - ".txt".length())); - } else if (subFiles[i].isDirectory()) { - getPagesInside(subFiles[i], pages, prefix + "/" - + subFiles[i].getName()); - } - } - } - - public int getPageMod(String pageName) { - if (pageModProps.getProperty(pageName) == null) { - return (EDITABLE + VIEWABLE); - } else { - return Integer.valueOf(pageModProps.getProperty(pageName)); - } - } - - public synchronized void setPageMod(String pageName, int mods) { - - if (mods != (EDITABLE + VIEWABLE)) { - pageModProps.setProperty(pageName, String.valueOf(mods)); - } else { - pageModProps.remove(pageName); - } - - FileOutputStream fos = null; - - try { - fos = new FileOutputStream(modFile); - pageModProps.store(fos, SAVE_COMMENT); - } catch (IOException ioe) { - log.error("Couldn't store mod props: ", ioe); - } finally { - try { - fos.close(); - } catch (IOException ioe) { - log.error("Can't close input stream \n", ioe); - } - } - } - - public synchronized boolean deletePage(String pageName) { - - if (pageExists(pageName)) { - // moving page file - String pageFileName = pathToMedia + "/" + pageName + ".txt"; - String pageFileTrashNameBase = pathToMediaTrash + "/" + pageName - + ".txt"; - String pageFileTrashName = pageFileTrashNameBase; - - File pageFile = new File(pageFileName); - File pageTrashFile = new File(pageFileTrashName); - - // create dirs to trash - File trashFileDir = new File(pathToMediaTrash + "/" + pageName); - if (!trashFileDir.exists()) { - trashFileDir.mkdirs(); - } - - // look if page is already in trash (add i-bak) - int i = 0; - - if (pageTrashFile.exists()) { - while (pageTrashFile.exists()) { - pageFileTrashName = pageFileTrashNameBase + "-" + (i++) - + "-bak"; - pageTrashFile = new File(pageFileTrashName); - } - - } - - if (!pageFile.renameTo(pageTrashFile)) { - log.error("[FileDataSource]: Problems with moving " - + pageFileName + " to " + pageFileTrashName); - return false; - } - - // moving history directory - - String historyDirName = pathToMedia + "/OLD/" + pageName; - String historyTrashDirNameBase = pathToMediaTrash + "/OLD/" - + pageName; - String historyTrashDirName = historyTrashDirNameBase; - - // create dirs to trash (history) - trashFileDir = new File(pathToMediaTrash + "/OLD/" + pageName); - if (!trashFileDir.exists()) { - trashFileDir.mkdirs(); - } - - pageFile = new File(historyDirName); - pageTrashFile = new File(historyTrashDirName); - - // look if history dir is already in trash (add i-bak) - i = 0; - - if (pageTrashFile.exists()) { - while (pageTrashFile.exists()) { - historyTrashDirName = historyTrashDirNameBase + "-" + (i++) - + "-bak"; - pageTrashFile = new File(historyTrashDirName); - } - - } - - if (!pageFile.renameTo(pageTrashFile)) { - log.error("[FileDataSource]: Problems with moving " - + historyDirName + " to " + historyTrashDirName); - - // return back the page history - pageFile = new File(pageFileName); - pageTrashFile = new File(pageFileTrashName); - - if (!pageTrashFile.renameTo(pageFile)) { - System.err - .println("[FileDataSource]: ERROR. I've tried moving previously moved page file from the trash, but there was some problem. This is not good and there is nothing i can do about it. The error ocured while moving " - + pageFileTrashName + " to " + pageFileName); - } - - return false; - } - - return true; - } else { - // no such page - log.error("There is now such page: " + pageName); - return false; - } - } - - public synchronized boolean deleteAttachment(String pageName, - String attachmentName) { - - String attName = pathToAttachments + "/" + pageName + "-att/" - + attachmentName + "-dir"; - String attTrashNameBase = pathToAttTrash + "/" + pageName + "-att/" - + attachmentName + "-dir"; - String attTrashName = attTrashNameBase; - - // create dirs to trash - File trashFileDir = new File(pathToAttTrash + "/" + pageName + "-att/"); - if (!trashFileDir.exists()) { - trashFileDir.mkdirs(); - } - - // moving file directory - File attFile = new File(attName); - - if (attFile.exists()) { - - // look if att dir is already in trash (add i-bak) - File attTrashFile = new File(attTrashName); - - int i = 0; - - if (attTrashFile.exists()) { - while (attTrashFile.exists()) { - attTrashName = attTrashNameBase + "-" + (i++) + "-bak"; - attTrashFile = new File(attTrashName); - } - - } - - if (!attFile.renameTo(attTrashFile)) { - log.error("[ATTACHMENT DS]:Problems with moving " + attName - + " to " + attTrashName); - return false; - } - - return true; - } else { - log.error("Page " + pageName + " has no " + attachmentName - + " attachmnet"); - return false; - } - } - - public synchronized boolean deleteAttachments(String pageName) { - String attName = pathToAttachments + "/" + pageName + "-att"; - String attTrashNameBase = pathToAttTrash + "/" + pageName + "-att"; - String attTrashName = attTrashNameBase; - - // create dirs to trash - File trashFileDir = new File(pathToAttTrash + "/" + pageName); - if (!trashFileDir.exists()) { - trashFileDir.mkdirs(); - } - - // moving file directory - File attFile = new File(attName); - - if (attFile.exists()) { - // look if att dir is already in trash (add i-bak) - File attTrashFile = new File(attTrashName); - - int i = 0; - - if (attTrashFile.exists()) { - while (attTrashFile.exists()) { - attTrashName = attTrashNameBase + "-" + (i++) + "-bak"; - attTrashFile = new File(attTrashName); - } - - } - - if (!attFile.renameTo(new File(attTrashName))) { - log.error("[ATTACHMENT DS]:Problems with moving " + attName - + " to " + attTrashName); - return false; - } - - return true; - } else { - log.error("Page " + pageName + " has no attachmnets"); - return false; - } - } - - public String getRealName(String uid) { - while (lock) - ; // wait till unlocked (dictionary is changing) - - return (pageDictionary.getProperty(uid) != null) ? pageDictionary - .getProperty(uid) : uid; - } - - public String getUid(String realName) { - while (lock) - ; // wait till unlocked (dictionary is changing) - - return (pageRevDictionary.getProperty(realName) != null) ? pageRevDictionary - .getProperty(realName) - : realName; - } - - public synchronized void rename(String uid, String newName) - throws PageRenamingException { - - lock = true; - - pageDictionary.setProperty(uid, newName); - pageRevDictionary.setProperty(newName, uid); - - saveDictionary(); - - log.info("Renamed (uid) " + uid + " to " + newName); - - lock = false; - } - - private void saveDictionary() { - // synchronize dictionary with file on disk - FileOutputStream fos; - try { - fos = new FileOutputStream(pageDictionaryFile); - - try { - pageDictionary.store(fos, SAVE_COMMENT); - } catch (IOException e) { - e.printStackTrace(); - } - - try { - fos.close(); - } catch (IOException e) { - e.printStackTrace(); - } - - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - public boolean uidInDictionary(String uid) { - return pageDictionary.contains(uid); - } - - public boolean realNameInDictionary(String realName) { - return pageRevDictionary.contains(realName); - } - - public synchronized void removeDictForPage(String uid) - throws PageRenamingException { - if (!pageDictionary.containsKey(uid)) { - throw new PageRenamingException( - "There is no dictionary entry for uid: " + uid); - } - - String realName = pageDictionary.getProperty(uid); - - // remove all dict entries - pageDictionary.remove(uid); - pageRevDictionary.remove(realName); - - saveDictionary(); - } - - public Properties getMetadataProps(String uid) { - - if (!pageExists(uid)) { - // don't get matedata props for nonexisting page - return new Properties(); - } - - File propsFile = new File(pathToMedia + "/OLD/" + uid - + "/metadata.properties"); - - if (!propsFile.exists()) { - - // create file if it doesn't exist yet - try { - propsFile.createNewFile(); - } catch (IOException e) { - log.error(e); - } - } - - Properties props = new Properties(); - FileInputStream fis = null; - - try { - fis = new FileInputStream(propsFile); - } catch (FileNotFoundException e1) { - log.error(e1); - } - - try { - props.load(fis); - } catch (IOException e) { - log.error(e); - } - - try { - fis.close(); - } catch (IOException e) { - log.error(e); - } - - return props; - } - - public void saveMetadataProps(String uid, Properties props) { - getMetadataProps(uid); // this will create file if needed. - - File propsFile = new File(pathToMedia + "/OLD/" + uid - + "/metadata.properties"); - - FileOutputStream fos = null; - - try { - fos = new FileOutputStream(propsFile); - } catch (FileNotFoundException e) { - log.error(e); - } - - try { - props.store(fos, SAVE_COMMENT); - } catch (IOException e) { - log.error(e); - } - - try { - fos.close(); - } catch (IOException e) { - log.error(e); - } - } - - public void setLanguageCode(String langCode) { - init(OTHER_LANG_DIR + langCode); - - this.langCode = langCode; - } - - public Map<String, String> getAvailableLanguages() { - Properties props = new Properties(); - - Map<String, String> map = new TreeMap<String, String>(); - - map.put(wikiEngine.defaultLangugeCode, wikiEngine.getAllLanguageCodes() - .get(wikiEngine.defaultLangugeCode)); - - try { - File f = new File(pathToMedia + "/" + LANG_FILE); - - if (!f.exists()) { - f.createNewFile(); - } - - FileInputStream fis = new FileInputStream(f); - - props.load(fis); - - HashMap mapd = new HashMap(props); - - map.putAll((Map<String, String>) mapd); - } catch (IOException e) { - log.error("Couldn't load properties with language list", e); - } - - return map; - } - - public void addLangCode(String langCode, String langDesc) { - Properties props = new Properties(); - - props.putAll(getAvailableLanguages()); - - props.put(langCode, langDesc); - - try { - File f = new File(pathToMedia + "/" + LANG_FILE); - - FileOutputStream fos = new FileOutputStream(f); - - props.store(fos, SAVE_COMMENT); - } catch (IOException e) { - log.error("Couldn't save properties with language list", e); - } - - } - - public String getLangCode() { - return langCode; - } - - public Map<String, String> getRenameMapings() { - Map<String,String> map = new HashMap<String, String>(); - - for (Object uid : pageDictionary.keySet()) { - map.put((String)uid, pageDictionary.getProperty((String)uid)); - } - - return map; - } - -} Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java) Copied: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileWikiPageDictionary.java (from rev 4094, labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileWikiPageDictionary.java) Modified: labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java =================================================================== --- labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java 2006-05-04 18:16:20 UTC (rev 4094) +++ labs/jbosslabs/branches/Labs-Portal-2.0-ComTheme/forge/porta... [truncated message content] |