You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2006/05/02 00:23:34 UTC

svn commit: r398712 [7/32] - in /incubator/roller/trunk/src/org/apache: ./ roller/ roller/business/ roller/business/hibernate/ roller/business/referrers/ roller/business/runnable/ roller/business/search/ roller/business/search/operations/ roller/busine...

Added: incubator/roller/trunk/src/org/apache/roller/model/BookmarkManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/BookmarkManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/BookmarkManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/BookmarkManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,190 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.Assoc;
+import org.apache.roller.pojos.BookmarkData;
+import org.apache.roller.pojos.FolderData;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Interface to Bookmark Management. Provides methods for retrieving, storing,
+ * moving, removing and querying for folders and bookmarks.
+ */
+public interface BookmarkManager {
+    
+    
+    public void saveBookmark(BookmarkData bookmark) throws RollerException;
+    
+    
+    /** 
+     * Delete bookmark. 
+     */
+    public void removeBookmark(BookmarkData bookmark) throws RollerException;
+    
+    /** 
+     * Retrieve bookmark by ID, a persistent instance. 
+     */
+    public BookmarkData getBookmark(String id) throws RollerException;
+    
+    
+    /**
+     * @param data
+     * @param subfolders
+     * @return
+     */
+    public List getBookmarks(FolderData data, boolean subfolders)
+            throws RollerException;
+    
+    
+    public void saveFolder(FolderData folder) throws RollerException;
+    
+    
+    public void removeFolder(FolderData folder) throws RollerException;
+    
+    
+    /** 
+     * Retrieve folder by ID, a persistent instance. 
+     */
+    public FolderData getFolder(String id) throws RollerException;
+    
+    
+    /** 
+     * Get all folders for a website.
+     *
+     * @param website Website.
+     */
+    public List getAllFolders(WebsiteData wd) throws RollerException;
+    
+    
+    /** 
+     * Get top level folders for a website.
+     *
+     * @param website Website.
+     */
+    public FolderData getRootFolder(WebsiteData website) throws RollerException;
+    
+    
+    /** 
+     * Get folder specified by website and folderPath.
+     *
+     * @param website Website of folder.
+     * @param folderPath Path of folder, relative to folder root.
+     */
+    public FolderData getFolder(WebsiteData website, String folderPath)
+            throws RollerException;
+    
+    /**
+     * Get absolute path to folder, appropriate for use by getFolderByPath().
+     *
+     * @param folder Folder.
+     * @return Forward slash separated path string.
+     */
+    public String getPath(FolderData folder) throws RollerException;
+    
+    
+    /**
+     * Get subfolder by path relative to specified folder.
+     *
+     * @param folder  Root of path or null to start at top of folder tree.
+     * @param path    Path of folder to be located.
+     * @param website Website of folders.
+     * @return FolderData specified by path or null if not found.
+     */
+    public FolderData getFolderByPath(WebsiteData wd, FolderData folder, String string)
+            throws RollerException;
+    
+    
+    /**
+     * Determine if folder is in use.  A folder is <em>in use</em> if it contains any bookmarks
+     * or has any children.
+     *
+     * @param folder
+     * @return true if the folder contains bookmarks or has children, false otherwise.
+     * @throws RollerException
+     */
+    public boolean isFolderInUse(FolderData folder) throws RollerException;
+    
+    
+    /**
+     * Check duplicate folder name.
+     */
+    public boolean isDuplicateFolderName(FolderData data) throws RollerException;
+    
+    
+    /**
+     * Determines if folder is descendent of folder.
+     */
+    public boolean isDescendentOf(FolderData data, FolderData ancestor) throws RollerException;
+    
+    
+    /**
+     */
+    public Assoc getFolderParentAssoc(FolderData data) throws RollerException;
+    
+    /**
+     */
+    public List getFolderChildAssocs(FolderData data) throws RollerException;
+    
+    /**
+     */
+    public List getAllFolderDecscendentAssocs(FolderData data) throws RollerException;
+    
+    /**
+     */
+    public List getFolderAncestorAssocs(FolderData data) throws RollerException;
+    
+    
+    /** 
+     * Import bookmarks from OPML string into specified folder.
+     *
+     * @param site Website.
+     * @param folder Name of folder to hold bookmarks.
+     * @param opml OPML data to be imported.
+     */
+    public void importBookmarks(WebsiteData site, String folder, String opml)
+            throws RollerException;
+    
+    
+    /** 
+     * Move contents of folder to another folder.
+     *
+     * @param src Source folder.
+     * @param dest Destination folder.
+     */
+    public void moveFolderContents(FolderData src, FolderData dest)
+            throws RollerException;
+    
+    
+    /**
+     * Delete contents of specified folder.
+     */
+    public void removeFolderContents(FolderData src) throws RollerException;
+    
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+}
+

Added: incubator/roller/trunk/src/org/apache/roller/model/ConfigManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/ConfigManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/ConfigManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/ConfigManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,34 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+/*
+ * Created on Feb 4, 2004
 */
package org.apache.roller.model;

import org.apache.roller.RollerException;
import org.apache.roller.pojos.RollerConfigData;
import java.io.Serializable;

/**
+ * Manages Roller configuration
+ * @deprecated Replaced by {@link RollerProperties}.
+ */
public interface ConfigManager extends Serializable 
{
    /**
+     * Release all resources associated with Roller session.
+     */
    public void release();    /**
+     * Store
+     */
+

    public void storeRollerConfig( RollerConfigData data ) throws RollerException;
        /**
+     * Get single RollerConfig object in system.
+     * @deprecated 
+     */
+
    public RollerConfigData getRollerConfig() throws RollerException;
        /**
+     * Read RollerConfig from XML file.
+     */
+
    public RollerConfigData readFromFile(String filePath) throws RollerException;
}

