[jboss-svn-commits] JBL Code SVN: r8074 - in labs/jbosslabs/trunk/portal-extensions/jbosswiki: forge-wiki forge-wiki/src/java/org/jboss/wiki forge-wiki/src/java/org/jboss/wiki/attributesextractor forge-wiki/src/java/org/jboss/wiki/autorization forge-wiki/src/java/org/jboss/wiki/fileaccess forge-wiki/src/java/org/jboss/wiki/helper forge-wiki/src/java/org/jboss/wiki/portlet forge-wiki/src/java/org/jboss/wiki/ui forge-wiki/src/web forge-wiki/src/web/WEB-INF forge-wiki/src/web/views wiki-common/src/etc wiki-common/src/etc/images wiki-common/src/etc/org/jboss/wiki wiki-common/src/java/org/jboss/wiki wiki-common/src/java/org/jboss/wiki/plugins

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Dec 5 14:51:55 EST 2006


Author: szimano
Date: 2006-12-05 14:51:38 -0500 (Tue, 05 Dec 2006)
New Revision: 8074

Added:
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortletOld.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/AttributesExtractor.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/PortletAttributesExctractor.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/autorization/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/autorization/AuthorizationListener.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/helper/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/helper/WikiHelper.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/PortletWikiSession.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/WikiPortletMyFaces.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiView.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/Messages.properties
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/faces-config.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/wiki.taglib.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/index.xhtml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_template.xhtml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_view.xhtml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDirWikiPageDictionary.java
Removed:
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java
Modified:
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.properties
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.xml
   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/jboss-portlet.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/portlet.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/web.xml
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/images/wikiStyle.css
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/wikiPlugins.properties
   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/WikiEngine.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/SubpagesListPlugin.java
   labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TrailPlugin.java
Log:
jsf controller reimplementation sceleton JBWIKI-96


Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.properties
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.properties	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.properties	2006-12-05 19:51:38 UTC (rev 8074)
@@ -3,4 +3,4 @@
 maven.war.src=${basedir}/src/web
 maven.jar.includes=**/WikiEngine.class
 maven.ejb.includes=**/WikiService*
-maven.ear.final.name=wiki.ear
\ No newline at end of file
+maven.ear.final.name=wiki.ear

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/project.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -134,5 +134,41 @@
 		    <version>1.0</version>
 		    <jar>portal-portlet-lib.jar</jar>
 		</dependency>
+		
+		<dependency>
+      		<groupId>myfaces</groupId>
+      		<artifactId>myfaces-api</artifactId>
+      		<version>1.1.4</version>
+    		</dependency>
+	    <dependency>
+	      	<groupId>myfaces</groupId>
+	      	<artifactId>myfaces-impl</artifactId>
+	      	<version>1.1.4</version>
+	    </dependency>
+	    
+	    <dependency>
+	      	<groupId>facelets</groupId>
+	      	<artifactId>jsf-facelets</artifactId>
+	      	<version>1.0</version>
+	      	<jar>jsf-facelets.jar</jar>
+	    </dependency>
+	     <dependency>
+	      	<groupId>facelets</groupId>
+	      	<artifactId>el-api</artifactId>
+	      	<version>1.0</version>
+	      	<jar>el-api.jar</jar>
+	    </dependency>
+	     <dependency>
+	      	<groupId>facelets</groupId>
+	      	<artifactId>el-ri</artifactId>
+	      	<version>1.0</version>
+	      	<jar>el-ri.jar</jar>
+	    </dependency>
+	     <dependency>
+	      	<groupId>facelets</groupId>
+	      	<artifactId>jsf-facelets-portlet</artifactId>
+	      	<version>1.0</version>
+	      	<jar>jsf-facelets-portlet.jar</jar>
+	    </dependency>
     </dependencies>
 </project>

Deleted: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/PortletWikiSession.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -1,51 +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 javax.portlet.PortletSession;
-
-public class PortletWikiSession implements WikiSession {
-
-	PortletSession portletSession;
-	
-	public Object getAttribute(String attributeName) {
-		return portletSession.getAttribute(attributeName);
-	}
-
-	public void setAttribute(String attributeName, Object attribute) {
-		portletSession.setAttribute(attributeName, attribute);
-	}
-
-	public void removeAttribute(String attributeName) {
-		portletSession.removeAttribute(attributeName);
-	}
-	
-	public PortletWikiSession(PortletSession portletSession) {
-		this.portletSession = portletSession;
-	}
-
-	public String getId() {
-		return portletSession.getId();
-	}
-
-}

