Author: szimano Date: 2006-04-26 13:25:40 -0400 (Wed, 26 Apr 2006) New Revision: 3975 Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java Log: utf-8 page names working ! http://jira.jboss.com/jira/browse/JBWIKI-86 Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -23,29 +23,29 @@ import java.io.File; import java.io.FileInputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.StringReader; -import java.io.StringWriter; import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; 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. @@ -277,10 +277,6 @@ String editedPageName = convertedParameters.get("editedPage"); - log.info("Edited name: " + editedPageName - + " name (not converted): " - + convertedParameters.get("editedPage")); - // unlock page WikiPage edPage = wikiEngine.getByName(editedPageName, wikiContext, (String) convertedParameters.get("language")); Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -150,9 +150,10 @@ + request.getServerPort()); wikiSession.setAttribute("hostURL", hostURL); - - String requestURI = URLDecoder.decode(httpRequest.getRequestURI(), "UTF-8"); + String requestURI = URLDecoder.decode(httpRequest.getRequestURI(), + "UTF-8"); + // get off "/wiki/" from the begining requestURI = requestURI.substring("/wiki/".length()); @@ -191,32 +192,35 @@ } // 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++) - //uppercase or UTF character - if (!Character.isUpperCase(tokens[i].charAt(0)) || tokens[i].charAt(0) > 127) { + // uppercase or UTF character + if (!(Character.isUpperCase(tokens[i].charAt(0)) || tokens[i] + .charAt(0) > 127)) { isAllUpperCase = false; break; } @@ -227,12 +231,13 @@ for (int i = 0; i < tokens.length; 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) { 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"); @@ -301,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/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jsp/Edit.jsp 2006-04-26 17:25:40 UTC (rev 3975) @@ -30,7 +30,7 @@ <hr /> <div style="color:#FF0000"><%=lockMsg%></div> -<form method="post" action="<%=actionURL%>" accept-charset="utf-8"> +<form method="post" action="<%=actionURL%>" accept-charset="UTF-8"> Language: <%=curLang %> <textarea name="wikiContent" rows="40" cols="80" style="width:100%;"><%=wikiContent%></textarea> <input type="hidden" name="editedPage" value="<%=wikiPage%>" /> Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -27,51 +27,25 @@ public class FileDSCommons { - private static final String UNICODE = "uuuniCode"; - - private static String byteToHex(byte b) { - // Returns hex String representation of byte b - char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'a', 'b', 'c', 'd', 'e', 'f' }; - char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] }; - return new String(array); - } // end of method byteToHex - - private static String charToHex(char c) { - // Returns hex String representation of char c - byte hi = (byte) (c >>> 8); - byte lo = (byte) (c & 0xff); - return byteToHex(hi) + byteToHex(lo); - } // end of method - - private static String toEscape(char c) { // instead of this method - // charToHex() can be used - // int n = (int)c; - // String body = Integer.toHexString(n); - String body = charToHex(c); // instead of this the above can be used - String zeros = "000"; - return (UNICODE + zeros.substring(0, 4 - body.length()) + body); - } + private static final String SLASH = "/"; - private static String translateString(String s) { - StringBuilder builder = new StringBuilder(); - - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) > 127) { - builder.append(toEscape(s.charAt(i))); - } - else { - builder.append(s.charAt(i)); - } + private static final String ENCODING = "UTF-8"; + + private static String translatedSlash; + + static { + try { + translatedSlash = URLEncoder.encode(SLASH, ENCODING); + } catch (UnsupportedEncodingException e) { + // there's nothing we can do + e.printStackTrace(); } - - return builder.toString(); } public static String translateToFileName(String pageName) { - //return translateString(pageName); + try { - return URLEncoder.encode(pageName, "UTF-8"); + return URLEncoder.encode(pageName, ENCODING).replaceAll(translatedSlash, SLASH); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return pageName; @@ -79,9 +53,9 @@ } public static String translateToPageName(String fileName) { - //return fileName.replaceAll(UNICODE, "\\u"); + try { - return URLDecoder.decode(fileName, "UTF-8"); + return URLDecoder.decode(fileName.replaceAll(SLASH, translatedSlash), ENCODING); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return fileName; Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -244,15 +244,15 @@ newPageFile = new File(pathToMedia + "/OLD/" + uidTranslated + "/page.properties"); - FileOutputStream pageWriter = new FileOutputStream(newPageFile); + FileOutputStream pageProps = new FileOutputStream(newPageFile); Properties properties = new Properties(); properties.setProperty(page.getLastVersion() + ".author", page .getLastAuthor().getName()); - properties.store(pageWriter, SAVE_COMMENT); + properties.store(pageProps, SAVE_COMMENT); - pageWriter.close(); + pageProps.close(); String pageDirName = pathToMedia; String[] pageNames = uidTranslated.split("/"); @@ -265,8 +265,8 @@ pageDir.mkdirs(); - pageWriter = new FileOutputStream(new File(pathToMedia + "/" - + uidTranslated + ".txt")); + FileWriter pageWriter = new FileWriter(new File(pathToMedia + + "/" + uidTranslated + ".txt")); String pageContent = page.getContent(); @@ -602,8 +602,9 @@ File pageFile = new File(pathToMedia + "/" + FileDSCommons.translateToFileName(pageName) + ".txt"); - log.debug("PAGE EXISTS ("+pageName+"): "+pathToMedia + "/" - + FileDSCommons.translateToFileName(pageName) + ".txt FILE: "+pageFile.getAbsolutePath()); + log.debug("PAGE EXISTS (" + pageName + "): " + pathToMedia + "/" + + FileDSCommons.translateToFileName(pageName) + ".txt FILE: " + + pageFile.getAbsolutePath()); if (pageFile.exists()) { return true; } else { @@ -623,18 +624,25 @@ File attDir = new File(pathToMedia + "/" + directory); File[] pageFiles = attDir.listFiles(); + int i; - for (int i = 0; i < pageFiles.length; i++) { + for (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)); + attSet + .add((FileDSCommons.translateToPageName(directory) + + "/" + FileDSCommons + .translateToPageName(pageFiles[i].getName() + .substring( + 0, + pageFiles[i].getName().length() + - ".txt".length()))) + .substring(1)); } } - for (int i = 0; i < pageFiles.length; i++) { + for (i = 0; i < pageFiles.length; i++) { if ((pageFiles[i].isDirectory()) && (!pageFiles[i].getName().endsWith("-att"))) { @@ -665,7 +673,8 @@ public Set<String> getPagesFor(String pageName) { Set<String> pages = new TreeSet<String>(); - File pageDir = new File(pathToMedia + "/" + pageName); + File pageDir = new File(pathToMedia + "/" + + FileDSCommons.translateToFileName(pageName)); if ((pageDir.exists()) && (pageDir.isDirectory())) { getPagesInside(pageDir, pages, pageName); @@ -682,13 +691,16 @@ && (subFiles[i].getName().endsWith(".txt"))) { pages.add(prefix + "/" - + subFiles[i].getName().substring( - 0, - subFiles[i].getName().length() - - ".txt".length())); + + FileDSCommons.translateToPageName(subFiles[i] + .getName().substring( + 0, + subFiles[i].getName().length() + - ".txt".length()))); } else if (subFiles[i].isDirectory()) { - getPagesInside(subFiles[i], pages, prefix + "/" - + subFiles[i].getName()); + getPagesInside(subFiles[i], pages, prefix + + "/" + + FileDSCommons.translateToPageName(subFiles[i] + .getName())); } } } Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/RenamePageWatcher.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -65,26 +65,23 @@ e.printStackTrace(); } } else { - try { - wikiEngine.getS().acquire(); - } catch (InterruptedException e) { - e.printStackTrace(); - } + + synchronized (wikiEngine) { - for (int i = 0; i < uids.size(); i++) { - try { - wikiPageDictionary - .rename(uids.get(i), realNames.get(i)); - } catch (PageRenamingException e) { - e.printStackTrace(); + for (int i = 0; i < uids.size(); i++) { + try { + wikiPageDictionary.rename(uids.get(i), realNames + .get(i)); + } catch (PageRenamingException e) { + e.printStackTrace(); + } } - } - // clear tables - uids.clear(); - realNames.clear(); + // clear tables + uids.clear(); + realNames.clear(); - wikiEngine.getS().release(); + } runs = false; @@ -96,7 +93,7 @@ + pageToRemove, e); } } - + // clear pages to remove pagesToRemove.clear(); } Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2006-04-26 14:56:28 UTC (rev 3974) +++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2006-04-26 17:25:40 UTC (rev 3975) @@ -85,7 +85,7 @@ private Set<Integer> editedPages; - private Semaphore s = new Semaphore(1); + //private Semaphore s = new Semaphore(1); private Class credentialsClass; @@ -127,11 +127,11 @@ public synchronized WikiPage getByName(String pageName, WikiContext wikiContext, LanguageDataSource dataSource) { - try { + /*try { s.acquire(); } catch (InterruptedException e) { e.printStackTrace(); - } + }*/ String realPageName = getUid(pageName, dataSource.getLanguageCode()); @@ -139,7 +139,7 @@ if (!dataSource.getMediaDataSource().preGet()) { log.error("Couldn't get page"); - s.release(); + //s.release(); return null; } @@ -160,7 +160,7 @@ if (((wikiContext != null) && (ret != null) && (!ret.isViewable(wikiContext.getUser())) && (!wikiContext .getUser().isAdmin()))) { - s.release(); + //s.release(); ret = new WikiPage(realPageName, null, "I am sorry, but you are not allowed to see this page", 0, 0, new Date(), this, false, false, null, null, 0, @@ -177,10 +177,10 @@ if (ret != null) { if (wikiContext != null) { - s.release(); + //s.release(); return wikiContext.process(ret); } else { - s.release(); + //s.release(); return ret; } } else { @@ -193,10 +193,10 @@ } if (wikiContext != null) { - s.release(); + //s.release(); return wikiContext.process(ret); } else { - s.release(); + //s.release(); return ret; } } @@ -210,11 +210,11 @@ public synchronized WikiPage getByName(String pageName, WikiContext wikiContext, int version, LanguageDataSource dataSource) { - try { + /*try { s.acquire(); } catch (InterruptedException e) { e.printStackTrace(); - } + }*/ String realPageName = getUid(pageName, dataSource.getLanguageCode()); @@ -236,10 +236,10 @@ if (ret != null) { if (wikiContext != null) { - s.release(); + //s.release(); return wikiContext.process(ret); } else { - s.release(); + //s.release(); return ret; } } else { @@ -250,7 +250,7 @@ * (wikiContext != null) { return wikiContext.process(ret); } else { * return ret; } */ - s.release(); + //s.release(); return null; } } @@ -981,9 +981,9 @@ editedPages.add(editSessionId); } - public Semaphore getS() { + /*public Semaphore getS() { return s; - } + }*/ public HashMap<String, String> getPagesWaiting(String langCode) { return languageDataSources.get(langCode).getRenamePageWatcher() |