Added: incubator/roller/trunk/src/org/apache/roller/model/FileManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/FileManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/FileManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/FileManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,73 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.Serializable;
+
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.WebsiteData;
+import org.apache.roller.util.RollerMessages;
+
+/**
+ * Interface for managing files uploaded to Roller.
+ *
+ * NOTE: this should probably be renamed "ResourceManager" or similar
+ * since the real jobe here is managing resources, not just files.  We should
+ * then extend this a bit more to include the notion of not only user uploaded
+ * resources, but also other resources the system stores, such as the blacklist.
+ *
+ * @author dave
+ */
+public interface FileManager extends Serializable 
+{
+    /** Determine if file can be saved in website's file space. */
+    public boolean canSave(
+        String weblogHandle, String name, long size, RollerMessages msgs) 
+        throws RollerException;
+    
+    /** Get website's files */
+    public File[] getFiles(String weblogHandle) 
+        throws RollerException;
+    
+    /** Delete specified file from website's file space. */
+    public void deleteFile(String weblogHandle, String name) 
+        throws RollerException;
+
+    /** Save file in website's file space or throw exception if rules violated. */
+    public void saveFile(String weblogHandle, String name, long size, InputStream is) 
+        throws RollerException;
+
+    /** Return true if weblog is over the file-upload limit */
+    public boolean overQuota(String weblogHandle) throws RollerException; 
+            
+    /**
+     * Get directory in which uploaded files are stored
+     */
+    public String getUploadDir();
+    /**
+     * Get base URL where uploaded files are made available.
+     */
+    public String getUploadUrl();
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/IndexManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/IndexManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/IndexManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/IndexManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,61 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+import org.apache.roller.RollerException;
+import org.apache.roller.business.search.operations.IndexOperation;
+import org.apache.roller.pojos.UserData;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WebsiteData;
+
+/**
+ * Interface to Roller's Lucene-based search facility.
+ * @author Dave Johnson
+ */
+public interface IndexManager
+{
+    /** Does index need to be rebuild */
+    public abstract boolean isInconsistentAtStartup();
+    
+    /** Remove user from index, returns immediately and operates in background */
+    public void removeWebsiteIndex(WebsiteData website) throws RollerException;
+    
+    /** Remove entry from index, returns immediately and operates in background */
+    public void removeEntryIndexOperation(WeblogEntryData entry) throws RollerException;
+    
+    /** Add entry to index, returns immediately and operates in background */
+    public void addEntryIndexOperation(WeblogEntryData entry) throws RollerException;
+    
+    /** R-index entry, returns immediately and operates in background */
+    public void addEntryReIndexOperation(WeblogEntryData entry) throws RollerException;
+    
+    /** Execute operation immediately */
+    public abstract void executeIndexOperationNow(final IndexOperation op);
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public abstract void release();
+    
+    /** Shutdown to be called on application shutdown */
+    public abstract void shutdown();
+
+    public abstract void rebuildWebsiteIndex(WebsiteData website) throws RollerException;
+
+    public abstract void rebuildWebsiteIndex() throws RollerException;
+}
\ No newline at end of file

Added: incubator/roller/trunk/src/org/apache/roller/model/PagePlugin.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PagePlugin.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PagePlugin.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PagePlugin.java Mon May  1 15:23:02 2006
@@ -0,0 +1,91 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+/*
+ * Created on May 26, 2003
+ */
+package org.apache.roller.model;
+
+import org.apache.velocity.context.Context;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WebsiteData;
+
+/**
+ * Interface for Roller weblog entry page plugins, which can transform
+ * entry summary or text fields.
+ *
+ * @author David M Johnson
+ */
+public interface PagePlugin {
+    public String name = "PagePlugin";
+    
+    /**
+     * Plugins can this as an opportunity to add any required objects
+     * to the RollerRequest and the VelocityContext.
+     * @param website     Website being processed
+     * @param config      javax.servlet.ServletContext (or null if running outside webapp)
+     * @param baseURL     Base URL of Roller site 
+     * @param ctx         Plugins may place objects into the Velocity Context.
+     */
+    public void init(
+            WebsiteData website,
+            Object servletContext,
+            String baseURL,
+            Context ctx) throws RollerException;
+    
+    /**
+     * Apply plugin to summary or text string associated with entry.
+     * @param entry       Entry being rendered.
+     * @param str         String to which plugin should be applied.
+     * @param singleEntry Indicates rendering on single entry page.
+     * @return            Results of applying plugin to entry.
+     */
+    public String render(WeblogEntryData entry, String str);
+    
+    /**
+     * Apply plugin to summary or text specified in string.
+     * @param str String to which plugin should be applied.
+     * @param singleEntry Indicates rendering on single entry page.
+     * @return Results of applying plugin to string.
+     */
+    public String render(String str);
+    
+    /**
+     * Must implement toString(), returning the human-friendly
+     * name of this Plugin.  This is what users will see.
+     * @return The human-friendly name of this Plugin.
+     */
+    public String toString();
+    
+    /**
+     * Returns the human-friendly name of this Plugin.
+     * This is what users will see.
+     * @return The human-friendly name of this Plugin.
+     */
+    public String getName();
+    
+    /**
+     * Briefly describes the function of the Plugin. May
+     * contain HTML.
+     * @return A brief description of the Plugin.
+     */
+    public String getDescription();
+    
+    /** Returns true if this plugin should be skipped on single entry pages. */
+    public boolean getSkipOnSingleEntry();
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/PagePluginManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PagePluginManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PagePluginManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PagePluginManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,18 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+/* Created on Nov. 26, 2005 */

package org.apache.roller.model;

import java.util.Map;
import java.io.Serializable;
import org.apache.velocity.context.Context;
import org.apache.roller.pojos.WeblogEntryData;
import org.apache.roller.pojos.WebsiteData;

/**
 * Manages Roller page plugins
 */
public interface PagePluginManager extends Serializable {
    
    /** 
     * Returns true if plugins are present 
     */
    public boolean hasPagePlugins();
    
    /**
     * Create and init plugins for processing entries in a specified website. 
     * @param website        Website being processed 
     * @param servletContext ServetContext or null if running outside webapp
     * @param contextURL     Absolute URL of webapp    
     * @param ctx            Velocity context 
     */
    public Map createAndInitPagePlugins(
            WebsiteData website,
            Object servletContext,
            String contextPath,
            Context ctx);
    
    /**
     * Accepts weblog
  entry, creates copy, applies plugins to copy and
     * returns the results.
     * @param entry       Original weblog entry
     * @param plugins     Map of plugins to apply
     * @param str         String to which to apply plugins
     * @param singleEntry Rendering for single entry page?
     * @return        Copy of weblog entry with plugins applied
     */
    public String applyPagePlugins(
       WeblogEntryData entry, Map pagePlugins, String str, boolean singleEntry);
    
    /** 
     * Release all resources associated with Roller session. 
     */
    public void release();      
}
\ No newline at end of file

Added: incubator/roller/trunk/src/org/apache/roller/model/PingQueueManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PingQueueManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PingQueueManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PingQueueManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.AutoPingData;
+import org.apache.roller.pojos.PingQueueEntryData;
+
+
+/**
+ * PingQueueManager.  This interface describes the manager for the weblog update ping request queue. The queue is
+ * processed by the <code>PingQueueProcesssor</code> and <code>PingQueueTask</code> components in the application
+ * layer.
+ */
+public interface PingQueueManager {
+    
+    
+    /**
+     * Add a new persistent entry to the queue.  If the queue already contains an entry for the ping target and website
+     * specified by this auto ping configuration, a new one will not be added.
+     *
+     * @param autoPing auto ping configuration for the ping request to be queued.
+     */
+    public void addQueueEntry(AutoPingData autoPing) throws RollerException;
+    
+    
+    /**
+     * Store the given queue entry.
+     *
+     * @param pingQueueEntry update the given queue entry
+     * @throws RollerException
+     */
+    public void saveQueueEntry(PingQueueEntryData pingQueueEntry) throws RollerException;
+    
+    
+    /**
+     * Remove a queue entry.
+     *
+     * @param pingQueueEntry the entry to be removed.
+     * @throws RollerException
+     */
+    public void removeQueueEntry(PingQueueEntryData pingQueueEntry) throws RollerException;
+    
+    
+    /**
+     * Retrieve an entry from the queue.
+     *
+     * @param id the unique id of the entry.
+     * @return the queue entry with the specified id.
+     * @throws RollerException
+     */
+    public PingQueueEntryData getQueueEntry(String id) throws RollerException;
+    
+    
+    /**
+     * Get all of the queue entries.
+     *
+     * @return the queue as a <code>List</code> of {@link PingQueueEntryData} objects.
+     * @throws RollerException
+     */
+    public List getAllQueueEntries() throws RollerException;
+    
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/PingTargetManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PingTargetManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PingTargetManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PingTargetManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  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.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.PingTargetData;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Manages ping targets.
+ *
+ * @author <a href="mailto:anil@busybuddha.org">Anil Gangolli</a>
+ */
+public interface PingTargetManager {
+    
+    
+    /**
+     * Store a ping target.
+     *
+     * @param pingTarget ping target data object.
+     * @throws RollerException
+     */
+    public void savePingTarget(PingTargetData pingTarget) throws RollerException;
+    
+    
+    /**
+     * Remove a ping target.
+     *
+     * @param id id of the ping target to be removed
+     * @throws RollerException
+     */
+    public void removePingTarget(PingTargetData pingTarget) throws RollerException;
+    
+    
+    /**
+     * Remove all custom targets (regardless of website).
+     */
+    public void removeAllCustomPingTargets() throws RollerException;
+    
+    
+    /**
+     * Retrieve a specific ping target by id.
+     *
+     * @param id id of the ping target to be retrieved.
+     * @return the ping target whose id is specified.
+     * @throws RollerException
+     */
+    public PingTargetData getPingTarget(String id) throws RollerException;
+    
+    
+    /**
+     * Get a list of the common (shared) ping targets.
+     *
+     * @return the list of common ping targets as a <code>List</code> of {@link PingTargetData} objects
+     * @throws RollerException
+     */
+    public List getCommonPingTargets() throws RollerException;
+    
+    
+    /**
+     * Get a list of the custom ping targets for the given website.
+     *
+     * @param website the website whose custom targets should be returned.
+     * @return the list of custom ping targets for the given website as a <code>List</code> of {@link PingTargetData}
+     *         objects
+     * @throws RollerException
+     */
+    public List getCustomPingTargets(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Check if the ping target has a name that is unique in the appropriate set.  If the ping target has no website id
+     * (is common), then this checks if the name is unique amongst common targets, and if custom then unique amongst
+     * custom targets. If the target has a non-null id, then it is allowed to have the same name as tha existing stored
+     * target with the same id.
+     *
+     * @param pingTarget
+     * @return true if the name is unique in the appropriate set (custom or common) ping targets.
+     * @throws RollerException
+     */
+    public boolean isNameUnique(PingTargetData pingTarget) throws RollerException;
+    
+    
+    /**
+     * Check if the url of the ping target is well-formed.  For this test, it must parse as a <code>java.net.URL</code>,
+     * with protocol <code>http</code> and a non-empty <code>host</code> portion.
+     *
+     * @param pingTarget
+     * @return true if the <code>pingUrl</code> property of the ping target is a well-formed url.
+     * @throws RollerException
+     */
+    public boolean isUrlWellFormed(PingTargetData pingTarget) throws RollerException;
+    
+    
+    /**
+     * Check if the host portion of the url of the ping target is known, meaning it is either a well-formed IP address
+     * or a hostname that resolves from the server.  The ping target url must parse as a <code>java.net.URL</code> in
+     * order for the hostname to be extracted for this test.  This will return false if that parsing fails.
+     *
+     * @param pingTarget
+     * @return true if the <code>pingUrl</code> (is well-formed and) the <code>host</code> portion of the url of the
+     *         ping target is a valid IP address or a hostname that can be resolved on the server.
+     * @throws RollerException
+     */
+    public boolean isHostnameKnown(PingTargetData pingTarget) throws RollerException;
+    
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/PlanetManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PlanetManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PlanetManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PlanetManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,165 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.PlanetConfigData;
+import org.apache.roller.pojos.PlanetEntryData;
+import org.apache.roller.pojos.PlanetGroupData;
+import org.apache.roller.pojos.PlanetSubscriptionData;
+
+/**
+ * Manages groups and subscriptions, can return aggregation for any group.
+ * @author David M Johnson
+ */
+public interface PlanetManager extends Serializable
+{
+    //------------------------------------------------------------------ create
+    
+    /**
+     * Save configration 
+     */
+    public void saveConfiguration(PlanetConfigData config) 
+        throws RollerException;
+    
+    /**
+     * Save new or update existing entry
+     */
+    public void saveEntry(PlanetEntryData entry) throws RollerException; 
+
+    /**
+     * Save new or update existing a group
+     */
+    public void saveGroup(PlanetGroupData sub) throws RollerException;
+    
+    /**
+     * Save or update a subscription
+     */
+    public void saveSubscription(PlanetSubscriptionData sub) 
+        throws RollerException;
+    
+    //---------------------------------------------------------------- retrieve    
+
+    /** 
+     * Get the one planet config object, config has default group 
+     */
+    public PlanetConfigData getConfiguration() throws RollerException;
+    
+    /** 
+     * Get handles for all defined groups 
+     */
+    public List getGroupHandles() throws RollerException;
+    
+    /** 
+     * Get list of group objects 
+     */
+    public List getGroups() throws RollerException;
+    
+    /** 
+     * Get group by handle, group has subscriptions
+     */
+    public PlanetGroupData getGroup(String handle) throws RollerException;
+    
+    /** 
+     * Get group by ID rather than handle.
+     */
+    public PlanetGroupData getGroupById(String id) throws RollerException;
+    
+    /**
+     * Get subscription by feedUrl.
+     */
+    public PlanetSubscriptionData getSubscription(String feedUrl) 
+        throws RollerException;
+
+    /**
+     * Get subscription by ID rather than feedUrl.
+     */
+    public PlanetSubscriptionData getSubscriptionById(String id) 
+        throws RollerException;
+    
+    /** 
+     * Get all subscriptions.
+     */
+    public Iterator getAllSubscriptions() throws RollerException;
+    
+    /**
+     * Get total number of subscriptions.
+     */
+    public int getSubscriptionCount() throws RollerException;
+    
+    /** 
+     * Get top X subscriptions.
+     */
+    public List getTopSubscriptions(int max) throws RollerException;
+
+    /** 
+     * Get top X subscriptions, restricted by group.
+     */
+    public List getTopSubscriptions( 
+        PlanetGroupData group, int max) throws RollerException;
+
+    //------------------------------------------------------------ aggregations
+    
+    /** 
+     * Get agggration for group from cache, enries in  
+     * reverse chonological order.
+     * Respects category constraints of group.
+     * @param group 
+     * @param maxEntries Maximum number of entries to return. 
+     */
+    public List getAggregation(
+        PlanetGroupData group, int maxEntries) throws RollerException;
+    
+    /** 
+     * Get agggration from cache, enries in reverse chonological order.
+     * @param maxEntries Maximum number of entries to return. 
+     */
+    public List getAggregation(int maxEntries) throws RollerException;
+    
+    //------------------------------------------------------------------ update
+    
+    /** Refresh entry data by fetching and parsing feeds. */
+    public void refreshEntries() throws RollerException;
+    
+    //------------------------------------------------------------------ delete
+    
+    /** Delete group and any subscriptions that are orphaned. */
+    public void deleteGroup(PlanetGroupData group) throws RollerException;
+    
+    /** Delete subscription, remove it from groups, cache, etc. */
+    public void deleteSubscription(PlanetSubscriptionData group) 
+        throws RollerException;
+    
+    /** Delete entry. */
+    public void deleteEntry(PlanetEntryData entry) throws RollerException;
+
+    /** Clear any aggregations and update times that have been cached */
+    public void clearCachedAggregations();
+    
+    /** Get last update time for entries most recent 'all' aggregation */
+    public Date getLastUpdated();
+    
+    /** Get last updated time for entries in a specify group */
+    public Date getLastUpdated(PlanetGroupData group);
+}
+

Added: incubator/roller/trunk/src/org/apache/roller/model/PropertiesManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/PropertiesManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/PropertiesManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/PropertiesManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,65 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+/*
+ * PropertiesManager.java
+ *
+ * Created on April 21, 2005, 10:34 AM
+ */
+
+package org.apache.roller.model;
+
+import java.util.Map;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.RollerPropertyData;
+
+
+/**
+ * Manages global properties for Roller.
+ */
+public interface PropertiesManager {
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+    
+    /** 
+     * Save a single property 
+     */
+    public void saveProperty(RollerPropertyData property) throws RollerException;
+    
+    
+    /** 
+     * Save a list of properties 
+     */
+    public void saveProperties(Map properties) throws RollerException;
+    
+    
+    /** 
+     * Retrieve a single property by name 
+     */
+    public RollerPropertyData getProperty(String name) throws RollerException;
+    
+    
+    /** 
+     * Retrieve a list of all properties 
+     */
+    public Map getProperties() throws RollerException;
+    
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/RefererManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/RefererManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/RefererManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/RefererManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,148 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.RefererData;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Interface to Referer management.
+ */
+public interface RefererManager {
+    
+    
+    /**
+     * Store the referer.
+     */
+    public void saveReferer(RefererData referer) throws RollerException;
+    
+    
+    /**
+     * Remove a single referer.
+     */
+    public void removeReferer(RefererData referer) throws RollerException;
+    
+    
+    /**
+     * Clear referrer dayhits and remove referrers without excerpts.
+     */
+    public void clearReferrers() throws RollerException;
+    
+    
+    /**
+     * Clear referrer dayhits and remove referrers without excerpts.
+     */
+    public void clearReferrers(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Retrieve referer by ID.
+     */
+    public RefererData getReferer(String id) throws RollerException;
+    
+    
+    /**
+     * Get all referers for specified weblog.
+     * @param weblog
+     * @return List of type RefererData
+     * @throws RollerException
+     */
+    public List getReferers(WebsiteData weblog) throws RollerException;
+    
+    
+    /**
+     * Get all referers for specified user that were made today.
+     * @param userName Name of user.
+     * @return List of type RefererData
+     * @throws RollerException
+     */
+    public List getTodaysReferers(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Get referers for a specified date.
+     * @param userName Name of user.
+     * @param date YYYYMMDD format of day's date.
+     * @return List of type RefererData.
+     * @throws RollerException
+     */
+    public List getReferersToDate(WebsiteData website, String date) throws RollerException;
+    
+    
+    /**
+     * Get most popular websites based on referer day hits.
+     * @return List of WebsiteDisplayData objects.
+     */
+    public List getDaysPopularWebsites(int max) throws RollerException;
+    
+    
+    /**
+     * Get referers that refer to a specific weblog entry.
+     * @param entryid Weblog entry ID
+     * @return List of RefererData objects.
+     * @throws RollerException
+     */
+    public List getReferersToEntry(String entryid) throws RollerException;
+    
+    
+    /** 
+     * Get user's day hits 
+     */
+    public int getDayHits(WebsiteData website) throws RollerException;
+    
+    
+    /** 
+     * Get user's all-time total hits 
+     */
+    public int getTotalHits(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Apply ignoreWord/spam filters to all referers in system.
+     */
+    public void applyRefererFilters() throws RollerException;
+    
+    
+    /**
+     * Apply ignoreWord/spam filters to all referers in website.
+     */
+    public void applyRefererFilters(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Process an incoming referer.
+     */
+    public void processReferrer(
+            String requestUrl,
+            String referrerUrl,
+            String weblogHandle,
+            String weblogAnchor,
+            String weblogDateString);
+    
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+}
+

Added: incubator/roller/trunk/src/org/apache/roller/model/Roller.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/Roller.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/Roller.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/Roller.java Mon May  1 15:23:02 2006
@@ -0,0 +1,153 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.model;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import org.apache.roller.RollerException;
+import org.apache.roller.business.referrers.ReferrerQueueManager;
+
+
+/** 
+ * The main entry point interface of the Roller business tier.
+ */
+public interface Roller {
+    
+    
+    /** 
+     * Get UserManager associated with this Roller instance.
+     */
+    public UserManager getUserManager() throws RollerException;
+    
+    
+    /** 
+     * Get BookmarkManager associated with this Roller instance.
+     */
+    public BookmarkManager getBookmarkManager() throws RollerException;
+    
+    
+    /** 
+     * Get WeblogManager associated with this Roller instance.
+     */
+    public WeblogManager getWeblogManager() throws RollerException;
+    
+    
+    /** 
+     * Get RefererManager associated with this Roller instance.
+     */
+    public RefererManager getRefererManager() throws RollerException;
+    
+    
+    /**
+     * Get ReferrerQueueManager.
+     */
+    public ReferrerQueueManager getReferrerQueueManager();
+    
+    
+    /** 
+     * Get RefererManager associated with this Roller instance.
+     */
+    public ConfigManager getConfigManager() throws RollerException;
+    
+    
+    /**
+     * Get the AutoPingManager associated with this Roller instance.
+     */
+    public AutoPingManager getAutopingManager() throws RollerException;
+    
+    
+    /**
+     * Get the PingTargetManager associated with this Roller instance.
+     */
+    public PingTargetManager getPingTargetManager() throws RollerException;
+    
+    
+    /**
+     * Get the PingQueueManager associated with this Roller instance.
+     */
+    public PingQueueManager getPingQueueManager() throws RollerException;
+    
+    
+    /** 
+     * Get PropertiesManager associated with this Roller instance.
+     */
+    public PropertiesManager getPropertiesManager() throws RollerException;
+    
+    
+    /** 
+     * Get FileManager associated with this Roller instance.
+     */
+    public FileManager getFileManager() throws RollerException;
+    
+    
+    /**
+     * Get ThreadManager associated with this Roller instance.
+     */
+    public ThreadManager getThreadManager() throws RollerException;
+    
+    
+    /**
+     * Get IndexManager associated with this Roller instance.
+     */
+    public IndexManager getIndexManager() throws RollerException;
+    
+    
+    /**
+     * Get PlanetManager associated with this Roller instance.
+     */
+    public PlanetManager getPlanetManager() throws RollerException;
+    
+    
+    /**
+     * Get ThemeManager associated with this Roller instance.
+     */
+    public ThemeManager getThemeManager() throws RollerException;
+    
+    
+    /**
+     * Get PagePluginManager associated with this Roller instance.
+     */
+    public PagePluginManager getPagePluginManager() throws RollerException;
+    
+    
+    /**
+     * Upgrade database if needed.
+     */
+    public void upgradeDatabase(Connection con) throws RollerException;
+    
+    
+    /**
+     * Flush object states.
+     */
+    public void flush() throws RollerException;
+    
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+    
+    /**
+     * Release all resources necessary for this instance of Roller.
+     */
+    public void shutdown();
+    
+}
+

Added: incubator/roller/trunk/src/org/apache/roller/model/RollerFactory.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/RollerFactory.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/RollerFactory.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/RollerFactory.java Mon May  1 15:23:02 2006
@@ -0,0 +1,150 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.RollerException;
+import org.apache.roller.config.RollerConfig;
+import org.apache.roller.util.StringUtils;
+
+/**
+ * This is primarily a static holder for whatever Roller implementation is 
+ * being used. RollerContext should call setRoller(ServletContext) during its 
+ * initialization so that the Roller implementation can be instantiated. 
+ * Likewise, RollerContext.getRoller() should be replaced with calls to 
+ * RollerFactory.getRoller(). This should prevent us any direct ties to 
+ * Castor and permit for experimentation* with other persistence frameworks.
+ * 
+ * @author llavandowska
+ * @author Allen Gilliland
+ */
+public abstract class RollerFactory
+{
+    private static final String DEFAULT_IMPL = 
+        "org.apache.roller.business.hibernate.HibernateRollerImpl";
+    
+    private static Roller rollerInstance = null;
+
+    private static Log mLogger = 
+        LogFactory.getFactory().getInstance(RollerFactory.class);
+            
+    /**
+     * Let's just be doubling certain this class cannot be instantiated.
+     * @see java.lang.Object#Object()
+     */
+    private RollerFactory()
+    {
+        // hello all you beautiful people
+    }
+    
+    /**
+     * Static accessor for the instance of Roller
+     * held by this class.
+     * 
+     * @return Roller
+     */
+    public static Roller getRoller()
+    {
+        // check to see if we need to instantiate
+        if(rollerInstance == null) {
+            // lookup value for the roller classname to use
+            String roller_classname = 
+                    RollerConfig.getProperty("persistence.roller.classname");
+            
+            // now call setRoller ourselves
+            RollerFactory.setRoller(roller_classname);
+        }
+		
+        return rollerInstance;
+    }
+    
+    
+    /**
+     * Construct the actual Roller implemenation for this instance.
+     * 
+     * Use reflection to call the implementation's instantiate() method.
+     * Should this fail (either no implementation is specified or
+     * instantiate() throws an Exception) then the DEFAULT_IMPL will be tried.
+     * If this should fail then we are in trouble :/
+     *
+     * @param roller_classname The name of the Roller implementation class
+     * to instantiate.
+     */
+    public static void setRoller(String roller_classname)
+    {
+        
+        if (StringUtils.isEmpty( roller_classname ))
+            roller_classname = DEFAULT_IMPL;
+        
+        try
+        {
+            Class rollerClass = Class.forName(roller_classname);
+            java.lang.reflect.Method instanceMethod =
+                    rollerClass.getMethod("instantiate", (Class[])null);
+            
+            // do the invocation
+            rollerInstance = (Roller)
+                instanceMethod.invoke(rollerClass, (Object[])null);
+            
+            mLogger.info("Using Roller Impl: " + roller_classname);
+        }
+        catch (Exception e)
+        {
+            // uh oh
+            mLogger.error("Error instantiating " + roller_classname, e);
+            try
+            {
+                // if we didn't already try DEFAULT_IMPL then try it now
+                if( ! DEFAULT_IMPL.equals(roller_classname))
+                {
+                    mLogger.info("** Trying DEFAULT_IMPL "+DEFAULT_IMPL+" **");
+                    
+                    Class rollerClass = Class.forName(DEFAULT_IMPL);
+                    java.lang.reflect.Method instanceMethod =
+                            rollerClass.getMethod("instantiate", (Class[])null);
+                    
+                    // do the invocation
+                    rollerInstance = (Roller) 
+                        instanceMethod.invoke(rollerClass, (Object[])null);
+                }
+                else
+                {
+                    // we just do this so that the logger gets the message
+                    throw new Exception("Doh! Couldn't instantiate a roller class");
+                }
+                
+            }
+            catch (Exception re)
+            {
+                mLogger.fatal("Failed to instantiate fallback roller impl", re);
+            }
+        }
+        
+    }
+    
+	
+	/**
+	 * Set Roller to be returned by factory.
+	 */
+	public static void setRoller(Roller roller)
+	{
+		if (roller != null) rollerInstance = roller;
+	}
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/ScheduledTask.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/ScheduledTask.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/ScheduledTask.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/ScheduledTask.java Mon May  1 15:23:02 2006
@@ -0,0 +1,32 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+import org.apache.roller.RollerException;
+
+/**
+ * Interface for pluggable scheduled task.
+ * @author David M Johnson
+ */
+public interface ScheduledTask
+{
+    /**
+     * Initialized scheduled task with Roller instance and real-path to Roller context.
+     */
+    public void init(Roller roller, String realPath) throws RollerException;
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/ThemeManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/ThemeManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/ThemeManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/ThemeManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,118 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+/*
+ * ThemeManager.java
+ *
+ * Created on June 27, 2005, 12:49 PM
+ */
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.ThemeNotFoundException;
+import org.apache.roller.pojos.Theme;
+import org.apache.roller.pojos.ThemeTemplate;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Manager interface for accessing Theme related objects.
+ *
+ * @author Allen Gilliland
+ */
+public interface ThemeManager {
+    
+    /**
+     * Get the Theme object with the given name.
+     *
+     * @throws ThemeNotFoundException If the named theme cannot be found.
+     * @throws RollerException If there is some kind of fatal backend error.
+     **/
+    public Theme getTheme(String name)
+        throws ThemeNotFoundException, RollerException;
+    
+    
+    /**
+     * Get the Theme object with the given theme id.
+     *
+     * @throws ThemeNotFoundException If the named theme cannot be found.
+     * @throws RollerException If there is some kind of fatal backend error.
+     */
+    public Theme getThemeById(String theme_id)
+        throws ThemeNotFoundException, RollerException;
+    
+    
+    /**
+     * Get a list of all available themes.
+     * This list is ordered alphabetically by default.
+     *
+     * NOTE: this only returns a list of theme names, not actual Theme objects.
+     **/
+    public List getThemesList();
+    
+    
+    /**
+     * Get a list of all theme names that are currently enabled.
+     * This list is ordered alphabetically by default.
+     *
+     * NOTE: this only returns a list of theme names, not actual Theme objects.
+     */
+    public List getEnabledThemesList();
+    
+    
+    /**
+     * Get the template from a given theme.
+     *
+     * @throws ThemeNotFoundException If the named theme cannot be found.
+     * @throws RollerException If there is some kind of fatal backend error.
+     */
+    public ThemeTemplate getTemplate(String theme_name, String template_name)
+        throws ThemeNotFoundException, RollerException;
+    
+    
+    /**
+     * Get the template from a given theme using the template id.
+     *
+     * Theme templates use a special id value when they come off the filesystem.
+     * When a theme is read off the filesystem it's templates are given an id
+     * like ... <theme name>:<template name>
+     *
+     * @throws ThemeNotFoundException If the named theme cannot be found.
+     * @throws RollerException If there is some kind of fatal backend error.
+     */
+    public ThemeTemplate getTemplateById(String template_id)
+        throws ThemeNotFoundException, RollerException;
+
+    
+    /**
+     * Get the template from a given theme using the template link value.
+     *
+     * Note that for themes we enforce the rule that 
+     *      Theme.name == Theme.link
+     *
+     * So doing a lookup by link is the same as doing a lookup by name.
+     *
+     * @throws ThemeNotFoundException If the named theme cannot be found.
+     * @throws RollerException If there is some kind of fatal backend error.
+     */
+    public ThemeTemplate getTemplateByLink(String theme_name, String template_link)
+        throws ThemeNotFoundException, RollerException;
+   
+    public void saveThemePages(WebsiteData website, Theme theme) throws RollerException;
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/ThreadManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/ThreadManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/ThreadManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/ThreadManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,68 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+package org.apache.roller.model;
+
+import java.util.TimerTask;
+import java.sql.Date;
+
+/**
+ * Thread management for executing scheduled and asynchronous tasks.
+ */
+public interface ThreadManager
+{
+    public static final long MIN_RATE_INTERVAL_MINS = 1;
+
+    /**
+     * Execute runnable in background (asynchronously).
+     * @param runnable 
+     * @throws java.lang.InterruptedException 
+     */
+    public void executeInBackground(Runnable runnable)
+            throws InterruptedException;
+
+    /**
+     * Execute runnable in foreground (synchronously).
+     */
+    public void executeInForeground(Runnable runnable)
+            throws InterruptedException;
+
+    /**
+     * Schedule task to run once a day.
+     */
+    public void scheduleDailyTimerTask(TimerTask task);
+
+    /**
+     * Schedule task to run once per hour.
+     */
+    public void scheduleHourlyTimerTask(TimerTask task);
+
+    /**
+     * Schedule task to run at fixed rate.
+     */
+    public void scheduleFixedRateTimerTask(TimerTask task, long delayMins, long periodMins);
+
+    /**
+     * Shutdown
+     */
+    public void shutdown();
+
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+}
\ No newline at end of file

Added: incubator/roller/trunk/src/org/apache/roller/model/UserManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/UserManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/UserManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/UserManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,261 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.model;
+
+import java.util.List;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.pojos.PermissionsData;
+import org.apache.roller.pojos.UserData;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Manages users, weblogs, permissions, and weblog pages.
+ */
+public interface UserManager {
+        
+    /**
+     * Add new user object to Roller. User will be given the global editor role,
+     * unless it's the first user, who will get the global admin role.
+     *
+     * @param user User object to be added, initialized with name, password, etc.
+     * @throws RollerException
+     */
+    public void addUser(UserData newUser) throws RollerException;
+    
+    
+    /**
+     * Store a single user.
+     */
+    public void saveUser(UserData data) throws RollerException;
+    
+    
+    public void removeUser(UserData user) throws RollerException;
+    
+    
+    public UserData getUser(String id)throws RollerException;
+    
+    
+    /** 
+     * Get user object by user name (only enabled users) 
+     */
+    public UserData getUserByUsername(String userName) throws RollerException;
+    
+    
+    /** 
+     * Get user object by user name, optionally include dis-enabled users 
+     */
+    public UserData getUserByUsername(String userName, Boolean enabled) throws RollerException;
+    
+    
+    /** 
+     * Get all enabled users 
+     */
+    public List getUsers() throws RollerException;
+    
+    
+    /**
+     * Get all users, optionally include dis-enabled users.
+     *
+     * @param enabled True for enabled only, false for disabled only, null for all
+     */
+    public List getUsers(Boolean enabled) throws RollerException;
+    
+    
+    /**
+     * Get all users or a website.
+     *
+     * @param website Get all users of this website (or null for all)
+     * @returns List of UserData objects.
+     */
+    public List getUsers(WebsiteData website, Boolean enabled) throws RollerException;
+    
+    
+    /**
+     * Returns users whose usernames or email addresses start with a string.
+     * @param startsWith String to match userNames and emailAddresses against
+     * @param offset     Offset into results (for paging)
+     * @param length     Max to return (for paging)
+     * @param enabled    True for only enalbed, false for disabled, null for all
+     * @return List of (up to length) users that match startsWith string
+     */
+    public List getUsersStartingWith(String startsWith,
+            int offset, int length, Boolean enabled) throws RollerException;
+    
+    
+    public void addWebsite(WebsiteData newWebsite) throws RollerException;
+    
+    
+    /**
+     * Store a single weblog.
+     */
+    public void saveWebsite(WebsiteData data) throws RollerException;
+    
+    
+    public void removeWebsite(WebsiteData website) throws RollerException;
+    
+    
+    public WebsiteData getWebsite(String id) throws RollerException;
+    
+    
+    /**
+     * Get website specified by handle (or null if enabled website not found).
+     *
+     * @param handle  Handle of website
+     */
+    public WebsiteData getWebsiteByHandle(String handle) throws RollerException;
+    
+    
+    /**
+     * Get website specified by handle with option to return only enabled websites.
+     *
+     * @param handle  Handle of website
+     */
+    public WebsiteData getWebsiteByHandle(String handle, Boolean enabled) throws RollerException;
+    
+    
+    /**
+     * Get all websites of which user is a member
+     *
+     * @param user    Get all websites for this user (or null for all)
+     * @param enabled Get all with this enabled state (or null or all)
+     * @param active  Get all with this active state (or null or all)
+     * @returns List of WebsiteData objects.
+     */
+    public List getWebsites(UserData user, Boolean enabled, Boolean active) throws RollerException;
+    
+    
+    public void savePermissions(PermissionsData perms) throws RollerException;
+    
+    
+    public void removePermissions(PermissionsData perms) throws RollerException;
+    
+    
+    public PermissionsData getPermissions(String id) throws RollerException;
+    
+    
+    /**
+     * Get pending permissions for user
+     *
+     * @param user User (not null)
+     * @returns List of PermissionsData objects.
+     */
+    public List getPendingPermissions(UserData user) throws RollerException;
+    
+    
+    /**
+     * Get pending permissions for website
+     *
+     * @param website Website (not null)
+     * @returns List of PermissionsData objects.
+     */
+    public List getPendingPermissions(WebsiteData user) throws RollerException;
+    
+    
+    /**
+     * Get permissions of user in website
+     *
+     * @param website Website (not null)
+     * @param user    User (not null)
+     * @return        PermissionsData object
+     */
+    public PermissionsData getPermissions(WebsiteData website, UserData user) throws RollerException;
+    
+    
+    /**
+     * Get all permissions in website
+     *
+     * @param website Website (not null)
+     * @return        PermissionsData object
+     */
+    public List getAllPermissions(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Get all permissions of user
+     *
+     * @param user User (not null)
+     * @return     PermissionsData object
+     */
+    public List getAllPermissions(UserData user) throws RollerException;
+    
+    
+    /**
+     * Invite user to join a website with specific permissions
+     *
+     * @param website Website to be joined (persistent instance)
+     * @param user    User to be invited (persistent instance)
+     * @param perms   Permissions mask (see statics in PermissionsData)
+     * @return        New PermissionsData object, with pending=true
+     */
+    public PermissionsData inviteUser(WebsiteData website, UserData user, short perms) throws RollerException;
+    
+    
+    /**
+     * Retire user from a website
+     *
+     * @param website Website to be retired from (persistent instance)
+     * @param user    User to be retired (persistent instance)
+     */
+    public void retireUser(WebsiteData website, UserData user) throws RollerException;
+    
+    
+    /**
+     * Store page
+     */
+    public void savePage(WeblogTemplate data) throws RollerException;
+    
+    
+    /**
+     * Remove page
+     */
+    public void removePage(WeblogTemplate page) throws RollerException;
+    
+    
+    /**
+     * Get page by ID
+     */
+    public WeblogTemplate getPage(String id) throws RollerException;
+    
+    
+    /** 
+     * Get user's page by name 
+     */
+    public WeblogTemplate getPageByName(WebsiteData w, String p) throws RollerException;
+    
+    
+    /** 
+     * Get user's page by link 
+     */
+    public WeblogTemplate getPageByLink(WebsiteData w, String p) throws RollerException;
+    
+    
+    /** 
+     * Get users pages 
+     */
+    public List getPages(WebsiteData w) throws RollerException;
+    
+    
+    public void release();
+    
+}
+
+
+

Added: incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/WeblogManager.java Mon May  1 15:23:02 2006
@@ -0,0 +1,394 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+*  contributor license agreements.  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.  For additional information regarding
+* copyright in this work, please see the NOTICE file in the top level
+* directory of this distribution.
+*/
+
+package org.apache.roller.model;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.Assoc;
+import org.apache.roller.pojos.CommentData;
+import org.apache.roller.pojos.WeblogCategoryAssoc;
+import org.apache.roller.pojos.WeblogCategoryData;
+import org.apache.roller.pojos.WeblogEntryData;
+import org.apache.roller.pojos.WebsiteData;
+
+
+/**
+ * Interface to weblog entry, category and comment management.
+ */
+public interface WeblogManager {
+    
+    public static final String CATEGORY_ATT = "category.att";
+       
+    public void saveWeblogEntry(WeblogEntryData entry) throws RollerException;
+        
+    public void removeWeblogEntry(WeblogEntryData entry) throws RollerException;
+    
+    
+    /**
+     * Get weblog entry by ID
+     */
+    public WeblogEntryData getWeblogEntry(String id) throws RollerException;
+    
+    
+    /** 
+     * Get weblog entry by anchor. 
+     */
+    public WeblogEntryData getWeblogEntryByAnchor(WebsiteData website, String anchor) 
+            throws RollerException;
+    
+    
+    /**
+     * Get WeblogEntries by offset/length as list in reverse chronological order.
+     * The range offset and list arguments enable paging through query results.
+     * @param userName   User name or null to get for all users.
+     * @param startDate  Start date or null for no start date.
+     * @param endDate    End date or null for no end date.
+     * @param catName    Category path or null for all categories.
+     * @param status     Status of DRAFT, PENDING, PUBLISHED or null for all
+     * @param sortby     Sort by either 'pubTime' or 'updateTime' (null for pubTime)
+     * @param offset     Index of first entry to include.
+     * @param length     Max number of entries to include.
+     * @return List of WeblogEntryData objects in reverse chrono order.
+     * @throws RollerException
+     */
+    public List getWeblogEntries(
+            WebsiteData website,
+            Date    startDate,
+            Date    endDate,
+            String  catName,
+            String  status,
+            String  sortBy,
+            int offset,
+            int range)
+            throws RollerException;
+    
+    
+    /**
+     * Get WeblogEntries up to limit as list in reverse chronological order.
+     * The range offset and list arguments enable paging through query results.
+     * @param userName   User name or null to get for all users.
+     * @param startDate  Start date or null for no start date.
+     * @param endDate    End date or null for no end date.
+     * @param catName    Category path or null for all categories.
+     * @param status     Status of DRAFT, PENDING, PUBLISHED or null for all
+     * @param sortby     Sort by either 'pubTime' or 'updateTime' (null for pubTime)
+     * @param offset     Index of first entry to include.
+     * @param maxEntries     Max number of entries to include.
+     * @return List of WeblogEntryData objects in reverse chrono order.
+     * @throws RollerException
+     */
+    public List getWeblogEntries(
+            WebsiteData website,
+            Date    startDate,
+            Date    endDate,
+            String  catName,
+            String  status,
+            String  sortBy,
+            Integer maxEntries)
+            throws RollerException;
+    
+    
+    /**
+     * Get Weblog Entries grouped by day. This method returns a Map that
+     * contains Lists, each List contains WeblogEntryData objects, and the
+     * Lists are keyed by Date objects.
+     * @param userName   User name or null to get for all users.
+     * @param startDate  Start date or null for no start date.
+     * @param endDate    End date or null for no end date.
+     * @param catName    Category path or null for all categories.
+     * @param status     Status of DRAFT, PENDING, PUBLISHED or null for all
+     * @param maxEntries Max entries or null for no limit.
+     * @return Map of Lists, keyed by Date, and containing WeblogEntryData.
+     * @throws RollerException
+     */
+    public Map getWeblogEntryObjectMap(
+            WebsiteData website,
+            Date    startDate,
+            Date    endDate,
+            String  catName,
+            String  status,
+            Integer maxEntries)
+            throws RollerException;
+    
+    
+    /**
+     * Get Weblog Entry date strings grouped by day. This method returns a Map
+     * that contains Lists, each List contains YYYYMMDD date strings objects,
+     * and the Lists are keyed by Date objects.
+     * @param userName   User name or null to get for all users.
+     * @param startDate  Start date or null for no start date.
+     * @param endDate    End date or null for no end date.
+     * @param catName    Category path or null for all categories.
+     * @param status     Status of DRAFT, PENDING, PUBLISHED or null for all
+     * @param maxEntries Max entries or null for no limit.
+     * @return Map of Lists, keyed by Date, and containing date strings.
+     * @throws RollerException
+     */
+    public Map getWeblogEntryStringMap(
+            WebsiteData website,
+            Date    startDate,
+            Date    endDate,
+            String  catName,
+            String  status,
+            Integer maxEntries)
+            throws RollerException;
+    
+    
+    /**
+     * Get weblog entries with given category or, optionally, any sub-category
+     * of that category.
+     * @param cat     Category.
+     * @param subcats True if sub-categories are to be fetched.
+     * @return        List of weblog entries in category.
+     */
+    public List getWeblogEntries(WeblogCategoryData cat, boolean subcats) 
+            throws RollerException;
+    
+    
+    /**
+     * Get the WeblogEntry following, chronologically, the current entry.
+     * Restrict by the Category, if named.
+     *
+     * @param current The "current" WeblogEntryData.
+     * @param catName The value of the requested Category Name.
+     * @return
+     */
+    public WeblogEntryData getNextEntry(WeblogEntryData current, String catName) 
+            throws RollerException;
+    
+    
+    /**
+     * Get the WeblogEntry prior to, chronologically, the current entry.
+     * Restrict by the Category, if named.
+     *
+     * @param current The "current" WeblogEntryData.
+     * @param catName The value of the requested Category Name.
+     * @return
+     */
+    public WeblogEntryData getPreviousEntry(WeblogEntryData current, 
+            String catName) throws RollerException;
+    
+    
+    /**
+     * Get entries next after current entry.
+     * @param entry Current entry.
+     * @param catName Only return entries in this category (if not null).
+     * @param maxEntries Maximum number of entries to return.
+     */
+    public List getNextEntries(WeblogEntryData entry, 
+            String catName, int maxEntries) throws RollerException;
+    
+    
+    /**
+     * Get entries previous to current entry.
+     * @param entry Current entry.
+     * @param catName Only return entries in this category (if not null).
+     * @param maxEntries Maximum number of entries to return.
+     */
+    public List getPreviousEntries(WeblogEntryData entry, 
+            String catName, int maxEntries) throws RollerException;
+    
+    
+    /**
+     * Get specified number of most recent pinned and published Weblog Entries.
+     * @param max Maximum number to return.
+     * @return Collection of WeblogEntryData objects.
+     */
+    public List getWeblogEntriesPinnedToMain(Integer max) throws RollerException;
+    
+    
+    /** Get time of last update for a weblog specified by username */
+    public Date getWeblogLastPublishTime(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Gets returns most recent pubTime, optionally restricted by category.
+     * @param handle   Handle of website or null for all users
+     * @param catName  Category name of posts or null for all categories
+     * @return         Date Of last publish time
+     * @throws RollerException
+     */
+    public Date getWeblogLastPublishTime(WebsiteData website, String catName )
+            throws RollerException;
+    
+    
+    public void saveWeblogCategory(WeblogCategoryData cat) throws RollerException;
+    
+    
+    /**
+     * Recategorize all entries with one category to another.
+     * @param srcId
+     * @param destId
+     * @throws org.apache.roller.RollerException
+     */
+    public void moveWeblogCategoryContents(String srcId, String destId) 
+            throws RollerException;
+    
+    
+    public void removeWeblogCategory(WeblogCategoryData cat) throws RollerException;
+    
+    
+    /**
+     * Get category by ID
+     */
+    public WeblogCategoryData getWeblogCategory(String id) throws RollerException;
+    
+    
+    /**
+     * Get top level categories for a website.
+     * @param website Website.
+     */
+    public WeblogCategoryData getRootWeblogCategory(WebsiteData website) throws RollerException;
+    
+    
+    /**
+     * Get category specified by website and categoryPath.
+     * @param website      Website of WeblogCategory.
+     * @param categoryPath Path of WeblogCategory, relative to category root.
+     */
+    public WeblogCategoryData getWeblogCategoryByPath(WebsiteData website, 
+            String categoryPath) throws RollerException;
+    
+    /**
+     * Get sub-category by path relative to specified category.
+     * @param category  Root of path or null to start at top of category tree.
+     * @param path      Path of category to be located.
+     * @param website   Website of categories.
+     * @return          Category specified by path or null if not found.
+     */
+    public WeblogCategoryData getWeblogCategoryByPath(WebsiteData wd, 
+            WeblogCategoryData category, String string) throws RollerException;
+    
+    
+    /** Get WebLogCategory objects for a website. */
+    public List getWeblogCategories(WebsiteData website) throws RollerException;
+    
+    
+    /** Get WebLogCategory objects for a website. */
+    public List getWeblogCategories(WebsiteData website, boolean includeRoot)
+            throws RollerException;
+    
+    
+    /**
+     * Get absolute path to category, appropriate for use by getWeblogCategoryByPath().
+     * @param category WeblogCategoryData.
+     * @return         Forward slash separated path string.
+     */
+    public String getPath(WeblogCategoryData category) throws RollerException;
+    
+    
+    public Assoc getWeblogCategoryParentAssoc(WeblogCategoryData data) throws RollerException;
+    
+    public List getWeblogCategoryChildAssocs(WeblogCategoryData data) throws RollerException;
+    
+    public List getAllWeblogCategoryDecscendentAssocs(WeblogCategoryData data) throws RollerException;
+    
+    public List getWeblogCategoryAncestorAssocs(WeblogCategoryData data) throws RollerException;
+    
+    
+    public void saveComment(CommentData comment) throws RollerException;
+    
+    
+    public void removeComment(CommentData comment) throws RollerException;
+    
+    
+    /**
+     * Get comment by ID
+     */
+    public CommentData getComment(String id) throws RollerException;
+    
+    
+    /**
+     * Generic comments query method
+     * @param website    Website or null for all comments on site
+     * @param entry      Entry or null to include all comments
+     * @param startDate  Start date or null for no restriction
+     * @param endDate    End date or null for no restriction
+     * @param pending    Pending flag value or null for no restriction
+     * @param pending    Approved flag value or null for no restriction
+     * @param reverseChrono True for results in reverse chrono order
+     * @param spam       Spam flag value or null for no restriction
+     * @param offset     Offset into results for paging
+     * @param length     Max comments to return (or -1 for no limit)
+     */
+    public List getComments(
+            WebsiteData     website,
+            WeblogEntryData entry,
+            String          searchString,
+            Date            startDate,
+            Date            endDate,
+            Boolean         pending,
+            Boolean         approved,
+            Boolean         spam,
+            boolean         reverseChrono,
+            int             offset,
+            int             length
+            ) throws RollerException;
+    
+    
+    /**
+     * Create unique anchor for weblog entry.
+     */
+    public String createAnchor(WeblogEntryData data) throws RollerException;
+    
+    
+    /**
+     * Check for duplicate category name.
+     */
+    public boolean isDuplicateWeblogCategoryName(WeblogCategoryData data)
+            throws RollerException;
+    
+    
+    /**
+     * Check if weblog category is in use.
+     */
+    public boolean isWeblogCategoryInUse(WeblogCategoryData data)
+            throws RollerException;
+    
+    
+    /**
+     * Returns true if ancestor is truly an ancestor of child.
+     */
+    public boolean isDescendentOf(WeblogCategoryData child, 
+            WeblogCategoryData ancestor) throws RollerException;
+    
+    
+    /**
+     * Get the URL of a website.
+     * @param website    The website
+     * @param contextUrl The context url, this is prepended and can be absolute
+     *                   or relative depending on what is desired.
+     * @return The url of the user's weblog
+     */
+    public String getUrl(WebsiteData website, String contextUrl) throws RollerException;
+    
+    /**
+     * Apply comment default settings from website to all of website's entries.
+     */
+    public void applyCommentDefaultsToEntries(WebsiteData website) throws RollerException;
+    
+    /**
+     * Release all resources associated with Roller session.
+     */
+    public void release();
+    
+}

Added: incubator/roller/trunk/src/org/apache/roller/model/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/package.html?rev=398712&view=auto
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/model/package.html (added)
+++ incubator/roller/trunk/src/org/apache/roller/model/package.html Mon May  1 15:23:02 2006
@@ -0,0 +1,29 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  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.  For additional information regarding
+  copyright in this work, please see the NOTICE file in the top level
+  directory of this distribution.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title></title>
+</head>
+<body>
+Interfaces and classes that defne the Roller business layer.
+<p />
+<img src="roller-services.png" alt="diagram of Roller and service managers" />
+
+</body>
+</html>

Added: incubator/roller/trunk/src/org/apache/roller/model/roller-services.png
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/apache/roller/model/roller-services.png?rev=398712&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/src/org/apache/roller/model/roller-services.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream