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/20 14:49:43 UTC

svn commit: r728284 - /incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java

Author: jalkanen
Date: Sat Dec 20 05:49:43 2008
New Revision: 728284

URL: http://svn.apache.org/viewvc?rev=728284&view=rev
Log:
Oops, commit missing.

Added:
    incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java

Added: incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java?rev=728284&view=auto
==============================================================================
--- incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java (added)
+++ incubator/jspwiki/trunk/src/com/ecyrd/jspwiki/WikiPage.java Sat Dec 20 05:49:43 2008
@@ -0,0 +1,235 @@
+/*
+    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;
+
+import java.util.Date;
+import java.util.Map;
+
+import com.ecyrd.jspwiki.auth.acl.Acl;
+
+/**
+ *  Simple wrapper class for the Wiki page attributes.  The Wiki page
+ *  content is moved around in Strings, though.
+ */
+
+// FIXME: We need to rethink how metadata is being used - probably the 
+//        author, date, etc. should also be part of the metadata.  We also
+//        need to figure out the metadata lifecycle.
+
+public interface WikiPage
+{
+    /**
+     *  "Summary" is a short summary of the page.  It is a String.
+     */
+    public static final String DESCRIPTION = "summary";
+
+    /** A special variable name for storing a page alias. */
+    public static final String ALIAS = "alias";
+    
+    /** A special variable name for storing a redirect note */
+    public static final String REDIRECT = "redirect";
+
+    /** A special variable name for storing a changenote. */
+    public static final String CHANGENOTE = "changenote";
+    
+
+    /**
+     *  Returns the name of the page.
+     *  
+     *  @return The page name.
+     */
+    public String getName();
+    
+    /**
+     * Returns the full, qualified, name of the WikiPage that includes the wiki name.
+     * Used by the {@link com.ecyrd.jspwiki.ui.stripes.HandlerInfo} class and
+     * {@link com.ecyrd.jspwiki.ui.stripes.HandlerPermission} annotations.
+     * @return the qualified page name, for example <code>mywiki:Main</code>
+     */
+    public String getQualifiedName();
+
+    /**
+     *  A WikiPage may have a number of attributes, which might or might not be 
+     *  available.  Typically attributes are things that do not need to be stored
+     *  with the wiki page to the page repository, but are generated
+     *  on-the-fly.  A provider is not required to save them, but they
+     *  can do that if they really want.
+     *
+     *  @param key The key using which the attribute is fetched
+     *  @return The attribute.  If the attribute has not been set, returns null.
+     */
+    public Object getAttribute( String key );
+
+    /**
+     *  Sets an metadata attribute.
+     *  
+     *  @see #getAttribute(String)
+     *  @param key The key for the attribute used to fetch the attribute later on.
+     *  @param attribute The attribute value
+     */
+    public void setAttribute( String key, Object attribute );
+
+    /**
+     * Returns the full attributes Map, in case external code needs
+     * to iterate through the attributes.
+     * 
+     * @return The attribute Map.  Please note that this is a direct
+     *         reference, not a copy.
+     */
+    public Map getAttributes();
+
+    /**
+     *  Removes an attribute from the page, if it exists.
+     *  
+     *  @param  key The key for the attribute
+     *  @return If the attribute existed, returns the object.
+     *  @since 2.1.111
+     */
+    public Object removeAttribute( String key );
+
+    /**
+     *  Returns the date when this page was last modified.
+     *  
+     *  @return The last modification date
+     */
+    public Date getLastModified();
+
+    /**
+     *  Sets the last modification date.  In general, this is only
+     *  changed by the provider.
+     *  
+     *  @param date The date
+     */
+    public void setLastModified( Date date );
+
+    /**
+     *  Sets the page version.  In general, this is only changed
+     *  by the provider.
+     *  
+     *  @param version The version number
+     */
+    public void setVersion( int version );
+
+    /**
+     *  Returns the version that this WikiPage instance represents.
+     *  
+     *  @return the version number of this page.
+     */
+    public int getVersion();
+
+    /**
+     *  Returns the size of the page.
+     *  
+     *  @return the size of the page. 
+     *  @since 2.1.109
+     */
+    public long getSize();
+
+    /**
+     *  Sets the size.  Typically called by the provider only.
+     *  
+     *  @param size The size of the page.
+     *  @since 2.1.109
+     */
+    public void setSize( long size );
+
+    /**
+     *  Returns the Acl for this page.  May return <code>null</code>, 
+     *  in case there is no Acl defined, or it has not
+     *  yet been set by {@link #setAcl(Acl)}.
+     *  
+     *  @return The access control list.  May return null, if there is 
+     *          no acl.
+     */
+    public Acl getAcl();
+
+    /**
+     * Sets the Acl for this page. Note that method does <em>not</em>
+     * persist the Acl itself to back-end storage or in page markup;
+     * it merely sets the internal field that stores the Acl. To
+     * persist the Acl, callers should invoke 
+     * {@link com.ecyrd.jspwiki.auth.acl.AclManager#setPermissions(WikiPage, Acl)}.
+     * @param acl The Acl to set
+     */
+    public void setAcl( Acl acl );
+
+    /**
+     *  Sets the author of the page.  Typically called only by the provider.
+     *  
+     *  @param author The author name.
+     */
+    public void setAuthor( String author );
+
+    /**
+     *  Returns author name, or null, if no author has been defined.
+     *  
+     *  @return Author name, or possibly null.
+     */
+    public String getAuthor();
+    
+    /**
+     *  Returns the wiki nanme for this page
+     *  
+     *  @return The name of the wiki.
+     */
+    // FIXME: Should we rename this method?
+    public String getWiki();
+
+    /**
+     *  This method will remove all metadata from the page.
+     */
+    public void invalidateMetadata();
+
+    /**
+     *  Returns <code>true</code> if the page has valid metadata; that is, it has been parsed.
+     *  Note that this method is a kludge to support our pre-3.0 metadata system, and as such
+     *  will go away with the new API.
+     *  
+     *  @return true, if the page has metadata.
+     */
+    public boolean hasMetadata();
+
+    /**
+     *  Sets the metadata flag to true.  Never call.
+     */
+    public void setHasMetadata();
+
+    /**
+     *  Creates a deep clone of a WikiPage.  Strings are not cloned, since
+     *  they're immutable.  Attributes are not cloned, only the internal
+     *  HashMap (so if you modify the contents of a value of an attribute,
+     *  these will reflect back to everyone).
+     *  
+     *  @return A deep clone of the WikiPage
+     */
+    public Object clone();
+    
+    /**
+     *  Compares a page with another.  The primary sorting order
+     *  is according to page name, and if they have the same name,
+     *  then according to the page version.
+     *  
+     *  @param o The object to compare against
+     *  @return -1, 0 or 1
+     */
+    public int compareTo( Object o );
+    
+}