Deleted: 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-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -1,638 +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.UnsupportedEncodingException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import javax.portlet.ActionRequest;
-import javax.portlet.ActionResponse;
-import javax.portlet.GenericPortlet;
-import javax.portlet.PortletConfig;
-import javax.portlet.PortletException;
-import javax.portlet.PortletSession;
-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.WikiServiceManagement;
-
-/**
- * The WikiPortlet.
- * <p>
- * 
- * @author <a href="mailto:dsicore at jboss.org">Damon Sicore</a>
- * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
- * @version $Id$
- */
-
-public class WikiPortlet extends GenericPortlet {
-
-	final static String jspPath = "/WEB-INF/jsp/";
-
-	private static final String WINDOWS_FILE_NAME = "\\w:\\\\.+";
-
-	private String defaultPage = "Main";
-
-	private WikiEngine wikiEngine;
-
-	private Logger log;
-
-	public void init() {
-		log = Logger.getLogger(WikiPortlet.class);
-
-		WikiCommon wikiCommon = new WikiCommon();
-
-		try {
-			WikiServiceManagement wikiServiceMenagement = wikiCommon
-					.getWikiManagement();
-			wikiEngine = wikiServiceMenagement.getWikiEngine();
-		} catch (WikiManagementNotFoundException e1) {
-			log.error("Couldn't find WikiManagement", e1);
-			wikiEngine = new WikiEngine();
-		}
-	}
-
-	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
-
-		WikiContext wikiContext = null;
-
-		if (PortletDiskFileUpload.isMultipartContent(rReq)) {
-			PortletDiskFileUpload dfu = new PortletDiskFileUpload();
-
-			// maximum allowed file upload size (10 MB)
-			dfu.setSizeMax(10 * 1000 * 1000);
-
-			// maximum size in memory (vs disk) (100 KB)
-			dfu.setSizeThreshold(100 * 1000);
-
-			try {
-				// get the FileItems
-				List fileItems = dfu.parseRequest(rReq);
-				Iterator iter = fileItems.iterator();
-				while (iter.hasNext()) {
-					FileItem item = (FileItem) iter.next();
-					if (item.isFormField()) {
-						// pass along to render request
-						String fieldName = item.getFieldName();
-						String value = item.getString();
-						rResp.setRenderParameter(fieldName, value);
-					} else {
-						// write the uploaded file to a new location
-						String fieldName = item.getFieldName();
-						String fileName = item.getName();
-
-						// change windows names (remove c:\bull\shit\)
-						if (fileName.matches(WINDOWS_FILE_NAME)) {
-							fileName = fileName.substring(fileName
-									.lastIndexOf('\\') + 1, fileName.length());
-						}
-
-						if (fileName.length() == 0) {
-							throw new FileUploadException("Wrong file name: "
-									+ item.getName());
-						}
-
-						// delete spaces
-
-						while (fileName.indexOf(' ') != -1) {
-							Character chr = fileName.charAt(fileName
-									.indexOf(' ') + 1);
-
-							fileName = fileName.substring(0, fileName
-									.indexOf(' '))
-									+ (char) Character.toUpperCase(chr)
-									+ fileName.substring(
-											fileName.indexOf(' ') + 2, fileName
-													.length());
-						}
-
-						String tempDir = System.getProperty("java.io.tmpdir");
-						String serverFileName = fieldName + fileName
-								+ "-portlet.tmp";
-
-						File serverFile = new File(tempDir, serverFileName);
-
-						item.write(serverFile);
-
-						log.info("serverFileName : " + tempDir + "/"
-								+ serverFileName + " filename: " + fileName);
-
-						WikiPage pageWithAtt = wikiEngine.getByName(
-								convertedParameters.get("page"), null,
-								(String) convertedParameters.get("language"));
-
-						FileInputStream fis = new FileInputStream(serverFile);
-
-						pageWithAtt.addAttachement(fis, fileName, credentials
-								.getName());
-
-						// at the end delete the temp file
-						serverFile.delete();
-					}
-				}
-			} catch (FileUploadException fue) {
-				String msg = "File Upload Exception: " + fue.getMessage();
-				rResp.setRenderParameter("error", msg);
-				getPortletContext().log(msg, fue);
-			} catch (Exception e) {
-				String msg = "Exception: " + e.getMessage();
-				rResp.setRenderParameter("error", msg);
-				getPortletContext().log(msg, e);
-			}
-		}
-
-		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
-				sBuf.setCharAt(0, Character.toUpperCase(sBuf.charAt(0)));
-			}
-
-			//
-			// Capitalise words in subpages
-			//
-
-			for (int i = 0; i < sBuf.length() - 1; i++) {
-				if ((sBuf.charAt(i) == '/')
-						&& (Character.isLowerCase(sBuf.charAt(i + 1)))) {
-					sBuf.setCharAt(i + 1, Character.toUpperCase(sBuf
-							.charAt(i + 1)));
-				}
-			}
-
-			rResp.setRenderParameter("page", sBuf.toString());
-
-		}
-
-		if (convertedParameters.get("searchQuery") != null) {
-			Map<String, Integer> pages = wikiEngine.findPages(
-					convertedParameters.get("searchQuery"),
-					(String) convertedParameters.get("language"));
-
-			rReq.getPortletSession().setAttribute("findResult", pages);
-
-			// show the results
-			rResp.setRenderParameter("page", "FindResult");
-		}
-
-		int i = 1;
-
-		while (convertedParameters.get("var" + i) != null) {
-			rReq.getPortletSession().setAttribute("var" + i,
-					convertedParameters.get("var" + i));
-			i++;
-		}
-
-		if (convertedParameters.get("action") != null) {
-			rResp.setRenderParameter("action", convertedParameters
-					.get("action"));
-		}
-
-		if (convertedParameters.get("type") != null) {
-			rResp.setRenderParameter("type", convertedParameters.get("type"));
-		}
-
-		if (convertedParameters.get("version") != null) {
-			log.info("[process action]Getting page "
-					+ convertedParameters.get("page") + " at version "
-					+ convertedParameters.get("version"));
-			rResp.setRenderParameter("version", convertedParameters
-					.get("version"));
-		}
-
-		if (convertedParameters.get("language") != null) {
-			rResp.setRenderParameter("language", (String) convertedParameters
-					.get("language"));
-		} else {
-			rResp.setRenderParameter("language", wikiEngine.defaultLangugeCode);
-		}
-
-		if (convertedParameters.get("editAction") != null) {
-			log.debug("EDITING PAGE");
-
-			String editedPageName = convertedParameters.get("editedPage");
-
-			// unlock page
-			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) convertedParameters
-								.get("editSessionId")));
-			}
-
-			// saving, previewing or canceling
-
-			if (convertedParameters.get("editAction").equals("Save")) {
-
-				// save the page
-
-				if (edPage == null) {
-					edPage = new WikiPage(editedPageName, credentials, "", 0,
-							0, new Date(), wikiEngine, true, true, null, null,
-							0, (String) convertedParameters.get("language"));
-				}
-
-				// set new content
-				edPage.setContent(convertedParameters.get("wikiContent"));
-
-				// set author name for new version
-				edPage.setLastAuthor(credentials);
-
-				// increase page version
-				edPage.setLastVersion(edPage.getLastVersion() + 1);
-
-				// set new data
-				edPage.setEditDate(new Date());
-
-				// save the page
-				try {
-					edPage.save(credentials, Integer
-							.valueOf((String) convertedParameters
-									.get("editSessionId")),
-							(String) convertedParameters.get("language"),
-							new PortletWikiSession(rReq.getPortletSession()));
-				} catch (NumberFormatException e) {
-					log.error(e);
-				} catch (EditSessionExpired e) {
-					rReq.setAttribute("errorMsg", e.getMessage());
-					log.error(e);
-				} catch (WikiSaveException e) {
-					rReq.setAttribute("errorMsg", e.getMessage());
-					log.error(e);
-				} catch (EditingNotAllowedException e) {
-					rReq.setAttribute("errorMsg", e.getMessage());
-					log.error(e);
-				}
-
-				// and finally remove old page object from memory to force
-				// reloading it
-				wikiEngine.refreshPage(edPage.getName(), edPage.getLangCode());
-			}
-		}
-
-	}
-
-	public void doView(RenderRequest rReq, RenderResponse rRes)
-			throws PortletException, java.io.IOException {
-		try {
-			WikiSession wikiSession = new PortletWikiSession(rReq
-					.getPortletSession());
-
-			Credentials credentials = wikiEngine.getCredentialsInstance(rReq);
-
-			String langCode = rReq.getParameter("language");
-
-			String wikiURL = rRes.createActionURL().toString() + "&language="
-					+ langCode;
-			
-			log.info(wikiURL);
-
-			rReq.setAttribute("actionURL", wikiURL);
-
-			if (langCode == null) {
-				langCode = wikiEngine.defaultLangugeCode;
-			}
-
-			boolean showPage = true;
-
-			// Create server host and put it into session for plugins
-			String hostURL = ((rReq.isSecure()) ? "https" : "http")
-					+ "://"
-					+ rReq.getServerName()
-					+ ((rReq.getServerPort() == 80) ? "" : ":"
-							+ rReq.getServerPort());
-
-			prepareSession(rReq.getPortletSession(), credentials, hostURL, wikiURL, rReq.isSecure());
-
-			/*
-			 * WikiPage noSuchPage = new WikiPage("", credentials, "There is no
-			 * such page. Click on EDIT to start it.", 0, 0, null,
-			 * wikiEngine.getMediaDataSource(), wikiEngine
-			 * .getAttachementDataSource(), true, true);
-			 */
-
-			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"))
-					&& (credentials.isLoggedIn())) {
-				page = "Edit.jsp";
-				showPage = false;
-
-				WikiContext editWikiContext = new WikiContext(credentials,
-						wikiEngine.getWikiType("edit"), wikiSession);
-
-				pageToShow = wikiEngine.getByName(wikiPage, editWikiContext,
-						langCode);
-
-				if ((pageToShow != null)
-						&& (!pageToShow.isEditable(credentials))) {
-					if (!credentials.isAdmin()) {
-						showPage = true;
-					}
-				} else {
-					if (rReq.getParameter("version") != null) {
-						// show previous version of page
-
-						log.info("Getting page " + wikiPage + " at version "
-								+ rReq.getParameter("version"));
-
-						if ((pageToShow.getLastVersion() > Integer.valueOf(rReq
-								.getParameter("version")))) {
-							pageToShow = wikiEngine
-									.getByName(wikiPage, editWikiContext,
-											Integer.valueOf(rReq
-													.getParameter("version")),
-											langCode);
-						}
-
-						if (pageToShow.getLastVersion() != pageToShow
-								.getVersion()) {
-							rReq.setAttribute("showedVersion", Integer
-									.valueOf(rReq.getParameter("version")));
-						}
-					} else {
-						pageToShow = wikiEngine.getByName(wikiPage,
-								editWikiContext, langCode);
-					}
-
-					if (pageToShow == null) {
-						// start editing new page
-						// wikiPage = defaultPage;
-
-						pageToShow = new WikiPage(wikiPage, credentials, "", 0,
-								0, new Date(), wikiEngine, true, true, null,
-								null, 0, langCode);
-						// wikiEngine.getByName(wikiPage, wikiContext);
-					}
-
-					int editSessionId = wikiEngine.getEditSessionId();
-
-					Date dateLock = wikiEngine.getByName(wikiPage, null,
-							langCode).lock(credentials, editSessionId);
-
-					rReq.setAttribute("editSessionId", String
-							.valueOf(editSessionId));
-
-					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";
-				showPage = false;
-
-				pageToShow = wikiEngine.getByName(wikiPage, null, langCode);
-
-				/*
-				 * if (pageToShow == null) { // if somebody entered a link to
-				 * info // non-existing page page = "Wiki.jsp"; try { pageToShow =
-				 * (WikiPage) noSuchPage.clone(); } catch
-				 * (CloneNotSupportedException cnse) { log.info(cnse); }
-				 * 
-				 * pageToShow.setName(wikiPage); } else {
-				 */
-				rReq.setAttribute("pageAtTop", pageToShow);
-
-			}
-
-			if (showPage) {
-				page = "Wiki.jsp";
-
-				String type = "html";
-
-				if (rReq.getParameter("type") != null) {
-					type = rReq.getParameter("type");
-					// log.info("Getting type: " + type);
-				}
-
-				wikiContext = new WikiContext(credentials, wikiEngine
-						.getWikiType(type), new PortletWikiSession(rReq
-						.getPortletSession()));
-
-				if (rReq.getParameter("version") != null) {
-					// show previous version of page
-					log.info("Getting page " + wikiPage + " at version "
-							+ rReq.getParameter("version"));
-					pageToShow = wikiEngine.getByName(wikiPage, wikiContext,
-							Integer.valueOf(rReq.getParameter("version")),
-							langCode);
-
-					if (pageToShow.getLastVersion() != pageToShow.getVersion()) {
-						rReq.setAttribute("showedVersion", Integer.valueOf(rReq
-								.getParameter("version")));
-					}
-				} else {
-					pageToShow = wikiEngine.getByName(wikiPage, wikiContext,
-							langCode);
-				}
-
-				/*
-				 * if (pageToShow == null) {
-				 * 
-				 * try { pageToShow = (WikiPage) noSuchPage.clone(); } catch
-				 * (CloneNotSupportedException cnse) { log.info(cnse); }
-				 * 
-				 * pageToShow.setName(wikiPage); }
-				 */
-
-			}
-
-			rReq
-					.setAttribute(
-							"wikiName",
-							"<img src=\""
-									+ hostURL
-									+ "/wiki/"
-									+ WikiCommon.wikiButtons
-									+ "/JBossWikiLogoMedium.png\" width=\"100\"  border=\"0\" style=\"vertical-align: middle\"/>");
-
-			rReq.setAttribute("wikiContent", pageToShow.getContent());
-
-			rReq.setAttribute("wikiImagesUrl", hostURL + "/wiki/"
-					+ WikiCommon.wikiButtons + "/");
-
-			rReq.setAttribute("wikiPage", pageToShow.getName());
-
-			rReq.setAttribute("editDate", pageToShow.getEditDate());
-
-			rReq.setAttribute("author", pageToShow.getLastAuthor());
-
-			rReq.setAttribute("logedIn", credentials.isLoggedIn());
-
-			rReq.setAttribute("defaultPage", defaultPage);
-
-			rReq.setAttribute("isEditable", pageToShow.isEditable(credentials));
-
-			rReq.setAttribute("isViewable", pageToShow.isViewable(credentials));
-
-			rReq.setAttribute("isAdmin", credentials.isAdmin());
-
-			rReq.setAttribute("usedLangs", wikiEngine.getUsedLanguageCodes());
-
-			rReq.setAttribute("currentLanguage", langCode);
-
-			rReq
-					.setAttribute(
-							"friendlyLink",
-							hostURL
-									+ "/wiki/"
-									+ ((!langCode
-											.equals(wikiEngine.defaultLangugeCode)) ? langCode
-											.toLowerCase()
-											+ "/"
-											: "") + pageToShow.getName());
-			rReq
-					.setAttribute(
-							"rssLink",
-							hostURL
-									+ "/wiki/"
-									+ ((!langCode
-											.equals(wikiEngine.defaultLangugeCode)) ? langCode
-											.toLowerCase()
-											+ "/"
-											: "") + "rss/"
-									+ pageToShow.getName());
-			rReq
-					.setAttribute(
-							"rdfLink",
-							hostURL
-									+ "/wiki/"
-									+ ((!langCode
-											.equals(wikiEngine.defaultLangugeCode)) ? langCode
-											.toLowerCase()
-											+ "/"
-											: "") + "rdf/"
-									+ pageToShow.getName());
-			rReq
-					.setAttribute(
-							"atomLink",
-							hostURL
-									+ "/wiki/"
-									+ ((!langCode
-											.equals(wikiEngine.defaultLangugeCode)) ? langCode
-											.toLowerCase()
-											+ "/"
-											: "") + "atom/"
-									+ pageToShow.getName());
-
-			rRes.setTitle("Wiki");
-			if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState())
-					|| javax.portlet.WindowState.MAXIMIZED.equals(rReq
-							.getWindowState())) {
-				rRes.setContentType("text/html; charset=UTF-8");
-				javax.portlet.PortletRequestDispatcher pRD = this
-						.getPortletContext().getRequestDispatcher(
-								jspPath + page);
-				pRD.include(rReq, rRes);
-				return;
-			}
-			doDispatch(rReq, rRes);
-		} catch (RuntimeException e) {
-			e.printStackTrace();
-			throw (e);
-		}
-	}
-
-	private void prepareSession(PortletSession portletSession,
-			Credentials credentials, String hostURL, String wikiURL, Boolean isSecure) {
-		// prepare some data for plugins in session
-		portletSession.setAttribute(WikiSession.CREDENTIALS, credentials);
-		portletSession.setAttribute(WikiSession.HOST_URL, hostURL);
-		portletSession.setAttribute(WikiSession.ACTION_URL, wikiURL);
-		portletSession.setAttribute(WikiSession.IS_SECURE, isSecure);
-	}
-}
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortletOld.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortletOld.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortletOld.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,639 @@
+/*
+ * 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.UnsupportedEncodingException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletSession;
+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.WikiServiceManagement;
+import org.jboss.wiki.portlet.PortletWikiSession;
+
+/**
+ * The WikiPortlet.
+ * <p>
+ * 
+ * @author <a href="mailto:dsicore at jboss.org">Damon Sicore</a>
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ * @version $Id$
+ */
+
+public class WikiPortletOld extends GenericPortlet {
+
+	final static String jspPath = "/WEB-INF/jsp/";
+
+	private static final String WINDOWS_FILE_NAME = "\\w:\\\\.+";
+
+	private String defaultPage = "Main";
+
+	private WikiEngine wikiEngine;
+
+	private Logger log;
+
+	public void init() {
+		log = Logger.getLogger(WikiPortletOld.class);
+
+		WikiCommon wikiCommon = new WikiCommon();
+
+		try {
+			WikiServiceManagement wikiServiceMenagement = wikiCommon
+					.getWikiManagement();
+			wikiEngine = wikiServiceMenagement.getWikiEngine();
+		} catch (WikiManagementNotFoundException e1) {
+			log.error("Couldn't find WikiManagement", e1);
+			wikiEngine = new WikiEngine();
+		}
+	}
+
+	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
+
+		WikiContext wikiContext = null;
+
+		if (PortletDiskFileUpload.isMultipartContent(rReq)) {
+			PortletDiskFileUpload dfu = new PortletDiskFileUpload();
+
+			// maximum allowed file upload size (10 MB)
+			dfu.setSizeMax(10 * 1000 * 1000);
+
+			// maximum size in memory (vs disk) (100 KB)
+			dfu.setSizeThreshold(100 * 1000);
+
+			try {
+				// get the FileItems
+				List fileItems = dfu.parseRequest(rReq);
+				Iterator iter = fileItems.iterator();
+				while (iter.hasNext()) {
+					FileItem item = (FileItem) iter.next();
+					if (item.isFormField()) {
+						// pass along to render request
+						String fieldName = item.getFieldName();
+						String value = item.getString();
+						rResp.setRenderParameter(fieldName, value);
+					} else {
+						// write the uploaded file to a new location
+						String fieldName = item.getFieldName();
+						String fileName = item.getName();
+
+						// change windows names (remove c:\bull\shit\)
+						if (fileName.matches(WINDOWS_FILE_NAME)) {
+							fileName = fileName.substring(fileName
+									.lastIndexOf('\\') + 1, fileName.length());
+						}
+
+						if (fileName.length() == 0) {
+							throw new FileUploadException("Wrong file name: "
+									+ item.getName());
+						}
+
+						// delete spaces
+
+						while (fileName.indexOf(' ') != -1) {
+							Character chr = fileName.charAt(fileName
+									.indexOf(' ') + 1);
+
+							fileName = fileName.substring(0, fileName
+									.indexOf(' '))
+									+ (char) Character.toUpperCase(chr)
+									+ fileName.substring(
+											fileName.indexOf(' ') + 2, fileName
+													.length());
+						}
+
+						String tempDir = System.getProperty("java.io.tmpdir");
+						String serverFileName = fieldName + fileName
+								+ "-portlet.tmp";
+
+						File serverFile = new File(tempDir, serverFileName);
+
+						item.write(serverFile);
+
+						log.info("serverFileName : " + tempDir + "/"
+								+ serverFileName + " filename: " + fileName);
+
+						WikiPage pageWithAtt = wikiEngine.getByName(
+								convertedParameters.get("page"), null,
+								(String) convertedParameters.get("language"));
+
+						FileInputStream fis = new FileInputStream(serverFile);
+
+						pageWithAtt.addAttachement(fis, fileName, credentials
+								.getName());
+
+						// at the end delete the temp file
+						serverFile.delete();
+					}
+				}
+			} catch (FileUploadException fue) {
+				String msg = "File Upload Exception: " + fue.getMessage();
+				rResp.setRenderParameter("error", msg);
+				getPortletContext().log(msg, fue);
+			} catch (Exception e) {
+				String msg = "Exception: " + e.getMessage();
+				rResp.setRenderParameter("error", msg);
+				getPortletContext().log(msg, e);
+			}
+		}
+
+		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
+				sBuf.setCharAt(0, Character.toUpperCase(sBuf.charAt(0)));
+			}
+
+			//
+			// Capitalise words in subpages
+			//
+
+			for (int i = 0; i < sBuf.length() - 1; i++) {
+				if ((sBuf.charAt(i) == '/')
+						&& (Character.isLowerCase(sBuf.charAt(i + 1)))) {
+					sBuf.setCharAt(i + 1, Character.toUpperCase(sBuf
+							.charAt(i + 1)));
+				}
+			}
+
+			rResp.setRenderParameter("page", sBuf.toString());
+
+		}
+
+		if (convertedParameters.get("searchQuery") != null) {
+			Map<String, Integer> pages = wikiEngine.findPages(
+					convertedParameters.get("searchQuery"),
+					(String) convertedParameters.get("language"));
+
+			rReq.getPortletSession().setAttribute("findResult", pages);
+
+			// show the results
+			rResp.setRenderParameter("page", "FindResult");
+		}
+
+		int i = 1;
+
+		while (convertedParameters.get("var" + i) != null) {
+			rReq.getPortletSession().setAttribute("var" + i,
+					convertedParameters.get("var" + i));
+			i++;
+		}
+
+		if (convertedParameters.get("action") != null) {
+			rResp.setRenderParameter("action", convertedParameters
+					.get("action"));
+		}
+
+		if (convertedParameters.get("type") != null) {
+			rResp.setRenderParameter("type", convertedParameters.get("type"));
+		}
+
+		if (convertedParameters.get("version") != null) {
+			log.info("[process action]Getting page "
+					+ convertedParameters.get("page") + " at version "
+					+ convertedParameters.get("version"));
+			rResp.setRenderParameter("version", convertedParameters
+					.get("version"));
+		}
+
+		if (convertedParameters.get("language") != null) {
+			rResp.setRenderParameter("language", (String) convertedParameters
+					.get("language"));
+		} else {
+			rResp.setRenderParameter("language", wikiEngine.defaultLangugeCode);
+		}
+
+		if (convertedParameters.get("editAction") != null) {
+			log.debug("EDITING PAGE");
+
+			String editedPageName = convertedParameters.get("editedPage");
+
+			// unlock page
+			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) convertedParameters
+								.get("editSessionId")));
+			}
+
+			// saving, previewing or canceling
+
+			if (convertedParameters.get("editAction").equals("Save")) {
+
+				// save the page
+
+				if (edPage == null) {
+					edPage = new WikiPage(editedPageName, credentials, "", 0,
+							0, new Date(), wikiEngine, true, true, null, null,
+							0, (String) convertedParameters.get("language"));
+				}
+
+				// set new content
+				edPage.setContent(convertedParameters.get("wikiContent"));
+
+				// set author name for new version
+				edPage.setLastAuthor(credentials);
+
+				// increase page version
+				edPage.setLastVersion(edPage.getLastVersion() + 1);
+
+				// set new data
+				edPage.setEditDate(new Date());
+
+				// save the page
+				try {
+					edPage.save(credentials, Integer
+							.valueOf((String) convertedParameters
+									.get("editSessionId")),
+							(String) convertedParameters.get("language"),
+							new PortletWikiSession(rReq.getPortletSession()));
+				} catch (NumberFormatException e) {
+					log.error(e);
+				} catch (EditSessionExpired e) {
+					rReq.setAttribute("errorMsg", e.getMessage());
+					log.error(e);
+				} catch (WikiSaveException e) {
+					rReq.setAttribute("errorMsg", e.getMessage());
+					log.error(e);
+				} catch (EditingNotAllowedException e) {
+					rReq.setAttribute("errorMsg", e.getMessage());
+					log.error(e);
+				}
+
+				// and finally remove old page object from memory to force
+				// reloading it
+				wikiEngine.refreshPage(edPage.getName(), edPage.getLangCode());
+			}
+		}
+
+	}
+
+	public void doView(RenderRequest rReq, RenderResponse rRes)
+			throws PortletException, java.io.IOException {
+		try {
+			WikiSession wikiSession = new PortletWikiSession(rReq
+					.getPortletSession());
+
+			Credentials credentials = wikiEngine.getCredentialsInstance(rReq);
+
+			String langCode = rReq.getParameter("language");
+
+			String wikiURL = rRes.createActionURL().toString() + "&language="
+					+ langCode;
+			
+			log.info(wikiURL);
+
+			rReq.setAttribute("actionURL", wikiURL);
+
+			if (langCode == null) {
+				langCode = wikiEngine.defaultLangugeCode;
+			}
+
+			boolean showPage = true;
+
+			// Create server host and put it into session for plugins
+			String hostURL = ((rReq.isSecure()) ? "https" : "http")
+					+ "://"
+					+ rReq.getServerName()
+					+ ((rReq.getServerPort() == 80) ? "" : ":"
+							+ rReq.getServerPort());
+
+			prepareSession(rReq.getPortletSession(), credentials, hostURL, wikiURL, rReq.isSecure());
+
+			/*
+			 * WikiPage noSuchPage = new WikiPage("", credentials, "There is no
+			 * such page. Click on EDIT to start it.", 0, 0, null,
+			 * wikiEngine.getMediaDataSource(), wikiEngine
+			 * .getAttachementDataSource(), true, true);
+			 */
+
+			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"))
+					&& (credentials.isLoggedIn())) {
+				page = "Edit.jsp";
+				showPage = false;
+
+				WikiContext editWikiContext = new WikiContext(credentials,
+						wikiEngine.getWikiType("edit"), wikiSession);
+
+				pageToShow = wikiEngine.getByName(wikiPage, editWikiContext,
+						langCode);
+
+				if ((pageToShow != null)
+						&& (!pageToShow.isEditable(credentials))) {
+					if (!credentials.isAdmin()) {
+						showPage = true;
+					}
+				} else {
+					if (rReq.getParameter("version") != null) {
+						// show previous version of page
+
+						log.info("Getting page " + wikiPage + " at version "
+								+ rReq.getParameter("version"));
+
+						if ((pageToShow.getLastVersion() > Integer.valueOf(rReq
+								.getParameter("version")))) {
+							pageToShow = wikiEngine
+									.getByName(wikiPage, editWikiContext,
+											Integer.valueOf(rReq
+													.getParameter("version")),
+											langCode);
+						}
+
+						if (pageToShow.getLastVersion() != pageToShow
+								.getVersion()) {
+							rReq.setAttribute("showedVersion", Integer
+									.valueOf(rReq.getParameter("version")));
+						}
+					} else {
+						pageToShow = wikiEngine.getByName(wikiPage,
+								editWikiContext, langCode);
+					}
+
+					if (pageToShow == null) {
+						// start editing new page
+						// wikiPage = defaultPage;
+
+						pageToShow = new WikiPage(wikiPage, credentials, "", 0,
+								0, new Date(), wikiEngine, true, true, null,
+								null, 0, langCode);
+						// wikiEngine.getByName(wikiPage, wikiContext);
+					}
+
+					int editSessionId = wikiEngine.getEditSessionId();
+
+					Date dateLock = wikiEngine.getByName(wikiPage, null,
+							langCode).lock(credentials, editSessionId);
+
+					rReq.setAttribute("editSessionId", String
+							.valueOf(editSessionId));
+
+					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";
+				showPage = false;
+
+				pageToShow = wikiEngine.getByName(wikiPage, null, langCode);
+
+				/*
+				 * if (pageToShow == null) { // if somebody entered a link to
+				 * info // non-existing page page = "Wiki.jsp"; try { pageToShow =
+				 * (WikiPage) noSuchPage.clone(); } catch
+				 * (CloneNotSupportedException cnse) { log.info(cnse); }
+				 * 
+				 * pageToShow.setName(wikiPage); } else {
+				 */
+				rReq.setAttribute("pageAtTop", pageToShow);
+
+			}
+
+			if (showPage) {
+				page = "Wiki.jsp";
+
+				String type = "html";
+
+				if (rReq.getParameter("type") != null) {
+					type = rReq.getParameter("type");
+					// log.info("Getting type: " + type);
+				}
+
+				wikiContext = new WikiContext(credentials, wikiEngine
+						.getWikiType(type), new PortletWikiSession(rReq
+						.getPortletSession()));
+
+				if (rReq.getParameter("version") != null) {
+					// show previous version of page
+					log.info("Getting page " + wikiPage + " at version "
+							+ rReq.getParameter("version"));
+					pageToShow = wikiEngine.getByName(wikiPage, wikiContext,
+							Integer.valueOf(rReq.getParameter("version")),
+							langCode);
+
+					if (pageToShow.getLastVersion() != pageToShow.getVersion()) {
+						rReq.setAttribute("showedVersion", Integer.valueOf(rReq
+								.getParameter("version")));
+					}
+				} else {
+					pageToShow = wikiEngine.getByName(wikiPage, wikiContext,
+							langCode);
+				}
+
+				/*
+				 * if (pageToShow == null) {
+				 * 
+				 * try { pageToShow = (WikiPage) noSuchPage.clone(); } catch
+				 * (CloneNotSupportedException cnse) { log.info(cnse); }
+				 * 
+				 * pageToShow.setName(wikiPage); }
+				 */
+
+			}
+
+			rReq
+					.setAttribute(
+							"wikiName",
+							"<img src=\""
+									+ hostURL
+									+ "/wiki/"
+									+ WikiCommon.wikiButtons
+									+ "/JBossWikiLogoMedium.png\" width=\"100\"  border=\"0\" style=\"vertical-align: middle\"/>");
+
+			rReq.setAttribute("wikiContent", pageToShow.getContent());
+
+			rReq.setAttribute("wikiImagesUrl", hostURL + "/wiki/"
+					+ WikiCommon.wikiButtons + "/");
+
+			rReq.setAttribute("wikiPage", pageToShow.getName());
+
+			rReq.setAttribute("editDate", pageToShow.getEditDate());
+
+			rReq.setAttribute("author", pageToShow.getLastAuthor());
+
+			rReq.setAttribute("logedIn", credentials.isLoggedIn());
+
+			rReq.setAttribute("defaultPage", defaultPage);
+
+			rReq.setAttribute("isEditable", pageToShow.isEditable(credentials));
+
+			rReq.setAttribute("isViewable", pageToShow.isViewable(credentials));
+
+			rReq.setAttribute("isAdmin", credentials.isAdmin());
+
+			rReq.setAttribute("usedLangs", wikiEngine.getUsedLanguageCodes());
+
+			rReq.setAttribute("currentLanguage", langCode);
+
+			rReq
+					.setAttribute(
+							"friendlyLink",
+							hostURL
+									+ "/wiki/"
+									+ ((!langCode
+											.equals(wikiEngine.defaultLangugeCode)) ? langCode
+											.toLowerCase()
+											+ "/"
+											: "") + pageToShow.getName());
+			rReq
+					.setAttribute(
+							"rssLink",
+							hostURL
+									+ "/wiki/"
+									+ ((!langCode
+											.equals(wikiEngine.defaultLangugeCode)) ? langCode
+											.toLowerCase()
+											+ "/"
+											: "") + "rss/"
+									+ pageToShow.getName());
+			rReq
+					.setAttribute(
+							"rdfLink",
+							hostURL
+									+ "/wiki/"
+									+ ((!langCode
+											.equals(wikiEngine.defaultLangugeCode)) ? langCode
+											.toLowerCase()
+											+ "/"
+											: "") + "rdf/"
+									+ pageToShow.getName());
+			rReq
+					.setAttribute(
+							"atomLink",
+							hostURL
+									+ "/wiki/"
+									+ ((!langCode
+											.equals(wikiEngine.defaultLangugeCode)) ? langCode
+											.toLowerCase()
+											+ "/"
+											: "") + "atom/"
+									+ pageToShow.getName());
+
+			rRes.setTitle("Wiki");
+			if (javax.portlet.WindowState.NORMAL.equals(rReq.getWindowState())
+					|| javax.portlet.WindowState.MAXIMIZED.equals(rReq
+							.getWindowState())) {
+				rRes.setContentType("text/html; charset=UTF-8");
+				javax.portlet.PortletRequestDispatcher pRD = this
+						.getPortletContext().getRequestDispatcher(
+								jspPath + page);
+				pRD.include(rReq, rRes);
+				return;
+			}
+			doDispatch(rReq, rRes);
+		} catch (RuntimeException e) {
+			e.printStackTrace();
+			throw (e);
+		}
+	}
+
+	private void prepareSession(PortletSession portletSession,
+			Credentials credentials, String hostURL, String wikiURL, Boolean isSecure) {
+		// prepare some data for plugins in session
+		portletSession.setAttribute(WikiSession.CREDENTIALS, credentials);
+		portletSession.setAttribute(WikiSession.HOST_URL, hostURL);
+		portletSession.setAttribute(WikiSession.ACTION_URL, wikiURL);
+		portletSession.setAttribute(WikiSession.IS_SECURE, isSecure);
+	}
+}
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/AttributesExtractor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/AttributesExtractor.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/AttributesExtractor.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,52 @@
+/*
+ * 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.attributesextractor;
+
+import org.jboss.wiki.Credentials;
+import org.jboss.wiki.WikiSession;
+
+/**
+ * AttributesExtractor.java
+ *
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public interface AttributesExtractor {
+	public String getHostURL();
+	
+	public String getAppContext();
+
+	public Credentials getCredentials();
+
+	public WikiSession getWikiSession();
+
+	public boolean isSecure();
+	
+	public String getOutputLink(Object request, Object response, boolean isAction);
+	
+	public String getParameter(Object response, String key);
+	
+	public String getRequestedPageName();
+	
+	public String getRequestedLanguage();
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/PortletAttributesExctractor.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/PortletAttributesExctractor.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/attributesextractor/PortletAttributesExctractor.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,173 @@
+/*
+ * 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.attributesextractor;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import javax.faces.context.FacesContext;
+import javax.portlet.PortletRequest;
+import javax.portlet.PortletURL;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.myfaces.portlet.MyFacesGenericPortlet;
+import org.jboss.logging.Logger;
+import org.jboss.wiki.Credentials;
+import org.jboss.wiki.WikiSession;
+import org.jboss.wiki.helper.WikiHelper;
+import org.jboss.wiki.portlet.PortletWikiSession;
+
+/**
+ * PortletAttributesExctractor.java
+ * 
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class PortletAttributesExctractor implements AttributesExtractor {
+
+	private final static Logger log = Logger
+			.getLogger(PortletAttributesExctractor.class);
+
+	private String hostURL;
+
+	private String appContext;
+
+	private WikiSession wikiSession;
+
+	private Credentials credentials;
+
+	private String page;
+
+	private boolean secure;
+
+	private String language;
+
+	public PortletAttributesExctractor(Object request) {
+		if (request instanceof PortletRequest) {
+			PortletRequest rReq = (PortletRequest) request;
+
+			// get all needed attributes
+			hostURL = ((rReq.isSecure()) ? "https" : "http")
+					+ "://"
+					+ rReq.getServerName()
+					+ ((rReq.getServerPort() == 80) ? "" : ":"
+							+ rReq.getServerPort());
+
+			appContext = rReq.getContextPath();
+
+			wikiSession = new PortletWikiSession(rReq.getPortletSession());
+
+			credentials = WikiHelper.getWikiEngine().getCredentialsInstance(
+					request);
+
+			secure = rReq.isSecure();
+
+			page = rReq.getParameter("page");
+
+			language = rReq.getParameter("language");
+
+		} else {
+			throw new IllegalArgumentException("Unknow type request: "
+					+ request);
+		}
+	}
+
+	public String getHostURL() {
+		return hostURL;
+	}
+
+	public String getAppContext() {
+		return appContext;
+	}
+
+	public Credentials getCredentials() {
+		return credentials;
+	}
+
+	public WikiSession getWikiSession() {
+		return wikiSession;
+	}
+
+	public boolean isSecure() {
+		return secure;
+	}
+
+	public String getOutputLink(Object request, Object response,
+			boolean isAction) {
+		if (response instanceof RenderResponse
+				&& request instanceof RenderRequest) {
+			RenderResponse portletResponse = (RenderResponse) response;
+			RenderRequest portletRequest = (RenderRequest) request;
+
+			PortletURL portletURL;
+			if (isAction) {
+				portletURL = portletResponse.createActionURL();
+			} else {
+				portletURL = portletResponse.createRenderURL();
+			}
+
+			String jsfUrl = portletURL.toString();
+
+			log.info("ViewID: "+FacesContext.getCurrentInstance()
+										.getViewRoot().getViewId());
+			try {
+				jsfUrl += "&"
+						+ MyFacesGenericPortlet.VIEW_ID
+						+ "="
+						+ URLEncoder.encode(FacesContext.getCurrentInstance()
+										.getViewRoot().getViewId(), "UTF-8");
+			} catch (UnsupportedEncodingException e) {
+				log.error(e);
+			}
+
+			return jsfUrl;
+
+		} else {
+			throw new IllegalArgumentException(
+					"response and request should be instance of class "
+							+ RenderResponse.class + " and "
+							+ RenderRequest.class);
+		}
+	}
+
+	public String getParameter(Object request, String key) {
+		if (request instanceof PortletRequest) {
+			PortletRequest rReq = (PortletRequest) request;
+
+			return rReq.getParameter(key);
+		} else {
+			throw new IllegalArgumentException("Unknow type request: "
+					+ request);
+		}
+	}
+
+	public String getRequestedPageName() {
+		return page;
+	}
+
+	public String getRequestedLanguage() {
+		return language;
+	}
+
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/autorization/AuthorizationListener.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/autorization/AuthorizationListener.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/autorization/AuthorizationListener.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,35 @@
+/*
+ * 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.autorization;
+
+import org.apache.myfaces.application.ActionListenerImpl;
+
+/**
+ * AuthorizationListener.java
+ *
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class AuthorizationListener extends ActionListenerImpl {
+
+}

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-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/fileaccess/WikiFileAccessFilter.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -328,7 +328,7 @@
 				// get pageName
 				String pageName = "";
 				for (int i = 0; i < tokens.length - 1; i++) {
-					pageName += "/" + tokens[i];
+					pageName += ((i > 0) ? "/" : "") + tokens[i];
 				}
 
 				String fileName = tokens[tokens.length - 1].substring("file:"

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/helper/WikiHelper.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/helper/WikiHelper.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/helper/WikiHelper.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,82 @@
+/*
+ * 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.helper;
+
+import javax.portlet.PortletRequest;
+
+import org.jboss.logging.Logger;
+import org.jboss.wiki.WikiCommon;
+import org.jboss.wiki.WikiEngine;
+import org.jboss.wiki.WikiSession;
+import org.jboss.wiki.attributesextractor.AttributesExtractor;
+import org.jboss.wiki.attributesextractor.PortletAttributesExctractor;
+import org.jboss.wiki.exceptions.WikiManagementNotFoundException;
+import org.jboss.wiki.management.WikiServiceManagement;
+
+/**
+ * WikiHelper.java
+ * 
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class WikiHelper {
+
+	private static WikiEngine wikiEngine;
+
+	private static final Logger log = Logger.getLogger(WikiHelper.class);
+
+	public static WikiEngine getWikiEngine() {
+		if (wikiEngine == null) {
+			try {
+				WikiServiceManagement wikiServiceMenagement = WikiCommon
+						.getWikiManagement();
+				wikiEngine = wikiServiceMenagement.getWikiEngine();
+			} catch (WikiManagementNotFoundException e1) {
+				log.error("Couldn't find WikiManagement", e1);
+				wikiEngine = new WikiEngine();
+			}
+		}
+		return wikiEngine;
+	}
+
+	public static AttributesExtractor getAttributesExtractor(Object request, Object response) {
+		AttributesExtractor extractor; 
+	
+		if (request instanceof PortletRequest) {
+			extractor = new PortletAttributesExctractor(request);
+		}
+		else {
+			throw new IllegalArgumentException("Unknow type request: "+request);
+		}
+		
+		extractor.getWikiSession().setAttribute(WikiSession.CREDENTIALS, extractor.getCredentials());
+		extractor.getWikiSession().setAttribute(WikiSession.HOST_URL, extractor.getHostURL());
+		
+		//TODO wikiURL
+		extractor.getWikiSession().setAttribute(WikiSession.ACTION_URL, extractor.getOutputLink(request, response, true));
+		extractor.getWikiSession().setAttribute(WikiSession.IS_SECURE, extractor.isSecure());
+		
+		return extractor;
+	}
+	
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/PortletWikiSession.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/PortletWikiSession.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/PortletWikiSession.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,53 @@
+/*
+ * 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.portlet;
+
+import javax.portlet.PortletSession;
+
+import org.jboss.wiki.WikiSession;
+
+public class PortletWikiSession implements WikiSession {
+
+	PortletSession portletSession;
+	
+	public Object getAttribute(String attributeName) {
+		return portletSession.getAttribute(attributeName);
+	}
+
+	public void setAttribute(String attributeName, Object attribute) {
+		portletSession.setAttribute(attributeName, attribute);
+	}
+
+	public void removeAttribute(String attributeName) {
+		portletSession.removeAttribute(attributeName);
+	}
+	
+	public PortletWikiSession(PortletSession portletSession) {
+		this.portletSession = portletSession;
+	}
+
+	public String getId() {
+		return portletSession.getId();
+	}
+
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/WikiPortletMyFaces.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/WikiPortletMyFaces.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/portlet/WikiPortletMyFaces.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,109 @@
+/*
+ * 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.portlet;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.context.FacesContext;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+
+import org.apache.myfaces.portlet.MyFacesGenericPortlet;
+import org.jboss.logging.Logger;
+
+/**
+ * WikiPortletMyFaces.java
+ * 
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class WikiPortletMyFaces extends MyFacesGenericPortlet {
+	
+	private static final Logger log = Logger.getLogger(WikiPortletMyFaces.class);
+	
+	protected void facesRender(RenderRequest request, RenderResponse response)
+			throws PortletException, java.io.IOException {
+		if (sessionTimedOut(request)
+				|| request.getPortletSession().getAttribute(
+						CURRENT_FACES_CONTEXT) == null) {
+			setPortletRequestFlag(request);
+			nonFacesRequest(request, response);
+			return;
+		}
+
+		super.facesRender(request, response);
+	}
+	
+	/**
+     * Called by the portlet container to allow the portlet to process an action request.
+     */
+    public void processAction(ActionRequest request, ActionResponse response)
+            throws PortletException, IOException
+    {
+        if (sessionTimedOut(request)) return;
+        
+        setPortletRequestFlag(request);
+        
+        this.prepareParams(request, response);
+
+        FacesContext facesContext = facesContext(request, response);
+        
+        try
+        {
+            lifecycle.execute(facesContext);
+
+            if (!facesContext.getResponseComplete())
+            {
+                response.setRenderParameter(VIEW_ID, facesContext.getViewRoot().getViewId());
+            }
+
+            request.getPortletSession().setAttribute(CURRENT_FACES_CONTEXT, facesContext);
+        }
+        catch (Throwable e)
+        {
+            facesContext.release();
+            handleExceptionFromLifecycle(e);
+        }
+    }
+
+	private void prepareParams(ActionRequest request, ActionResponse response) {
+		Map<String, String> paramMap = request.getParameterMap();
+		
+		for (String key : paramMap.keySet()) {
+			response.setRenderParameter(key, request.getParameter(key));
+			log.info("Param: "+key+" = "+request.getParameter(key));
+		}
+		
+		// add plugin parameters
+		int i = 1;
+		while (request.getParameter("var" + i) != null) {
+			request.getPortletSession().setAttribute("var" + i,
+					request.getParameter("var" + i));
+			i++;
+		}
+	}
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiView.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiView.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/ui/WikiView.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,97 @@
+/*
+ * 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.ui;
+
+import javax.faces.context.FacesContext;
+
+import org.jboss.logging.Logger;
+import org.jboss.wiki.WikiCommon;
+import org.jboss.wiki.WikiContext;
+import org.jboss.wiki.WikiEngine;
+import org.jboss.wiki.WikiType;
+import org.jboss.wiki.attributesextractor.AttributesExtractor;
+import org.jboss.wiki.helper.WikiHelper;
+
+/**
+ * WikiView.java
+ * 
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class WikiView {
+	private static final Logger log = Logger.getLogger(WikiView.class);
+	
+	private AttributesExtractor attrExtractor;
+
+	private String pageName = "Main";
+
+	private String langCode = "EN";
+
+	public WikiView() {
+		attrExtractor = WikiHelper.getAttributesExtractor(getRequest(), getResponse());
+		if (attrExtractor.getRequestedPageName() != null) {
+			pageName = attrExtractor.getRequestedPageName();
+			log.info("Page name: "+pageName);
+		}
+		if (attrExtractor.getRequestedLanguage() != null) {
+			langCode = attrExtractor.getRequestedLanguage();
+		}
+	}
+
+	private Object getRequest() {
+		return FacesContext.getCurrentInstance().getExternalContext()
+				.getRequest();
+	}
+	
+	private Object getResponse() {
+		return FacesContext.getCurrentInstance().getExternalContext()
+				.getResponse();
+	}
+
+	public String getWikiImagesURL() {
+		return attrExtractor.getHostURL() + attrExtractor.getAppContext() + "/"
+				+ WikiCommon.wikiButtons + "/";
+	}
+	
+	public String getWikiFriendlyURL() {
+		return attrExtractor.getHostURL() + attrExtractor.getAppContext() + "/" + pageName;
+	}
+
+	public String getPageName() {
+		if (pageName == null) {
+			
+		}
+		
+		return pageName;
+	}
+
+	public String getPageContent() {
+		WikiEngine engine = WikiHelper.getWikiEngine();
+
+		WikiType wikiType = engine.getWikiType("html");
+		WikiContext wikiContext = new WikiContext(attrExtractor
+				.getCredentials(), wikiType, attrExtractor.getWikiSession());
+
+		return engine.getByName(pageName, wikiContext, langCode).getContent();
+	}
+}

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/Messages.properties
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/Messages.properties	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/Messages.properties	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1 @@
+pimpek=Pimpek!
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/faces-config.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/faces-config.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/faces-config.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!DOCTYPE faces-config PUBLIC
+        "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+        "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+    <application>
+        <!-- JBoss Portal-facelets integration -->
+        <property-resolver>org.jboss.portal.faces.el.DelegatingPropertyResolver</property-resolver>
+
+        <!--<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>-->
+        <view-handler>com.sun.facelets.FaceletPortletViewHandler</view-handler>
+        <locale-config>
+            <default-locale>en</default-locale>
+        </locale-config>
+        <action-listener>org.jboss.wiki.autorization.AuthorizationListener</action-listener>
+    </application>
+    
+    <managed-bean>
+        <managed-bean-name>wikiView</managed-bean-name>
+        <managed-bean-class>org.jboss.wiki.ui.WikiView</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+    </managed-bean>
+    
+</faces-config>

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jboss-portlet.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jboss-portlet.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/jboss-portlet.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -4,20 +4,6 @@
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd /opt/SUNWps/dtd/portlet.xsd" version="1.0">      
    <portlet>
       <portlet-name>WikiPortlet</portlet-name>
-	  <portlet-class>org.jboss.wiki.WikiPortlet</portlet-class>
-      <supported-locale>en</supported-locale>
-      <supports>
-         <mime-type>text/html</mime-type>
-         <portlet-mode>VIEW</portlet-mode>
-      </supports>
-      <supported-window-states>
-      	<window-state>normal</window-state>
-      	<window-state>minimized</window-state>
-      	<window-state>maximized</window-state>
-   	  </supported-window-states>      
-      <portlet-info>
-         <title>Wiki Portlet</title>
-      </portlet-info>
       <transaction>
          <trans-attribute>Required</trans-attribute>
       </transaction>

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/portlet.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/portlet.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/portlet.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -4,11 +4,16 @@
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd /opt/SUNWps/dtd/portlet.xsd" version="1.0">      
    <portlet>
       <portlet-name>WikiPortlet</portlet-name>
-	  <portlet-class>org.jboss.wiki.WikiPortlet</portlet-class>
+      <init-param>
+            <name>default-view</name>
+            <value>/views/index.xhtml</value>
+      </init-param>
+	  <portlet-class>org.jboss.wiki.portlet.WikiPortletMyFaces</portlet-class>
       <supported-locale>en</supported-locale>
       <supports>
          <mime-type>text/html</mime-type>
          <portlet-mode>VIEW</portlet-mode>
+         <portlet-mode>EDIT</portlet-mode>
       </supports>
       <supported-window-states>
       	<window-state>normal</window-state>

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/web.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/web.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/web.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -7,6 +7,38 @@
 
 
 <web-app>
+	<!-- Use Documents Saved as *.xhtml -->
+    <context-param>
+        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+        <param-value>.xhtml</param-value>
+    </context-param>
+
+    <!-- Special Debug Output for Development -->
+    <context-param>
+        <param-name>facelets.DEVELOPMENT</param-name>
+        <param-value>true</param-value>
+    </context-param>
+
+    <!-- <context-param>
+        <param-name>facelets.LIBRARIES</param-name>
+        <param-value>/WEB-INF/wiki.taglib.xml</param-value>
+    </context-param> -->
+    
+    <listener>
+        <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
+    </listener>
+
+    <servlet>
+        <servlet-name>Faces Servlet</servlet-name>
+        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>Faces Servlet</servlet-name>
+        <url-pattern>*.jsf</url-pattern>
+    </servlet-mapping>
+    
 	<filter>
 		<filter-name>wikiFileAccessFilter</filter-name>
 		<filter-class>org.jboss.wiki.fileaccess.WikiFileAccessFilter</filter-class>

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/wiki.taglib.xml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/wiki.taglib.xml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/WEB-INF/wiki.taglib.xml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!DOCTYPE facelet-taglib PUBLIC
+        "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+        "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
+<facelet-taglib>
+    <namespace>http://www.jboss.org/portal/jbosswiki</namespace>
+    <!-- <tag>
+        <tag-name>isAllowed</tag-name>
+        <handler-class>org.jboss.blog.service.permissions.acl.ACLTagHandler</handler-class>
+    </tag> -->
+</facelet-taglib>
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/index.xhtml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/index.xhtml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/index.xhtml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,8 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+<ui:include src="wiki_view.xhtml" />
+</div>
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_template.xhtml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_template.xhtml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_template.xhtml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+<head>
+    <title></title>
+    <link rel='stylesheet' type='text/css' href='/jboss-blog/blog.css' media='screen'/>
+</head>
+<body class="blog-body">
+    <f:loadBundle basename="Messages" var="msg"/>
+
+	<link rel="stylesheet" href="#{wikiView.wikiImagesURL}wikiStyle.css" type="text/css" media="all" />
+
+    <ui:insert name="content" />
+    
+</body>
+</html>
\ No newline at end of file

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_view.xhtml
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_view.xhtml	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/forge-wiki/src/web/views/wiki_view.xhtml	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,26 @@
+<div  xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:blog="http://www.jboss.org/portal/jbossblog">
+<ui:composition template="wiki_template.xhtml">
+	
+    <ui:define name="content">
+	    <h:outputLink value="#{wikiView.wikiFriendlyURL}">  
+			<h:graphicImage value="#{wikiView.wikiImagesURL}permaLinkButton.png"/>
+		</h:outputLink>
+		
+		<h:outputLink value="#{wikiView.wikiFriendlyURL}">
+			<h:outputText value=" #{wikiView.wikiFriendlyURL}"/> 
+		</h:outputLink>
+	
+		<hr />
+	
+    	<h:panelGroup styleClass="wikiContent">
+       		<h:outputText value="#{wikiView.pageContent}" escape="false"/>
+		</h:panelGroup>
+    </ui:define>
+
+</ui:composition>
+</div>

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/JBossWiki.properties	2006-12-05 19:51:38 UTC (rev 8074)
@@ -20,7 +20,7 @@
 #attachmentDataSourceClass=org.jboss.wiki.ShotokuAttachmentDataSource
 
 #wikiPageDictionaryClass class to use for WikiPageDictionary
-wikiPageDictionaryClass=org.jboss.wiki.FileWikiPageDictionary
+wikiPageDictionaryClass=org.jboss.wiki.FileDirWikiPageDictionary
 #wikiPageDictionaryClass=org.jboss.wiki.ShotokuWikiPageDictionary
 
 #defaultLanguageCode - country letter of the default code language

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/images/wikiStyle.css
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/images/wikiStyle.css	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/images/wikiStyle.css	2006-12-05 19:51:38 UTC (rev 8074)
@@ -7,4 +7,8 @@
 
 td.wikiFooter {
 
+}
+
+img {
+	border: 0px;
 }
\ No newline at end of file

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/wikiPlugins.properties
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/wikiPlugins.properties	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/etc/org/jboss/wiki/wikiPlugins.properties	2006-12-05 19:51:38 UTC (rev 8074)
@@ -6,7 +6,8 @@
 #wikiHome part of url. Leave it you use default portlet conifguration
 #wikiHome = /portal/index.html?ctrl:id=window.default.WikiPortletWindow&ctrl:type=action
 #wikiHome = /portal/index.html?ctrl:cmd=action&ctrl:window=default.wiki.WikiPortletWindow
-wikiHome = /portal/portal/default/wiki/WikiPortletWindow?action=1
+#wikiHome = /portal/portal/default/wiki/WikiPortletWindow?action=1
+wikiHome = /portal/portal/default/wiki/WikiPortletWindow?action=2&org.apache.myfaces.portlet.MyFacesGenericPortlet.VIEW_ID=%2Fviews%2Findex.xhtml
 #number of days that should be included in recent changes plugin
 recentDays = 30
 notification.fromEmail = do-not-reply at labs.jboss.org

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-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDSCommons.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -43,7 +43,8 @@
 	}
 	
 	public static String translateToFileName(String pageName) {
-
+		System.out.println(pageName);
+		
 		try {
 			return URLEncoder.encode(pageName, ENCODING).replaceAll(translatedSlash, SLASH);
 		} catch (UnsupportedEncodingException e) {

Added: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDirWikiPageDictionary.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDirWikiPageDictionary.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDirWikiPageDictionary.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -0,0 +1,417 @@
+/*
+ * 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.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Queue;
+import java.util.TreeMap;
+
+import javax.crypto.NoSuchPaddingException;
+
+import org.jboss.logging.Logger;
+import org.jboss.wiki.exceptions.PageRenamingException;
+
+/**
+ * FileDirWikiPageDictionary.java
+ * 
+ * @author <a href="mailto:tomasz.szymanski at jboss.com">Tomasz Szymanski</a>
+ */
+
+public class FileDirWikiPageDictionary implements WikiPageDictionary {
+
+	private DictionaryNode root;
+
+	private final static Logger log = Logger
+			.getLogger(FileDirWikiPageDictionary.class);
+
+	private String pathToMedia;
+
+	public FileDirWikiPageDictionary() {
+		init("");
+	}
+
+	private void init(String prefix) {
+		Properties fileDSProps = new Properties();
+
+		try {
+
+			fileDSProps.load(FileMediaDataSource.class
+					.getResourceAsStream(FileMediaDataSource.propFileName));
+
+		} catch (IOException ioe) {
+			log.error("Can't load the file " + FileMediaDataSource.propFileName
+					+ "\n", ioe);
+		}
+
+		loadProperties(fileDSProps, prefix);
+
+		root = new DictionaryNode(new File(pathToMedia));
+		root.setRealName("");
+		root.setUid("");
+	}
+
+	private void loadProperties(Properties fileDSProps, String prefix) {
+		if (fileDSProps.getProperty("pathToMedia") != null) {
+			pathToMedia = fileDSProps.getProperty("pathToMedia") + "/dict"
+					+ (prefix.length() > 0 ? "/" + prefix : "");
+			log.info("Path to dictionary is: " + pathToMedia);
+
+			File mediaDir = new File(pathToMedia);
+
+			if (!mediaDir.exists()) {
+				mediaDir.mkdirs();
+				log.info("Dir for dictionary created");
+			}
+		} else {
+			System.err
+					.println("Your properties file lacks of pathToMedia property. It will not run properly ! Please update "
+							+ FileMediaDataSource.propFileName);
+		}
+	}
+
+	public String getRealName(String uid) {
+		log.info("Real: "+uid + " = "+root.getRealName(getQueue(uid)));
+		return root.getRealName(getQueue(uid));
+	}
+
+	private Queue<String> getQueue(String pageName) {
+		return new LinkedList<String>(Arrays.asList(pageName.split("/")));
+	}
+
+	public Map<String, String> getRenameMapings() {
+		Map<String, String> map = new TreeMap<String, String>();
+		root.getRenameMapings("", "", map);
+
+		return map;
+	}
+
+	public String getUid(String realName) {
+		log.info("Uid: "+realName + " = "+root.getUid(getQueue(realName)));
+		return root.getUid(getQueue(realName));
+	}
+
+	public boolean realNameInDictionary(String realName) {
+		return !root.getUid(getQueue(realName)).equals(realName);
+	}
+
+	public void removeDictForPage(String uid) throws PageRenamingException {
+		root.removeDict(getQueue(uid));
+	}
+
+	public void rename(String uid, String newName) throws PageRenamingException {
+		root.rename(getQueue(uid), newName);
+	}
+
+	public void setLanguageCode(String langCode) {
+		init(langCode);
+	}
+
+	public void setWikiEngine(WikiEngine wikiEngine) {
+		// do nothing
+	}
+
+	public boolean uidInDictionary(String uid) {
+		return !root.getRealName(getQueue(uid)).equals(uid);
+	}
+
+}
+
+class DictionaryNode {
+
+	private static final String DICT_PROPS_NAME = "dictionary.properties";
+
+	private final static Logger log = Logger.getLogger(DictionaryNode.class);
+
+	private static final String COMMENT = "Dictionary saved by FileMediaDataSource";
+
+	private Map<String, DictionaryNode> children;
+
+	private Map<String, DictionaryNode> childrenRev;
+
+	private String realName;
+
+	private String uid;
+
+	private Properties dictProps;
+
+	private File dirFile;
+
+	public DictionaryNode(File root) {
+		children = new HashMap<String, DictionaryNode>();
+		childrenRev = new HashMap<String, DictionaryNode>();
+
+		dirFile = root;
+
+		uid = root.getName();
+		realName = uid;
+
+		dictProps = getDictionaryProps(root);
+
+		File[] childDirs = root.listFiles(new FileFilter() {
+			public boolean accept(File pathname) {
+				return pathname.isDirectory();
+			}
+		});
+
+		for (File dir : childDirs) {
+			DictionaryNode node = new DictionaryNode(dir);
+			children.put(dir.getName(), node);
+
+			if (dictProps.getProperty(dir.getName()) != null) {
+				String realName = dictProps.getProperty(dir.getName());
+				childrenRev.put(realName, node);
+				node.setRealName(realName);
+			}
+		}
+	}
+
+	public void removeDict(Queue<String> queue) throws PageRenamingException {
+		String nextUid = queue.poll();
+
+		if (children.get(nextUid) == null) {
+			throw new PageRenamingException("No such entry in dictionary");
+		}
+
+		if (queue.size() == 0) {
+			// remove dict
+			dictProps.remove(nextUid);
+
+			String beforeRealName = children.get(nextUid).getRealName();
+
+			children.get(nextUid).setRealName(nextUid);
+
+			childrenRev.remove(beforeRealName);
+
+			storeThisNode();
+		} else {
+			children.get(nextUid).removeDict(queue);
+		}
+	}
+
+	private String getRealName() {
+		return realName;
+	}
+
+	public void setUid(String uid) {
+		this.uid = uid;
+	}
+
+	public void rename(Queue<String> uidQueue, String newName)
+			throws PageRenamingException {
+		if (uidQueue.size() == 1) {
+			// last element - do rename
+			
+			String newPageUid = uidQueue.poll();
+
+			log.info("renaming: "+newPageUid+" to "+newName);
+			
+			if (childrenRev.get(newName) != null) {
+				throw new PageRenamingException("There is already a page("
+						+ childrenRev.get(newName).getUid() + ") renamed to "
+						+ newName);
+			}
+
+			File newDict = new File(dirFile.getAbsolutePath() + "/"
+					+ newPageUid);
+
+			newDict.mkdir();
+
+			DictionaryNode node = new DictionaryNode(newDict);
+
+			dictProps.setProperty(newPageUid, newName);
+
+			node.setRealName(newName);
+
+			children.put(newPageUid, node);
+			childrenRev.put(newName, node);
+
+			storeThisNode();
+		} else {
+			String newPageUid = uidQueue.poll();
+			if (children.get(newPageUid) != null) {
+				children.get(newPageUid).rename(uidQueue, newName);
+			} else {
+				File newDict = new File(dirFile.getAbsolutePath() + "/"
+						+ newPageUid);
+
+				newDict.mkdir();
+
+				DictionaryNode node = new DictionaryNode(newDict);
+
+				children.put(newPageUid, node);
+
+				node.rename(uidQueue, newName);
+			}
+		}
+	}
+
+	private void storeThisNode() {
+		File propsFile = new File(dirFile.getAbsolutePath() + "/"
+				+ DICT_PROPS_NAME);
+
+		if (!propsFile.exists()) {
+			try {
+				propsFile.createNewFile();
+			} catch (IOException e) {
+				log.error(e);
+			}
+		}
+
+		try {
+			FileOutputStream fos = new FileOutputStream(propsFile);
+
+			try {
+				dictProps.store(fos, COMMENT);
+				fos.close();
+			} catch (IOException e) {
+				try {
+					fos.close();
+				} catch (IOException e1) {
+					log.error(e1);
+				}
+				log.error(e);
+			}
+		} catch (FileNotFoundException e) {
+			log.error(e);
+		}
+	}
+
+	private String getUid() {
+		return uid;
+	}
+
+	public String getUid(Queue<String> realNameQueue) {
+
+		if (!realNameQueue.isEmpty()) {
+			String name = realNameQueue.poll();
+
+			DictionaryNode node;
+			if ((node = childrenRev.get(name)) != null) {
+				String tail = node.getUid(realNameQueue);
+
+				return ((uid.length() > 0) ? uid + "/" : "") + tail;
+			} else {
+				String ret = ((uid.length() > 0) ? uid + "/" : "") + name;
+
+				while (!realNameQueue.isEmpty()) {
+					ret += "/" + realNameQueue.poll();
+				}
+
+				return ret;
+			}
+		} else {
+			return uid;
+		}
+	}
+
+	public String getRealName(Queue<String> uidQueue) {
+
+		if (!uidQueue.isEmpty()) {
+			String name = uidQueue.poll();
+
+			DictionaryNode node;
+			if ((node = children.get(name)) != null) {
+				String tail = node.getRealName(uidQueue);
+
+				return ((realName.length() > 0) ? realName + "/" : "") + tail;
+			} else {
+
+				String ret = ((realName.length() > 0) ? realName + "/" : "") + name;
+
+				while (!uidQueue.isEmpty()) {
+					ret += "/" + uidQueue.poll();
+				}
+
+				return ret;
+			}
+		} else {
+			return realName;
+		}
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
+	private Properties getDictionaryProps(File dir) {
+		if (dir.isDirectory()) {
+			File propsFile = new File(dir.getAbsolutePath() + "/"
+					+ DICT_PROPS_NAME);
+
+			Properties props = new Properties();
+
+			if (propsFile.exists()) {
+				try {
+					FileInputStream fis = new FileInputStream(propsFile);
+
+					try {
+						props.load(fis);
+						fis.close();
+					} catch (IOException e) {
+						try {
+							fis.close();
+						} catch (IOException e1) {
+							log.error(e1);
+						}
+						log.error(e);
+					}
+				} catch (FileNotFoundException e) {
+					log.error(e);
+				}
+			}
+			return props;
+		} else {
+			return null;
+		}
+	}
+
+	public void getRenameMapings(String uidPrefix, String realPrefix,
+			Map<String, String> mapings) {
+		if (!uid.equals(realName)) {
+			mapings.put(addPrefix(uidPrefix, uid), addPrefix(realPrefix,
+					realName));
+		}
+
+		for (DictionaryNode node : children.values()) {
+			node.getRenameMapings(addPrefix(uidPrefix, uid), addPrefix(
+					realPrefix, realName), mapings);
+		}
+	}
+
+	private static String addPrefix(String prefix, String name) {
+		if (prefix.length() > 0) {
+			return prefix + "/" + name;
+		} else
+			return name;
+	}
+}

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-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileMediaDataSource.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -59,7 +59,7 @@
 	private final static String OTHER_LANG_DIR = "LANG/";
 
 	private String GLOBAL_PROPS = "global.properties";
-	
+
 	private final static String LANG_FILE = "languages.properties";
 
 	public static final String propFileName = "filedatasource.properties";
@@ -81,7 +81,7 @@
 	private Logger log;
 
 	private String langCode = null;
-	
+
 	private Properties globalProps;
 
 	public void setWikiEngine(WikiEngine wikiEngine) {
@@ -208,7 +208,8 @@
 
 			try {
 				pageFileWriter = new PrintWriter(pageFile, CHARSET);
-				pageFileReader = new InputStreamReader(new FileInputStream(pageOldFile), CHARSET);
+				pageFileReader = new InputStreamReader(new FileInputStream(
+						pageOldFile), CHARSET);
 
 				int b;
 
@@ -227,9 +228,10 @@
 				String pageContent = page.getContent();
 
 				pageFileWriter.write(pageContent);
-				/*for (int i = 0; i < pageContent.length(); i++) {
-					pageFileWriter.write((int) pageContent.charAt(i));
-				}*/
+				/*
+				 * for (int i = 0; i < pageContent.length(); i++) {
+				 * pageFileWriter.write((int) pageContent.charAt(i)); }
+				 */
 
 				pageFileWriter.close();
 			} catch (FileNotFoundException fnfe) {
@@ -278,11 +280,12 @@
 				String pageContent = page.getContent();
 
 				pageWriter.write(pageContent);
-				
-				/*for (int i = 0; i < pageContent.length(); i++) {
-					pageWriter.write((int) pageContent.charAt(i));
-				}*/
 
+				/*
+				 * for (int i = 0; i < pageContent.length(); i++) {
+				 * pageWriter.write((int) pageContent.charAt(i)); }
+				 */
+
 				pageWriter.close();
 
 			} catch (Exception e) {
@@ -312,7 +315,8 @@
 		} catch (IOException ioe) {
 			// There is no prop file for some reson - create one.
 
-			File pagePropsFile = new File(pathToMedia + "/OLD/" + translatedPageName);
+			File pagePropsFile = new File(pathToMedia + "/OLD/"
+					+ translatedPageName);
 
 			// create dirs
 			pagePropsFile.mkdirs();
@@ -393,7 +397,8 @@
 		if (fileName == null)
 			return null;
 
-		File rolesFile = new File(pathToMedia + "/OLD/" + FileDSCommons.translateToFileName(uid) + "/" + fileName
+		File rolesFile = new File(pathToMedia + "/OLD/"
+				+ FileDSCommons.translateToFileName(uid) + "/" + fileName
 				+ ".properties");
 
 		if (!rolesFile.exists()) {
@@ -457,7 +462,8 @@
 				StringBuilder pageContent = new StringBuilder();
 
 				try {
-					InputStreamReader input = new InputStreamReader(new FileInputStream(pageFile), CHARSET);
+					InputStreamReader input = new InputStreamReader(
+							new FileInputStream(pageFile), CHARSET);
 					// FileInputStream input = new FileInputStream(pageFile);
 
 					int nextChr = input.read();
@@ -562,14 +568,16 @@
 			boolean loadContent, int version) {
 		StringBuilder ret = null;
 
-		File pageFile = new File(pathToMedia + "/OLD/" + FileDSCommons.translateToFileName(uid) + "/" + version
+		File pageFile = new File(pathToMedia + "/OLD/"
+				+ FileDSCommons.translateToFileName(uid) + "/" + version
 				+ ".txt");
 
 		if (loadContent) {
 			try {
-				
-				InputStreamReader input = new InputStreamReader(new FileInputStream(pageFile), CHARSET);
-				
+
+				InputStreamReader input = new InputStreamReader(
+						new FileInputStream(pageFile), CHARSET);
+
 				int nextChr = input.read();
 
 				ret = new StringBuilder();
@@ -634,48 +642,57 @@
 	private void getPageNamesFor(String directory, Set<String> attSet) {
 		File attDir = new File(pathToMedia + "/" + directory);
 
-		File[] pageFiles = attDir.listFiles();
-		int i;
+		if (attDir.canRead()) {
+			File[] pageFiles = attDir.listFiles();
+			int 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((FileDSCommons.translateToPageName(directory)
-								+ "/" + FileDSCommons
-								.translateToPageName(pageFiles[i].getName()
-										.substring(
-												0,
-												pageFiles[i].getName().length()
-														- ".txt".length())))
-								.substring(1));
+			for (i = 0; i < pageFiles.length; i++) {
+				if ((pageFiles[i].isFile())
+						&& (pageFiles[i].getName().endsWith(".txt"))) {
+					// String[] tokens = pageFiles[i].getName().split("/");
+					attSet.add((FileDSCommons.translateToPageName(directory)
+							+ "/" + FileDSCommons
+							.translateToPageName(pageFiles[i].getName()
+									.substring(
+											0,
+											pageFiles[i].getName().length()
+													- ".txt".length())))
+							.substring(1));
+				}
 			}
-		}
 
-		for (i = 0; i < pageFiles.length; i++) {
-			if ((pageFiles[i].isDirectory())
-					&& (!pageFiles[i].getName().endsWith("-att"))) {
+			for (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);
+					// 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);
+					}
 				}
 			}
 		}
@@ -717,17 +734,20 @@
 	}
 
 	public int getPageMod(String pageName) {
-		if (pageModProps.getProperty(FileDSCommons.translateToFileName(pageName)) == null) {
+		if (pageModProps.getProperty(FileDSCommons
+				.translateToFileName(pageName)) == null) {
 			return (EDITABLE + VIEWABLE);
 		} else {
-			return Integer.valueOf(pageModProps.getProperty(FileDSCommons.translateToFileName(pageName)));
+			return Integer.valueOf(pageModProps.getProperty(FileDSCommons
+					.translateToFileName(pageName)));
 		}
 	}
 
 	public synchronized void setPageMod(String pageName, int mods) {
 
 		if (mods != (EDITABLE + VIEWABLE)) {
-			pageModProps.setProperty(FileDSCommons.translateToFileName(pageName), String.valueOf(mods));
+			pageModProps.setProperty(FileDSCommons
+					.translateToFileName(pageName), String.valueOf(mods));
 		} else {
 			pageModProps.remove(FileDSCommons.translateToFileName(pageName));
 		}
@@ -845,7 +865,7 @@
 		}
 
 		String uidTranslated = FileDSCommons.translateToFileName(uid);
-		
+
 		File propsFile = new File(pathToMedia + "/OLD/" + uidTranslated
 				+ "/metadata.properties");
 
@@ -886,7 +906,8 @@
 	public void saveMetadataProps(String uid, Properties props) {
 		getMetadataProps(uid); // this will create file if needed.
 
-		File propsFile = new File(pathToMedia + "/OLD/" + FileDSCommons.translateToFileName(uid)
+		File propsFile = new File(pathToMedia + "/OLD/"
+				+ FileDSCommons.translateToFileName(uid)
 				+ "/metadata.properties");
 
 		FileOutputStream fos = null;
@@ -973,24 +994,25 @@
 			globalProps = new Properties();
 		}
 		File f = new File(pathToMedia + "/" + GLOBAL_PROPS);
-		
+
 		if (!f.exists()) {
 			f.createNewFile();
 		}
-		
+
 		FileInputStream fis = new FileInputStream(f);
-		
+
 		globalProps.load(fis);
-		
+
 		fis.close();
 	}
-	
-	public synchronized void setGlobalProperty(String key, String value) throws DataSourceException {
+
+	public synchronized void setGlobalProperty(String key, String value)
+			throws DataSourceException {
 		try {
 			refreshGlobalProps();
-			
+
 			globalProps.setProperty(key, value);
-			
+
 			saveGlobalProps();
 		} catch (IOException e) {
 			throw new DataSourceException(e);
@@ -1002,22 +1024,23 @@
 			globalProps = new Properties();
 		}
 		File f = new File(pathToMedia + "/" + GLOBAL_PROPS);
-		
+
 		if (!f.exists()) {
 			f.createNewFile();
 		}
-		
+
 		FileOutputStream fos = new FileOutputStream(f);
-		
+
 		globalProps.store(fos, SAVE_COMMENT);
-		
+
 		fos.close();
 	}
 
-	public synchronized String getGlobalProperty(String key) throws DataSourceException{
+	public synchronized String getGlobalProperty(String key)
+			throws DataSourceException {
 		try {
 			refreshGlobalProps();
-			
+
 			return globalProps.getProperty(key);
 		} catch (IOException e) {
 			throw new DataSourceException(e);

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-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -656,7 +656,7 @@
 	}
 
 	public String getRealName(String uid, String langCode) {
-		String[] pageTokens = uid.split("/");
+		/*String[] pageTokens = uid.split("/");
 
 		// log.info("Looking at page: (realName) "+uid);
 
@@ -705,56 +705,44 @@
 			}
 		} else
 			return languageDataSources.get(langCode).getWikiPageDictionary()
-					.getRealName(uid);
+					.getRealName(uid);*/
+		return languageDataSources.get(langCode).getWikiPageDictionary()
+		.getRealName(uid);
 	}
 
 	public String getUid(String realName, String langCode) {
-		String[] pageTokens = realName.split("/");
-
-		// log.info("Looking at page: (uid) "+realName);
-
-		if (pageTokens.length > 1) {
-			if (!languageDataSources.get(langCode).getWikiPageDictionary()
-					.getUid(realName).equals(realName)) {
-				// this page is in dictionary
-				return languageDataSources.get(langCode)
-						.getWikiPageDictionary().getUid(realName);
-			} else {
-				// look if parts of this page are in dictionary
-
-				for (int i = pageTokens.length - 1; i > 0; i--) {
-					String page = "";
-					String suffix = "";
-					for (int j = 0; j < i; j++) {
-						page += "/" + pageTokens[j];
-					}
-
-					// build suffix
-
-					for (int j = i; j < pageTokens.length; j++) {
-						suffix += "/" + pageTokens[j];
-					}
-
-					page = page.substring(1);
-
-					// log.info("Looking at page: (uid) "+page);
-
-					if (!languageDataSources.get(langCode)
-							.getWikiPageDictionary().getUid(page).equals(page)) // this
-						// page
-						// is
-						// in
-						// dictionary
-						return languageDataSources.get(langCode)
-								.getWikiPageDictionary().getUid(page)
-								+ suffix;
-				}
-
-				return realName;
-			}
-		} else
-			return languageDataSources.get(langCode).getWikiPageDictionary()
-					.getUid(realName);
+		/*
+		 * String[] pageTokens = realName.split("/");
+		 * 
+		 * if (pageTokens.length > 1) { if
+		 * (!languageDataSources.get(langCode).getWikiPageDictionary()
+		 * .getUid(realName).equals(realName)) { // this page is in dictionary
+		 * return languageDataSources.get(langCode)
+		 * .getWikiPageDictionary().getUid(realName); } else { // look if parts
+		 * of this page are in dictionary
+		 * 
+		 * for (int i = pageTokens.length - 1; i > 0; i--) { String page = "";
+		 * String suffix = ""; for (int j = 0; j < i; j++) { page += "/" +
+		 * pageTokens[j]; }
+		 *  // build suffix
+		 * 
+		 * for (int j = i; j < pageTokens.length; j++) { suffix += "/" +
+		 * pageTokens[j]; }
+		 * 
+		 * page = page.substring(1);
+		 *  // log.info("Looking at page: (uid) "+page);
+		 * 
+		 * if (!languageDataSources.get(langCode)
+		 * .getWikiPageDictionary().getUid(page).equals(page)) // this // page //
+		 * is // in // dictionary return languageDataSources.get(langCode)
+		 * .getWikiPageDictionary().getUid(page) + suffix; }
+		 * 
+		 * return realName; } } else return
+		 * languageDataSources.get(langCode).getWikiPageDictionary()
+		 * .getUid(realName);
+		 */
+		return languageDataSources.get(langCode).getWikiPageDictionary()
+				.getUid(realName);
 	}
 
 	public synchronized void rename(String uid, String newName, String langCode)
@@ -767,11 +755,6 @@
 					"Page with the name you're trying rename to already exists.");
 		}
 
-		if (uid.indexOf("/") != -1) {
-			// renaming subpage - create aprop. newName
-			newName = uid.substring(0, uid.lastIndexOf("/") + 1) + newName;
-		}
-
 		if (!arePagesEdited()) {
 			languageDataSources.get(langCode).getWikiPageDictionary().rename(
 					uid, newName);
@@ -826,19 +809,21 @@
 	public int getLastAttachmentVersion(String pageName, String attachmentName,
 			String langCode) {
 		return languageDataSources.get(langCode).getAttachmentDataSource()
-				.getLastAttachmentVersion(pageName, attachmentName);
+				.getLastAttachmentVersion(getUid(pageName, langCode),
+						attachmentName);
 	}
 
 	public WikiAttachment getAttachment(String pageName,
 			String attachementName, int version, String langCode) {
 		return languageDataSources.get(langCode).getAttachmentDataSource()
-				.getAttachment(pageName, attachementName, version);
+				.getAttachment(getUid(pageName, langCode), attachementName,
+						version);
 	}
 
 	public WikiAttachment getAttachment(String pageName,
 			String attachementName, String langCode) {
 		return languageDataSources.get(langCode).getAttachmentDataSource()
-				.getAttachment(pageName, attachementName);
+				.getAttachment(getUid(pageName, langCode), attachementName);
 	}
 
 	public void addAttachment(InputStream attFile, String attName,

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/SubpagesListPlugin.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/SubpagesListPlugin.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/SubpagesListPlugin.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -31,22 +31,28 @@
 
 	@Override
 	public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) {
-		StringBuilder subpageList = new StringBuilder(wikiPage.getPageContent()+"\n");
-		
-		subpageList.append(HTMLTranslatorParts.pagePartRegexStart).append("----\n!!Subpages list:\\\\\n");
-		
-		Set<String> subPages = wikiEngine.getPagesFor(wikiPage.getName(), wikiPage.getLangCode());
-		
+		StringBuilder subpageList = new StringBuilder(wikiPage.getPageContent()
+				+ "\n");
+
+		subpageList.append(HTMLTranslatorParts.pagePartRegexStart).append(
+				"----\n!!Subpages list:\\\\\n");
+
+		Set<String> subPages = wikiEngine.getPagesFor(wikiEngine.getUid(
+				wikiPage.getName(), wikiPage.getLangCode()), wikiPage
+				.getLangCode());
+
 		for (String page : subPages) {
-			subpageList.append("[").append(page).append("]\\\\\n");
+			subpageList.append("[").append(
+					wikiEngine.getUid(page, wikiPage.getLangCode())).append(
+					"]\\\\\n");
 		}
-		
+
 		subpageList.append(HTMLTranslatorParts.pagePartRegexEnd);
-		
-		if (subPages.size() > 0 ) {
+
+		if (subPages.size() > 0) {
 			wikiPage.setContent(subpageList.toString());
 		}
-		
+
 		return wikiPage;
 	}
 

Modified: labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TrailPlugin.java
===================================================================
--- labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TrailPlugin.java	2006-12-05 19:46:38 UTC (rev 8073)
+++ labs/jbosslabs/trunk/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/TrailPlugin.java	2006-12-05 19:51:38 UTC (rev 8074)
@@ -31,6 +31,8 @@
 	public WikiPage process(WikiPage wikiPage, WikiSession wikiSession) {
 		String trailAttrName = wikiPage.getLangCode()+":TRAIL";
 		
+		log.info("trail");
+		
 		WikiPage newPage = null;
 		try {
 			newPage = (WikiPage) wikiPage.clone();
@@ -38,8 +40,10 @@
 			System.err.println(e);
 		}
 
-		String trail = "["+newPage.getName()+"] ";
+		String trail = "["+wikiEngine.getUid(newPage.getName(), newPage.getLangCode())+"] ";
 		
+		log.info("Show trail: " + trail);
+		
 		if (wikiSession.getAttribute(trailAttrName) != null) {
 			String oldTrail = (String)wikiSession.getAttribute(trailAttrName);
 			




More information about the jboss-svn-commits mailing list