You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ja...@apache.org on 2008/12/08 23:57:51 UTC
svn commit: r724543 - in
/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki:
WikiPage.java content/ContentManager.java content/WikiName.java
providers/ProviderException.java
Author: jalkanen
Date: Mon Dec 8 14:57:51 2008
New Revision: 724543
URL: http://svn.apache.org/viewvc?rev=724543&view=rev
Log:
Added WikiName and made WikiPage use it.
Added:
incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/WikiName.java
Modified:
incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/WikiPage.java
incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/ContentManager.java
incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/providers/ProviderException.java
Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/WikiPage.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/WikiPage.java?rev=724543&r1=724542&r2=724543&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/WikiPage.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/WikiPage.java Mon Dec 8 14:57:51 2008
@@ -35,6 +35,8 @@
import com.ecyrd.jspwiki.auth.acl.Acl;
import com.ecyrd.jspwiki.auth.acl.AclEntry;
import com.ecyrd.jspwiki.auth.acl.AclImpl;
+import com.ecyrd.jspwiki.content.ContentManager;
+import com.ecyrd.jspwiki.content.WikiName;
import com.ecyrd.jspwiki.providers.WikiPageProvider;
/**
@@ -52,9 +54,8 @@
{
private static final long serialVersionUID = 1L;
- private String m_name;
+ private WikiName m_name;
private WikiEngine m_engine;
- private String m_wiki;
private Date m_lastModified;
private long m_fileSize = -1;
private int m_version = WikiPageProvider.LATEST_VERSION;
@@ -83,15 +84,26 @@
* Create a new WikiPage using a given engine and name.
*
* @param engine The WikiEngine that owns this page.
- * @param name The name of the page.
+ * @param name The path of the page.
*/
- public WikiPage( WikiEngine engine, String name )
+ public WikiPage( WikiEngine engine, String path )
{
m_engine = engine;
- m_name = name;
- m_wiki = engine.getApplicationName();
+ m_name = WikiName.valueOf( path );
}
+ public WikiPage( WikiEngine engine, WikiName name )
+ {
+ m_engine = engine;
+ m_name = name;
+ }
+
+ public WikiPage( WikiEngine engine, Node nd ) throws WikiException, RepositoryException
+ {
+ m_engine = engine;
+ m_name = ContentManager.getWikiPath( nd.getPath() );
+ }
+
// FIXME: This should be a part of the constructor
public void setJCRNode(Node nd)
{
@@ -110,7 +122,7 @@
*/
public String getName()
{
- return m_name;
+ return m_name.getPath();
}
/**
@@ -121,7 +133,7 @@
*/
public String getQualifiedName()
{
- return m_wiki + ":" + m_name;
+ return m_name.toString();
}
/**
@@ -290,9 +302,10 @@
*
* @return The name of the wiki.
*/
+ // FIXME: Should we rename this method?
public String getWiki()
{
- return m_wiki;
+ return m_name.getSpace();
}
/**
@@ -334,7 +347,7 @@
*/
public String toString()
{
- return "WikiPage ["+m_wiki+":"+m_name+",ver="+m_version+",mod="+m_lastModified+"]";
+ return "WikiPage ["+m_name+",ver="+m_version+",mod="+m_lastModified+"]";
}
/**
@@ -348,9 +361,8 @@
public Object clone()
{
WikiPage p = new WikiPage( m_engine, m_name );
-
- p.m_wiki = m_wiki;
+ p.m_node = m_node;
p.m_author = m_author;
p.m_version = m_version;
p.m_lastModified = m_lastModified != null ? (Date)m_lastModified.clone() : null;
Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/ContentManager.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/ContentManager.java?rev=724543&r1=724542&r2=724543&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/ContentManager.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/ContentManager.java Mon Dec 8 14:57:51 2008
@@ -23,6 +23,9 @@
import java.util.*;
import javax.jcr.*;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryManager;
+import javax.jcr.query.QueryResult;
import javax.jcr.version.Version;
import javax.jcr.version.VersionHistory;
import javax.jcr.version.VersionIterator;
@@ -48,6 +51,12 @@
*/
public class ContentManager
{
+ protected static final String DEFAULT_SPACE = "Main";
+
+ private static final String JCR_DEFAULT_SPACE = "pages/"+DEFAULT_SPACE;
+
+ private static final String JCR_PAGES_NODE = "pages";
+
private static final long serialVersionUID = 2L;
/** The property value for setting the amount of time before the page locks expire.
@@ -110,9 +119,6 @@
private String m_workspaceName = DEFAULT_WORKSPACE; // FIXME: Make settable
- /** This is the name of the default wikispace. */
-
- private static final String DEFAULT_SPACE = "Main";
/**
* Creates a new PageManager.
*
@@ -201,18 +207,18 @@
//
// Create main page directory
//
- if( !root.hasNode( "pages" ) )
+ if( !root.hasNode( JCR_PAGES_NODE ) )
{
- root.addNode( "pages" );
+ root.addNode( JCR_PAGES_NODE );
}
//
// Make sure at least the default "Main" wikispace exists.
//
- if( !root.hasNode( "pages/Main" ) )
+ if( !root.hasNode( JCR_DEFAULT_SPACE ) )
{
- root.addNode( "pages/Main" );
+ root.addNode( JCR_DEFAULT_SPACE );
}
session.save();
@@ -228,16 +234,44 @@
* please see {@link ReferenceManager#findCreated()}, which is probably a lot
* faster. This method may cause repository access.
*
+ * @param space Name of the Wiki space. May be null, in which case gets all spaces
* @return A Collection of WikiPage objects.
* @throws ProviderException If the backend has problems.
*/
- /*
- public Collection getAllPages()
+
+ public Collection<WikiPage> getAllPages( WikiContext ctx, String space )
throws ProviderException
{
- return m_provider.getAllPages();
+ ArrayList<WikiPage> result = new ArrayList<WikiPage>();
+ try
+ {
+ Session session = getJCRSession( ctx );
+
+ QueryManager mgr = session.getWorkspace().getQueryManager();
+
+ Query q = mgr.createQuery( "/"+JCR_PAGES_NODE+"/"+((space != null) ? space : "")+"/*", Query.XPATH );
+
+ QueryResult qr = q.execute();
+
+ for( NodeIterator ni = qr.getNodes(); ni.hasNext(); )
+ {
+ Node n = ni.nextNode();
+
+ result.add( new WikiPage(ctx.getEngine(), n ) );
+ }
+ }
+ catch( RepositoryException e )
+ {
+ throw new ProviderException("getAllPages()",e);
+ }
+ catch( WikiException e )
+ {
+ throw new ProviderException("getAllPages()",e);
+ }
+
+ return result;
}
-*/
+
/**
*
* @param pageName The name of the page to fetch.
@@ -804,55 +838,65 @@
return session;
}
- protected static String getJCRPath( WikiContext ctx, String wikipath ) throws WikiException
+ /**
+ * Evaluates a WikiName in the context of the current page request.
+ *
+ * @param ctx The current WikiContext. May be null, in which case the wikiName must be a FQN.
+ * @param wikiName The WikiName.
+ * @return A full JCR path
+ * @throws WikiException If the conversion could not be done.
+ */
+ protected static String getJCRPath( WikiContext ctx, String wikiName ) throws WikiException
{
String spaceName;
String spacePath;
- int colon = wikipath.indexOf(':');
+ int colon = wikiName.indexOf(':');
if( colon != -1 )
{
// This is a FQN
- spaceName = wikipath.substring( 0, colon );
- spacePath = wikipath.substring( colon+1 );
+ spaceName = wikiName.substring( 0, colon );
+ spacePath = wikiName.substring( colon+1 );
}
- else if( ctx != null && ctx instanceof WikiContext )
+ else if( ctx != null )
{
- WikiPage contextPage = ((WikiContext)ctx).getPage();
+ WikiPage contextPage = ctx.getPage();
// Not an FQN, the wiki name is missing, so we'll use the context to figure it out
spaceName = contextPage.getWiki();
// If the wikipath starts with "/", we assume it is an absolute path within this
// wiki space. Otherwise, it must be relative to the current path.
- if( wikipath.startsWith( "/" ) )
+ if( wikiName.startsWith( "/" ) )
{
- spacePath = wikipath;
+ spacePath = wikiName;
}
else
{
- spacePath = contextPage.getName()+"/"+wikipath;
+ spacePath = contextPage.getName()+"/"+wikiName;
}
}
else
{
spaceName = DEFAULT_SPACE;
- spacePath = wikipath;
+ spacePath = wikiName;
}
return "/pages/"+spaceName+"/"+spacePath;
}
- protected static String getWikiPath( String jcrpath ) throws WikiException
+ // FIXME: Should be protected - fix once WikiPage moves to content-package
+ public static WikiName getWikiPath( String jcrpath ) throws WikiException
{
- if( jcrpath.startsWith("/pages/") )
+ if( jcrpath.startsWith("/"+JCR_PAGES_NODE+"/") )
{
- String wikiPath = jcrpath.substring( "/pages/".length() );
+ String wikiPath = jcrpath.substring( ("/"+JCR_PAGES_NODE+"/").length() );
int firstSlash = wikiPath.indexOf( '/' );
- return wikiPath.substring( 0, firstSlash )+":"+wikiPath.substring( firstSlash+1 );
+ return new WikiName(wikiPath.substring( 0, firstSlash ),
+ wikiPath.substring( firstSlash+1 ) );
}
throw new WikiException("This is not a valid JCR path: "+jcrpath);
Added: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/WikiName.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/WikiName.java?rev=724543&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/WikiName.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/content/WikiName.java Mon Dec 8 14:57:51 2008
@@ -0,0 +1,136 @@
+/*
+ JSPWiki - a JSP-based WikiWiki clone.
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+package com.ecyrd.jspwiki.content;
+
+import java.io.Serializable;
+
+/**
+ * A WikiName represents a combination of a WikiSpace as well as a
+ * path within that space. For example, in "MyWiki:MainPage/foo.jpg",
+ * "MyWiki" is the space, and "MainPage/foo.jpg" is the path within that space.
+ *
+ * @since 3.0
+ */
+public class WikiName implements Serializable, Comparable
+{
+ private static final long serialVersionUID = 1L;
+ private String m_space;
+ private String m_path;
+
+ private WikiName()
+ {}
+
+ /**
+ * Create a WikiName from a space and a path.
+ *
+ * @param space The space
+ * @param path The path
+ */
+ public WikiName(String space, String path)
+ {
+ m_space = space;
+ m_path = path;
+ }
+
+ /**
+ * Parses a fully-qualified name (FQN) and turns it into a WikiName.
+ * If the space name is missing, uses {@link ContentManager#DEFAULT_SPACE}
+ * for the space name.
+ *
+ * @param path Path to parse
+ * @return A WikiName
+ */
+ public static WikiName valueOf(String path)
+ {
+ WikiName name = new WikiName();
+ int colon = path.indexOf(':');
+
+ if( colon != -1 )
+ {
+ // This is a FQN
+ name.m_space = path.substring( 0, colon );
+ name.m_path = path.substring( colon+1 );
+
+ return name;
+ }
+ else
+ {
+ name.m_space = ContentManager.DEFAULT_SPACE;
+ name.m_path = path;
+
+ return name;
+ }
+
+ // FIXME: Should probably use this
+ //throw new IllegalArgumentException("The path does not represent a fully qualified WikiName (space:path/path/path)");
+ }
+
+ /**
+ * Return the space part of the WikiName
+ *
+ * @return Just the space name.
+ */
+ public String getSpace()
+ {
+ return m_space;
+ }
+
+ /**
+ * Return the path part of the WikiName.
+ *
+ * @return Just the path.
+ */
+ public String getPath()
+ {
+ return m_path;
+ }
+
+ /**
+ * Returns the FQN format (space:path) of the name.
+ *
+ * @return The name in FQN format.
+ */
+ public String toString()
+ {
+ return m_space+":"+m_path;
+ }
+
+ public int hashCode()
+ {
+ return m_space.hashCode() ^ m_path.hashCode();
+ }
+
+ public int compareTo( Object o ) throws ClassCastException
+ {
+ return toString().compareTo( ((WikiName)o).toString() );
+ }
+
+ public boolean equals( Object o )
+ {
+ if( o instanceof WikiName )
+ {
+ WikiName n = (WikiName) o;
+
+ return m_space.equals( n.m_space ) && m_path.equals( n.m_path );
+ }
+ return false;
+ }
+}
Modified: incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/providers/ProviderException.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/providers/ProviderException.java?rev=724543&r1=724542&r2=724543&view=diff
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/providers/ProviderException.java (original)
+++ incubator/jspwiki/branches/JSPWIKI_JCR_BRANCH/src/com/ecyrd/jspwiki/providers/ProviderException.java Mon Dec 8 14:57:51 2008
@@ -42,4 +42,9 @@
{
super( msg );
}
+
+ public ProviderException( String string, Throwable rootCause )
+ {
+ super( string, rootCause );
+ }
}