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 2005/08/08 16:43:03 UTC

svn commit: r230810 [2/6] - in /incubator/roller/branches/roller_2.0: ./ contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/ contrib/plugins/src/org/roller/presentation/velocity/plugins/convertbreaks/ contrib/plugins/src/org/roller/p...

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernatePlanetManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernatePlanetManagerImpl.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernatePlanetManagerImpl.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernatePlanetManagerImpl.java Mon Aug  8 07:41:04 2005
@@ -47,7 +47,7 @@
  */
 public class HibernatePlanetManagerImpl extends PlanetManagerImpl
 {
-    private List topSubscriptions;
+    private static final String NO_GROUP = "zzz_nogroup_zzz"; 
     
     private static Log logger = 
         LogFactory.getFactory().getInstance(HibernatePlanetManagerImpl.class);
@@ -194,20 +194,14 @@
     public synchronized List getAggregation(PlanetGroupData group, int maxEntries) 
         throws RollerException
     {
-        long startTime = System.currentTimeMillis();
         List ret = null;
         try
         {
-            if (group != null) 
-            {
-                ret = (List)aggregationsByGroup.get(group);
-            }
-            else 
-            {
-                ret = aggregation;
-            }
+            String groupHandle = (group == null) ? NO_GROUP : group.getHandle();
+            ret = (List)aggregationsByGroup.get(groupHandle);
             if (ret == null) 
             {
+                long startTime = System.currentTimeMillis();
                 Session session = 
                     ((HibernateStrategy)strategy).getSession();
                 if (group != null)
@@ -241,16 +235,12 @@
                 {
                     retLastUpdated = new Date();
                 }
-                if (group != null)
-                {
-                    aggregationsByGroup.put(group, ret);
-                    lastUpdatedByGroup.put(group, retLastUpdated);
-                }
-                else
-                {
-                    aggregation = ret;
-                    lastUpdated = retLastUpdated;
-                }
+                aggregationsByGroup.put(groupHandle, ret);
+                lastUpdatedByGroup.put(groupHandle, retLastUpdated);
+
+                long endTime = System.currentTimeMillis();
+                logger.info("Generated aggregation in "
+                                    +((endTime-startTime)/1000.0)+" seconds");
             }
         }
         catch (Exception e)
@@ -258,9 +248,6 @@
             logger.error("ERROR: building aggregation for: "+group, e);
             throw new RollerException(e);
         }
-        long endTime = System.currentTimeMillis();
-        logger.info("Generated aggregation in "
-                                    +((endTime-startTime)/1000.0)+" seconds");
         return ret; 
     }
 
@@ -316,7 +303,9 @@
 
     public synchronized List getTopSubscriptions(int max) throws RollerException
     {
-        if (topSubscriptions == null)
+        String groupHandle = NO_GROUP;
+        List ret = (List)topSubscriptionsByGroup.get(groupHandle);
+        if (ret == null)
         {
             try
             {
@@ -325,20 +314,23 @@
                         session.createCriteria(PlanetSubscriptionData.class);
                 criteria.setMaxResults(max);
                 criteria.addOrder(Order.desc("inboundblogs"));
-                topSubscriptions = criteria.list();
+                ret = criteria.list();
             }
             catch (HibernateException e)
             {
                 throw new RollerException(e);
             }
+            topSubscriptionsByGroup.put(groupHandle, ret);
         }
-        return topSubscriptions;
+        return ret;
     }
 
     public synchronized List getTopSubscriptions(
             PlanetGroupData group, int max) throws RollerException
     {
-        if (topSubscriptions == null)
+        String groupHandle = (group == null) ? NO_GROUP : group.getHandle();
+        List ret = (List)topSubscriptionsByGroup.get(groupHandle);
+        if (ret == null)
         {
             try
             {
@@ -351,21 +343,15 @@
                    +"order by sub.inboundblogs desc");
                 query.setString("groupHandle", group.getHandle());
                 query.setMaxResults(max);
-                topSubscriptions = query.list();
+                ret = query.list();
             }
             catch (HibernateException e)
             {
                 throw new RollerException(e);
             }
+            topSubscriptionsByGroup.put(groupHandle, ret);
         }
-        return topSubscriptions;
+        return ret;
     }
-
-    public synchronized void clearCachedAggregations() 
-    {
-        super.clearCachedAggregations();
-        topSubscriptions = null;
-    }
-
 }
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java Mon Aug  8 07:41:04 2005
@@ -108,6 +108,8 @@
             
             String[] ignoreWords = StringUtils.split(
                 StringUtils.deleteWhitespace(website.getIgnoreWords()),",");
+            if (ignoreWords.length == 0) return;
+            
             Junction or = Expression.disjunction();          
             for (int i=0; i<ignoreWords.length; i++) 
             {

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateUserManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateUserManagerImpl.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateUserManagerImpl.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/HibernateUserManagerImpl.java Mon Aug  8 07:41:04 2005
@@ -28,7 +28,7 @@
 import org.roller.model.RollerFactory;
 import org.roller.model.WeblogManager;
 import org.roller.pojos.FolderData;
-import org.roller.pojos.PageData;
+import org.roller.pojos.WeblogTemplate;
 import org.roller.pojos.PermissionsData;
 import org.roller.pojos.RefererData;
 import org.roller.pojos.RoleData;
@@ -117,7 +117,7 @@
     /** 
      * Use Hibernate directly because Roller's Query API does too much allocation.
      */
-    public PageData getPageByLink(WebsiteData website, String pagelink)
+    public WeblogTemplate getPageByLink(WebsiteData website, String pagelink)
         throws RollerException
     {
         if (website == null)
@@ -127,14 +127,14 @@
             throw new RollerException("Pagelink is null");
                                                                       
         Session session = ((HibernateStrategy)mStrategy).getSession();
-        Criteria criteria = session.createCriteria(PageData.class);
+        Criteria criteria = session.createCriteria(WeblogTemplate.class);
         criteria.add(Expression.eq("website",website));
         criteria.add(Expression.eq("link",pagelink));        
         criteria.setMaxResults(1);
         try
         {
             List list = criteria.list();
-            return list.size()!=0 ? (PageData)list.get(0) : null;
+            return list.size()!=0 ? (WeblogTemplate)list.get(0) : null;
         }
         catch (HibernateException e)
         {
@@ -299,7 +299,7 @@
             throw new RollerException("website is null");
                                                                       
         Session session = ((HibernateStrategy)mStrategy).getSession();
-        Criteria criteria = session.createCriteria(PageData.class);
+        Criteria criteria = session.createCriteria(WeblogTemplate.class);
         criteria.add(Expression.eq("website",website)); 
         criteria.addOrder(Order.asc("name"));
         try
@@ -315,7 +315,7 @@
     /** 
      * @see org.roller.model.UserManager#getPageByName(WebsiteData, java.lang.String)
      */
-    public PageData getPageByName(WebsiteData website, String pagename) 
+    public WeblogTemplate getPageByName(WebsiteData website, String pagename) 
         throws RollerException
     {
         if (website == null)
@@ -325,14 +325,14 @@
             throw new RollerException("Page name is null");
                                    
         Session session = ((HibernateStrategy)mStrategy).getSession();
-        Criteria criteria = session.createCriteria(PageData.class);
+        Criteria criteria = session.createCriteria(WeblogTemplate.class);
         criteria.add(Expression.eq("website", website));
         criteria.add(Expression.eq("name", pagename));
         criteria.setMaxResults(1);
         try
         {
             List list = criteria.list();
-            return list.size()!=0 ? (PageData)list.get(0) : null;
+            return list.size()!=0 ? (WeblogTemplate)list.get(0) : null;
         }
         catch (HibernateException e)
         {
@@ -439,12 +439,12 @@
             }
             
             // remove associated pages
-            Criteria pageQuery = session.createCriteria(PageData.class);
+            Criteria pageQuery = session.createCriteria(WeblogTemplate.class);
             pageQuery.add(Expression.eq("website", website));
             List pages = pageQuery.list();
             for (Iterator iter = pages.iterator(); iter.hasNext();) 
             {
-                PageData page = (PageData) iter.next();
+                WeblogTemplate page = (WeblogTemplate) iter.next();
                 page.remove();
             }
             

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/hibernate/package.html Mon Aug  8 07:41:04 2005
@@ -4,6 +4,6 @@
   <title></title>
 </head>
 <body>
-Hibernate implementation of the Roller backend.
+Concrete and Hibernate-based implementaitons of business layer interfaces.
 </body>
 </html>

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/package.html Mon Aug  8 07:41:04 2005
@@ -4,8 +4,24 @@
   <title></title>
 </head>
 <body>
-Abstract implementation of the Roller backend interfaces defined in the
-org.roller.model package. The Roller presentation layer should not use
-any of the org.roller.business.* classes directly.
+Abstract implementation of the business layer interfaces.
+
+<p>At this level we avoid dependance on specific persistence engines 
+(e.g. Hibernate). We do this by using an interface named 
+{@link org.roller.business.PersistenceStrategy PersistenceStrategy} 
+to store, retrieve and remove 
+{@link org.roller.pojos.PersistentObject PersistentObjects}.</p>
+
+<img src="roller-persistence.png" 
+    alt="diagram of Roller persistence object and strategy" />
+
+<p>The diagram below illustrates the dependency relationships between the 
+{@link org.roller.pojos org.roller.pojos}, 
+{@link org.roller.model org.roller.model}, and 
+org.roller.business packages.</p>
+
+<img src="roller-services-impl.png" 
+    alt="diagram of Roller business and persistence layers" />
+
 </body>
 </html>

Propchange: incubator/roller/branches/roller_2.0/src/org/roller/business/roller-persistence.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Propchange: incubator/roller/branches/roller_2.0/src/org/roller/business/roller-services-impl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/AddEntryOperation.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/AddEntryOperation.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/AddEntryOperation.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/AddEntryOperation.java Mon Aug  8 07:41:04 2005
@@ -11,6 +11,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.lucene.index.IndexWriter;
 import org.roller.business.IndexManagerImpl;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
 import org.roller.pojos.WeblogEntryData;
 
 
@@ -49,7 +51,7 @@
     public void doRun()
     {    	
         IndexWriter writer = beginWriting();
-
+        Roller roller = RollerFactory.getRoller();
         try
         {
             if (writer != null)
@@ -63,6 +65,7 @@
         }
         finally
         {
+            if (roller != null) roller.release();
             endWriting();
         }    	
     }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/ReIndexEntryOperation.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/ReIndexEntryOperation.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/ReIndexEntryOperation.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/ReIndexEntryOperation.java Mon Aug  8 07:41:04 2005
@@ -9,12 +9,14 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexReader;
-import org.roller.business.IndexManagerImpl;
-import org.roller.pojos.WeblogEntryData;
+import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.Term;
+import org.roller.business.IndexManagerImpl;
 import org.roller.business.search.FieldConstants;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.WeblogEntryData;
 
 /**
  * @author aim4min
@@ -69,6 +71,7 @@
         }
         
         IndexWriter writer = beginWriting();
+        Roller roller = RollerFactory.getRoller();
         try
         {
             if (writer != null)
@@ -82,6 +85,7 @@
         }
         finally
         {
+            if (roller != null) roller.release();
             endWriting();
         }    	
     }    

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/search/operations/package.html Mon Aug  8 07:41:04 2005
@@ -4,6 +4,6 @@
   <title></title>
 </head>
 <body>
-Weblog search operations using Lucene.<br>
+Lucene-based search operations to be executed by ThreadManager.<br>
 </body>
 </html>

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/search/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/search/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/search/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/search/package.html Mon Aug  8 07:41:04 2005
@@ -4,6 +4,6 @@
   <title></title>
 </head>
 <body>
-Weblog search implementation using Lucene.<br>
+Utilities needed by implementation of search interface.
 </body>
 </html>

Modified: incubator/roller/branches/roller_2.0/src/org/roller/business/utils/UpgradeDatabase.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/business/utils/UpgradeDatabase.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/business/utils/UpgradeDatabase.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/business/utils/UpgradeDatabase.java Mon Aug  8 07:41:04 2005
@@ -10,162 +10,179 @@
 import java.sql.SQLException;
 import java.sql.Statement;
 
+
 /**
- * Upgrade Roller database from 0.9.8 to 1.0.
- * 
- * Creates root Category for each Website and associations for each Category.
- * Sets each Website's default Category and default Blogger.com Category
- * Creates associations for each Folder.
+ * Upgrade Roller Database.
  */
-public class UpgradeDatabase
-{
-    private static Log mLogger = 
-        LogFactory.getFactory().getInstance(UpgradeDatabase.class);
-
-    public static void upgradeDatabase(Connection con) throws RollerException
-    {       
-        // get the db version first
-        try
-        {
-            Statement versionStatement = con.createStatement();
-            ResultSet versionResultSet = 
-              versionStatement.executeQuery("select dbversion from rollerconfig");
-            versionResultSet.next();
-            String dbversion = versionResultSet.getString(1);
-            if (dbversion != null) return;
+public class UpgradeDatabase {
+    
+    private static Log mLogger =
+            LogFactory.getFactory().getInstance(UpgradeDatabase.class);
+    
+    // the name of the property which holds the dbversion value
+    private static final String DBVERSION_PROP = "roller.database.version";
+    
+    // old version ... does nothing
+    public static void upgradeDatabase(Connection con) throws RollerException {}
+    
+    
+    /**
+     * Upgrade database if dbVersion is older than desiredVersion.
+     */
+    public static void upgradeDatabase(Connection con, String desiredVersion) 
+        throws RollerException {
+        
+        int myVersion = 0;
+        int dbversion = -1;
+        
+        // NOTE: this assumes a maximum of 3 digits for the version number
+        //       so if we get to 10.0 then we'll need to upgrade this
+        
+        // strip out non-digits
+        desiredVersion = desiredVersion.replaceAll("\\Q.\\E", "");
+        desiredVersion = desiredVersion.replaceAll("\\D", "");
+        if(desiredVersion.length() > 3)
+            desiredVersion = desiredVersion.substring(0, 3);
+        
+        // parse to an int
+        try {
+            int parsed = Integer.parseInt(desiredVersion);
+            
+            if(parsed < 100)
+                myVersion = parsed * 10;
+            else
+                myVersion = parsed;
+        } catch(Exception e) {}
+        
+        
+        // get the current db version
+        try {
+            Statement stmt = con.createStatement();
+            
+            // just check in the roller_properties table
+            ResultSet rs = stmt.executeQuery(
+                    "select value from roller_properties where name = '"+DBVERSION_PROP+"'");
+            
+            if(rs.next()) {
+                dbversion = rs.getInt(1);
+                
+            } else {
+                // tough to know if this is an upgrade with no db version :/
+                // however, if roller_properties is not empty then we at least
+                // we have someone upgrading from 1.2.x
+                rs = stmt.executeQuery("select count(*) from roller_properties");
+                if(rs.next()) {
+                    if(rs.getInt(1) > 0)
+                        dbversion = 120;
+                }
+            }
             
         } catch(Exception e) {
-            // assume this is a new db using the roller_properties table
+            // that's strange ... hopefully we didn't need to upgrade
+            mLogger.error("Couldn't lookup current database version", e);
             return;
         }
         
+        mLogger.debug("Database version = "+dbversion);
+        mLogger.debug("Desired version = "+myVersion);
+            
+        if(dbversion < 0) {
+            mLogger.info("New installation found, setting db version to "+myVersion);
+            UpgradeDatabase.setDatabaseVersion(con, myVersion);
+            return;
+        } else if(dbversion >= myVersion) {
+            mLogger.info("Database is current, no upgrade needed");
+            return;
+        }
         
-        try
-        {   
-            // Prepated statements for all queries in the loop
-            
-            PreparedStatement rootCatStatement = con.prepareStatement(
-               "select a.id from weblogcategoryassoc as a, weblogcategory as c "+
-               "where c.websiteid=? and a.categoryid=c.id and a.ancestorid is null and a.relation='PARENT'");                        
-            
-            PreparedStatement rootCatCreateStatement = con.prepareStatement(
-               "insert into weblogcategory (id,name,description,websiteid,image) "+
-               "values (?,'root','root',?,NULL)");                        
-            
-            PreparedStatement updateWebsiteStatement = con.prepareStatement(
-               "update website set bloggercatid=?, defaultcatid=? where id=?");                        
-            
-            PreparedStatement catsStatement = con.prepareStatement(
-               "select id from weblogcategory where websiteid=? and id<>?");                        
-            
-            PreparedStatement assocCreateStatement = con.prepareStatement(
-               "insert into weblogcategoryassoc (id,categoryid,ancestorid,relation) "+
-               "values (?,?,?,'PARENT')");                        
-
-            PreparedStatement rootFolderStatement = con.prepareStatement(
-                "select id from folder where websiteid=? and parentid is null");                        
-      
-            PreparedStatement foldersStatement = con.prepareStatement(
-                "select id,parentid from folder where websiteid=?");                        
-      
-            PreparedStatement folderAssocCreateStatement = con.prepareStatement(
-                "insert into folderassoc (id,folderid,ancestorid,relation) "+
-                "values (?,?,?,'PARENT')");                        
+        mLogger.info("Database is old, beginning upgrade to version "+myVersion);
+        
+        // iterate through each upgrade as needed
+        // to add to the upgrade sequence simply add a new "else if" statement
+        // for whatever version needed and then define a new method upgradeXXX()
+        if(dbversion < 130)
+            UpgradeDatabase.upgradeTo130(con);
+        
+        // make sure the database version is the exact version
+        // we are upgrading too.
+        UpgradeDatabase.updateDatabaseVersion(con, myVersion);
+    }
+    
+    
+    /**
+     * Upgrade database for Roller 1.3.0
+     */
+    private static void upgradeTo130(Connection con) throws RollerException {
+        try {
+            /*
+             * The new theme management code is going into place and it uses
+             * the old website.themeEditor attribute to store a users theme.
+             *
+             * In pre-1.3 Roller *all* websites are considered to be using a
+             * custom theme, so we need to make sure this is properly defined
+             * by setting the theme on all websites to custom.
+             *
+             * NOTE: If we don't do this then nothing would break, but some users
+             * would be suprised that their template customizations are no longer
+             * in effect because they are using a shared theme instead.
+             */
+            
+            mLogger.info("Doing upgrade to 130 ...");
+            mLogger.info("Ensuring that all website themes are set to custom");
+            
+            PreparedStatement setCustomThemeStmt = con.prepareStatement(
+                    "update website set editortheme = ?");
+            
+            setCustomThemeStmt.setString(1, org.roller.pojos.Theme.CUSTOM);
+            setCustomThemeStmt.executeUpdate();
+            
+            mLogger.info("Upgrade to 130 complete.");
+        } catch (SQLException e) {
+            mLogger.error("Problem upgrading database to version 130", e);
+            throw new RollerException("Problem upgrading database to version 130", e);
+        }
+        
+        // If someone is upgrading to 1.3.x then we are setting the db version
+        // for the first time.  Normally we would just updateDatabaseVersion()
+        UpgradeDatabase.setDatabaseVersion(con, 130);
+    }
 
-            // loop through all websites
-            Statement websitesStatement = con.createStatement();
-            ResultSet websitesResultSet = 
-                websitesStatement.executeQuery("select id from website");
-            while (websitesResultSet.next()) 
-            {
-                String websiteId = websitesResultSet.getString(1);
-                mLogger.info("Upgrading website id="+websiteId);
-                
-                rootCatStatement.clearParameters();
-                rootCatStatement.setString(1, websiteId);
-                ResultSet rootCatResultSet = rootCatStatement.executeQuery();
-                
-                
-                if (!rootCatResultSet.first()) // if website has no root cat
-                {
-                    // then create one
-                    rootCatCreateStatement.clearParameters();
-                    rootCatCreateStatement.setString(1, websiteId+"R");
-                    rootCatCreateStatement.setString(2, websiteId);
-                    rootCatCreateStatement.executeUpdate();
-                    
-                    // and make it the default one for the website
-                    updateWebsiteStatement.clearParameters();
-                    updateWebsiteStatement.setString(1, websiteId+"R");
-                    updateWebsiteStatement.setString(2, websiteId+"R");
-                    updateWebsiteStatement.setString(3, websiteId);
-                    updateWebsiteStatement.executeUpdate();
-                    
-                    // and create an association for it
-                    assocCreateStatement.clearParameters();
-                    assocCreateStatement.setString(1, websiteId+"A0");
-                    assocCreateStatement.setString(2, websiteId+"R");
-                    assocCreateStatement.setString(3, null);
-                    assocCreateStatement.executeUpdate();
 
-                    // and create associations for all of it's children
-                    catsStatement.clearParameters();
-                    catsStatement.setString(1, websiteId);
-                    catsStatement.setString(2, websiteId+"R");
-                    ResultSet cats = catsStatement.executeQuery();
-                    int count = 1;
-                    while (cats.next())
-                    {
-                        String catid = cats.getString(1);
-                        assocCreateStatement.clearParameters();
-                        assocCreateStatement.setString(1, websiteId+"A"+count++);
-                        assocCreateStatement.setString(2, catid);
-                        assocCreateStatement.setString(3, websiteId+"R");
-                        assocCreateStatement.executeUpdate();
-                    }
-                    mLogger.debug("   Created root categories and associations");
-                    
-                    // determine root bookmark folder of website
-                    rootFolderStatement.clearParameters();
-                    rootFolderStatement.setString(1, websiteId);
-                    ResultSet rootFolderResultSet = rootFolderStatement.executeQuery();
-                    rootFolderResultSet.next();
-                    String rootFolderId = rootFolderResultSet.getString(1);
-                    
-                    // create associations for all children fo root folder
-                    foldersStatement.clearParameters();
-                    foldersStatement.setString(1, websiteId);
-                    ResultSet folders = foldersStatement.executeQuery();
-                    while (folders.next())
-                    {
-                        String id = folders.getString(1);
-                        String parentId = folders.getString(2);
-                        folderAssocCreateStatement.clearParameters();
-                        folderAssocCreateStatement.setString(1, id+"R");
-                        folderAssocCreateStatement.setString(2, id);
-                        if (parentId == null)
-                        {
-                            folderAssocCreateStatement.setString(3, null);
-                        }
-                        else
-                        {
-                            folderAssocCreateStatement.setString(3, rootFolderId);
-                        }
-                        folderAssocCreateStatement.executeUpdate();
-                    }
-                    mLogger.debug("   Created folder associations");
-                }
-            }
-            
-            Statement versionUpdateStatement = con.createStatement();
-            versionUpdateStatement.executeUpdate(
-                "update rollerconfig set dbversion='995'");
-            mLogger.info("Database upgrade complete.");
+    /**
+     * Insert a new database.version property.
+     *
+     * This should only be called once for new installations
+     */
+    private static void setDatabaseVersion(Connection con, int version) 
+        throws RollerException {
+        
+        try {
+            Statement stmt = con.createStatement();
+            stmt.executeUpdate("insert into roller_properties "+
+                    "values('"+DBVERSION_PROP+"', '"+version+"')");
+            
+            mLogger.debug("Set database verstion to "+version);
+        } catch(SQLException se) {
+            throw new RollerException("Error setting database version.", se);
         }
-        catch (SQLException e)
-        {
-            mLogger.error("ERROR in database upgrade",e);
-            throw new RollerException("ERROR in database upgrade",e);
+    }
+    
+    
+    /**
+     * Update the existing database.version property
+     */
+    private static void updateDatabaseVersion(Connection con, int version) 
+        throws RollerException {
+        
+        try {
+            Statement stmt = con.createStatement();
+            stmt.executeUpdate("update roller_properties "+
+                    "set value = '"+version+"'"+
+                    "where name = '"+DBVERSION_PROP+"'");
+            
+            mLogger.debug("Updated database verstion to "+version);
+        } catch(SQLException se) {
+            throw new RollerException("Error setting database version.", se);
         }
     }
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/config/RollerConfig.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/config/RollerConfig.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/config/RollerConfig.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/config/RollerConfig.java Mon Aug  8 07:41:04 2005
@@ -156,4 +156,19 @@
             mConfig.setProperty("uploads.dir", path);
     }
     
+    
+    /**
+     * Set the "context.realpath" property at runtime.
+     *
+     * Properties are meant to be read-only, but we make this one exception
+     * for now because there are some classes which rely on having filesystem
+     * access to files in the roller webapp context.
+     *
+     * This property is *not* persisted in any way.
+     */
+    public static void setContextPath(String path) {
+        
+        mConfig.setProperty("context.realpath", path);
+    }
+    
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/AutoPingManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/AutoPingManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/AutoPingManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/AutoPingManager.java Mon Aug  8 07:41:04 2005
@@ -18,21 +18,23 @@
 import java.util.Collection;
 import java.util.List;
 
+/**
+ * Manages autoping storage/retrieval, queries and queue.
+ */
 public interface AutoPingManager extends Serializable
 {
     /**
-     * Release all resources.
+     * Release all resources associated with Roller session.
      */
     public void release();
 
     /**
      * Create an auto ping configuration specifying that the given ping target is to be pinged when the given website
      * changes.
-     *
      * @param pingTarget target to ping
-     * @param website    website whose changes should trigger the ping
+     * @param website website whose changes should trigger the ping
      * @return new auto ping configuration
-     * @throws RollerException
+     * @throws RollerException 
      */
     public AutoPingData createAutoPing(PingTargetData pingTarget, WebsiteData website)
         throws RollerException;

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/BookmarkManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/BookmarkManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/BookmarkManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/BookmarkManager.java Mon Aug  8 07:41:04 2005
@@ -94,6 +94,9 @@
 	public void moveFolderContents(FolderData src, FolderData dest) 
 		throws RollerException;
 
+    /**
+     * Delete contents of specified folder.
+     */
     public void deleteFolderContents(FolderData src) throws RollerException;
     
     //---------------------------------------------------------------- Queries 
@@ -173,8 +176,14 @@
      */
     public List getFolderAncestorAssocs(FolderData data) throws RollerException;
 
+    /**
+     * Release all resources associated with Roller session.
+     */
     public void release();
 
+    /**
+     * Determines if folder is descendent of folder.
+     */
     public boolean isDescendentOf(FolderData data, FolderData ancestor) throws RollerException;
 }
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/ConfigManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/ConfigManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/ConfigManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/ConfigManager.java Mon Aug  8 07:41:04 2005
@@ -1,2 +1,17 @@
 /*
- * Created on Feb 4, 2004
 */
package org.roller.model;

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

/**
 * @author lance.lavandowska
 */
public interface ConfigManager extends Serializable 
{
    /** Release any resources used */
    public void release();

    public void storeRollerConfig( RollerConfigData data ) throws RollerException;
    
    public RollerConfigData getRollerConfig() throws RollerException;
    
    public RollerConfigData readFromFile(String filePath) throws RollerException;
}
+ * Created on Feb 4, 2004
 */
package org.roller.model;

import org.roller.RollerException;
import org.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;
}

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/FileManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/FileManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/FileManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/FileManager.java Mon Aug  8 07:41:04 2005
@@ -37,8 +37,17 @@
     public void saveFile(WebsiteData site, String name, long size, InputStream is) 
         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();
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/IndexManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/IndexManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/IndexManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/IndexManager.java Mon Aug  8 07:41:04 2005
@@ -30,7 +30,9 @@
     /** Execute operation immediately */
     public abstract void executeIndexOperationNow(final IndexOperation op);
     
-    /** Release to be called at end of request processing */
+    /**
+     * Release all resources associated with Roller session.
+     */
     public abstract void release();
     
     /** Shutdown to be called on application shutdown */

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/PingQueueManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/PingQueueManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/PingQueueManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/PingQueueManager.java Mon Aug  8 07:41:04 2005
@@ -25,7 +25,7 @@
 public interface PingQueueManager extends Serializable
 {
     /**
-     * Release resources.
+     * Release all resources associated with Roller session.
      */
     public void release();
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/PingTargetManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/PingTargetManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/PingTargetManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/PingTargetManager.java Mon Aug  8 07:41:04 2005
@@ -15,10 +15,13 @@
 import java.io.Serializable;
 import java.util.List;
 
+/**
+ * Manages ping targets.
+ */
 public interface PingTargetManager extends Serializable
 {
     /**
-     * Release all resources used.
+     * Release all resources associated with Roller session.
      */
     public void release();
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/PropertiesManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/PropertiesManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/PropertiesManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/PropertiesManager.java Mon Aug  8 07:41:04 2005
@@ -18,7 +18,9 @@
 public interface PropertiesManager extends Serializable 
 {
     
-    /** Release any resources used */
+    /**
+     * Release all resources associated with Roller session.
+     */
     public void release();
 
     /** Save a single property */

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/RefererManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/RefererManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/RefererManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/RefererManager.java Mon Aug  8 07:41:04 2005
@@ -105,19 +105,34 @@
 
     //---------------------------------------------- Referer tracking turnover
 
+    /**
+     * Force refer of referer hit counts and deletes all referers that do nto have excerpts.
+     */
     public void forceTurnover(String websiteId) throws RollerException;
 
+    /**
+     * Check to see if it's time for turnover.
+     */
     public void checkForTurnover(boolean forceTurnover, String websiteId)
             throws RollerException;
 
     //----------------------------------------------- Standard manager methods
 
+    /**
+     * Retrieve referer specifie by ID.
+     */
     public RefererData retrieveReferer(String id)
         throws RollerException;
 
+    /**
+     * Remove referer specified by ID.
+     */
     public void removeReferer( String id )
         throws RollerException;
 
+    /**
+     * Release all resources associated with Roller session.
+     */
     public void release();
 }
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/Roller.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/Roller.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/Roller.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/Roller.java Mon Aug  8 07:41:04 2005
@@ -86,16 +86,29 @@
     public IndexManager getIndexManager() throws RollerException;
     
     /**
-     * Get PlanetManager associated with the Roller instance.
+     * Get PlanetManager associated with this Roller instance.
      */
     public PlanetManager getPlanetManager() throws RollerException;
 
-        
+    /**
+     * Get ThemeManager associated with this Roller instance.
+     */
+    public ThemeManager getThemeManager() throws RollerException;
+    
     /** Begin transaction for a thread.
      */ 
     public void begin() throws RollerException;
+    /**
+     * Start Roller session on behalf of specified user.
+     */
     public void begin(UserData user) throws RollerException;
+    /**
+     * Set user for Roller session.
+     */
     public void setUser(UserData user) throws RollerException;
+    /**
+     * Get user associated with Roller session.
+     */
     public UserData getUser() throws RollerException;
     
     /** Commit transaction for a thread.
@@ -107,7 +120,8 @@
      */ 
     public void rollback();
     
-    /** Rollback and release associated resources for a thread.
+    /**
+     * Release all resources associated with Roller session.
      */ 
     public void release();
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/RollerFactory.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/RollerFactory.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/RollerFactory.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/RollerFactory.java Mon Aug  8 07:41:04 2005
@@ -123,6 +123,9 @@
     }
     
 	
+	/**
+	 * Set Roller to be returned by factory.
+	 */
 	public static void setRoller(Roller roller)
 	{
 		if (roller != null) rollerInstance = roller;

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/ScheduledTask.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/ScheduledTask.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/ScheduledTask.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/ScheduledTask.java Mon Aug  8 07:41:04 2005
@@ -8,5 +8,8 @@
  */
 public interface ScheduledTask
 {
+    /**
+     * Initialized scheduled task with Roller instance and real-path to Roller context.
+     */
     public void init(Roller roller, String realPath) throws RollerException;
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/ThreadManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/ThreadManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/ThreadManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/ThreadManager.java Mon Aug  8 07:41:04 2005
@@ -4,25 +4,48 @@
 import java.sql.Date;
 
 /**
- * Index to thread management for executing scheduled and asynchronous tasks.
+ * 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();
 }

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/UserManager.java Mon Aug  8 07:41:04 2005
@@ -6,7 +6,7 @@
 import java.util.Map;
 
 import org.roller.RollerException;
-import org.roller.pojos.PageData;
+import org.roller.pojos.WeblogTemplate;
 import org.roller.pojos.PermissionsData;
 import org.roller.pojos.RoleData;
 import org.roller.pojos.UserData;
@@ -159,11 +159,26 @@
             String timeZone) throws RollerException;
 
     public UserData retrieveUser(String id)throws RollerException;
+    /**
+     * Store user.
+     */
     public void storeUser( UserData data ) throws RollerException;
 
+    /**
+     * Get all user roles.
+     */
     public List getUserRoles(UserData user) throws RollerException;
+    /**
+     * Get role by ID
+     */
     public RoleData retrieveRole(String id) throws RollerException;
+    /**
+     * Store role.
+     */
     public void storeRole( RoleData data ) throws RollerException;
+    /**
+     * Remove role by ID.
+     */
     public void removeRole( String id ) throws RollerException;
 
     //------------------------------------------------------------ WebsiteData
@@ -183,24 +198,36 @@
         throws RollerException;
 
     public WebsiteData retrieveWebsite(String id) throws RollerException;
+    /**
+     * Store website
+     */
     public void storeWebsite(WebsiteData data) throws RollerException;
 
-    //--------------------------------------------------------------- PageData
+    //--------------------------------------------------------------- WeblogTemplate
     
     /** Get user's page by name */
-    public PageData getPageByName(WebsiteData w, String p) throws RollerException;
+    public WeblogTemplate getPageByName(WebsiteData w, String p) throws RollerException;
 
     /** Get user's page by link */
-    public PageData getPageByLink(WebsiteData w, String p) throws RollerException;
+    public WeblogTemplate getPageByLink(WebsiteData w, String p) throws RollerException;
 
     /** Fix page link using page name */
-    public String fixPageLink(PageData data) throws RollerException;
+    public String fixPageLink(WeblogTemplate data) throws RollerException;
 
     /** Get users pages */
     public List getPages(WebsiteData w) throws RollerException;
 
-    public PageData retrievePage(String id) throws RollerException;
-    public void storePage(PageData data) throws RollerException;
+    /**
+     * Get page by ID
+     */
+    public WeblogTemplate retrievePage(String id) throws RollerException;
+    /**
+     * Store page
+     */
+    public void storePage(WeblogTemplate data) throws RollerException;
+    /**
+     * Remove page by ID
+     */
     public void removePage(String id) throws RollerException;
 
 
@@ -218,7 +245,7 @@
 	/**
 	 * Retrieve the Page in read-only mode (does hibernate support this?).
 	 */
-	public PageData retrievePageReadOnly(String id) throws RollerException;
+	public WeblogTemplate retrievePageReadOnly(String id) throws RollerException;
     
     /**
      * Validates a user based on a cookie value.  If successful, it returns

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/WeblogManager.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/WeblogManager.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/WeblogManager.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/WeblogManager.java Mon Aug  8 07:41:04 2005
@@ -22,6 +22,9 @@
 {
     public static final String CATEGORY_ATT = "category.att";
     
+    /**
+     * Release all resources associated with Roller session.
+     */
     public void release();
 
     //------------------------------------------------ WeblogCategoryData CRUD
@@ -37,9 +40,18 @@
         String description,
         String image) throws RollerException;
 
+    /**
+     * Get category by ID
+     */
     public WeblogCategoryData retrieveWeblogCategory(String id)
         throws RollerException;
 
+    /**
+     * Recategorize all entries with one category to another.
+     * @param srcId 
+     * @param destId 
+     * @throws org.roller.RollerException 
+     */
     public void moveWeblogCategoryContents(String srcId, String destId)
         throws RollerException;
 
@@ -98,37 +110,76 @@
         WeblogCategoryData ancestor,
         String relation) throws RollerException;
 
+    /**
+     * Get category assoc. by ID
+     */
     public WeblogCategoryAssoc retrieveWeblogCategoryAssoc(String id)
         throws RollerException;
 
     //------------------------------------------------------- CommentData CRUD
 
+    /**
+     * Get comment by ID
+     */
     public CommentData retrieveComment(String id)
         throws RollerException;
 
+    /**
+     * Get comments by entry ID
+     * @param entryId 
+     * @throws org.roller.RollerException 
+     * @return 
+     */
     public abstract List getComments( String entryId )
         throws RollerException;
 
+    /**
+     * Get comments by entry ID, optionally excluding spam
+     * @param entryId 
+     * @param nospam 
+     * @throws org.roller.RollerException 
+     * @return 
+     */
     public abstract List getComments( String entryId, boolean nospam )
         throws RollerException;
 
+    /**
+     * Remove comment by ID
+     */
     public void removeComment( String id )
         throws RollerException;
 
+    /**
+     * Remove comments specified by array of IDs
+     * @param ids 
+     * @throws org.roller.RollerException 
+     */
     public void removeComments( String[] ids )
         throws RollerException;
 
+    /**
+     * Remove all comments of entry specified by ID
+     */
     public void removeCommentsForEntry(String entryId)
     	throws RollerException;
     
+    /**
+     * Get most recent X comments in website.
+     */
     public List getRecentComments(WebsiteData website, int maxCount) 
         throws RollerException;
 
     //------------------------------------------------------- WeblogEntry CRUD
 
+    /**
+     * Get weblog entry by ID
+     */
     public WeblogEntryData retrieveWeblogEntry(String id)
         throws RollerException;
 
+    /**
+     * Remove weblog entry by ID
+     */
     public void removeWeblogEntry( String id )
         throws RollerException;
 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/model/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/model/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/model/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/model/package.html Mon Aug  8 07:41:04 2005
@@ -4,22 +4,9 @@
   <title></title>
 </head>
 <body>
-
-<p>This package defines the Roller Business Tier interfaces.</p>
-
-<p>This package depends on only these packages:</p>
-<ul>
-<li>org.roller.pojos.*</li>
-<li>com.swabunga.spell.*</li>
-<li>org.apache.commons.logging.*</li>
-</ul>
-
-<p>These packages depend on this package:</p>
-<ul>
-<li>org.roller.presentation.*</li>
-<li>org.roller.business.*</li>
-<li>org.roller.pojos.*</li>
-</ul>
+Interfaces and classes that defne the Roller business layer.
+<p />
+<img src="roller-services.png" alt="diagram of Roller and service managers" />
 
 </body>
 </html>

Propchange: incubator/roller/branches/roller_2.0/src/org/roller/model/roller-services.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: incubator/roller/branches/roller_2.0/src/org/roller/package.html
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/package.html?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/package.html (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/package.html Mon Aug  8 07:41:04 2005
@@ -4,29 +4,7 @@
   <title></title>
 </head>
 <body>
-<p>Roller is split into a number of top level packages and these packages can 
-be grouped as follows:</p>
-
-<b>Business Layer</b>
-<ul>
-<li>org.roller.model - Interfaces that define various Roller manager classes.</li>
-<li>org.roller.pojos - Domain objects and other persistent objects.</li>
-<li>org.roller.business - Impementations of the Roller org.roller.model interfaces.</li>
-</ul>
-
-<b>Presentation Layer</b>
-<ul>
-<li>org.roller.presentation - Roller's Web UI and Web Services implementations.</li>
-</ul>
-
-
-<b>Other...</b>
-<ul>
-<li>org.roller.util - General purpose utility classes, mostly independent of Roller.</li>
-<li>org.roller.persistence - Persistence abstraction allows Roller to use either 
-Castor or Hibernate.</li>
-<li></li>
-</ul>
+Exceptions thrown by Roller business layer.
 
 </body>
 </html>

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/BookmarkData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/BookmarkData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/BookmarkData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/BookmarkData.java Mon Aug  8 07:41:04 2005
@@ -74,6 +74,8 @@
     //------------------------------------------------------------- Attributes
     
     /** 
+     * @roller.wrapPojoMethod type="simple"
+     *
      * @ejb:persistent-field 
      * 
      * @hibernate.id column="id" type="string"
@@ -93,6 +95,8 @@
     /** 
      * Name of bookmark.
      * 
+     * @roller.wrapPojoMethod type="simple"
+     *
      * @struts.validator type="required" msgkey="errors.required"
      * @struts.validator-args arg0resource="bookmarkForm.name"
      * 
@@ -113,6 +117,8 @@
 
     /** 
      * Description of bookmark.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @ejb:persistent-field 
      * 
@@ -131,6 +137,8 @@
 
     /** 
      * URL of bookmark.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @ejb:persistent-field 
      * 
@@ -149,6 +157,8 @@
 
     /** 
      * Weight indicates prominence of link
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @struts.validator type="required" msgkey="errors.required"
      * @struts.validator type="integer" msgkey="errors.integer"
@@ -171,6 +181,8 @@
 
     /** 
      * Priority determines order of display 
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @struts.validator type="required" msgkey="errors.required"
      * @struts.validator type="integer" msgkey="errors.integer"
@@ -193,6 +205,8 @@
 
     /** 
      * @ejb:persistent-field 
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @hibernate.property column="image" non-null="true" unique="false"
      */
@@ -209,6 +223,8 @@
 
     /** 
      * @ejb:persistent-field 
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @hibernate.property column="feedurl" non-null="true" unique="false"
      */
@@ -226,6 +242,7 @@
     //---------------------------------------------------------- Relationships
     
     /** 
+     * @roller.wrapPojoMethod type="pojo"
      * @ejb:persistent-field 
      * @hibernate.many-to-one column="folderid" cascade="none" not-null="true"
      */

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/CommentData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/CommentData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/CommentData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/CommentData.java Mon Aug  8 07:41:04 2005
@@ -65,6 +65,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.id column="id" type="string"
      *  generator-class="uuid.hex" unsaved-value="null"
@@ -81,6 +82,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="pojo"
      * @ejb:persistent-field 
      * @hibernate.many-to-one column="entryid" cascade="none" not-null="true"
      */
@@ -96,6 +98,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="name" non-null="true" unique="false"
      */
@@ -112,6 +115,8 @@
 
     /** 
      * Email
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="email" non-null="true" unique="false"
      */
@@ -127,6 +132,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="url" non-null="true" unique="false"
      */
@@ -142,6 +148,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="content" non-null="true" unique="false"
      */
@@ -157,6 +164,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="posttime" non-null="true" unique="false"
      */
@@ -172,6 +180,7 @@
     }
 
     /**
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field
      * @hibernate.property column="spam" non-null="false" unique="false"
      */
@@ -187,6 +196,7 @@
     }
 
     /**
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field
      * @hibernate.property column="notify" non-null="false" unique="false"
      */
@@ -209,6 +219,7 @@
     }
 	
 	/**
+         * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="remotehost" non-null="true" unique="false"
 	 */

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/EntryAttributeData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/EntryAttributeData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/EntryAttributeData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/EntryAttributeData.java Mon Aug  8 07:41:04 2005
@@ -36,6 +36,7 @@
     }
 
     /**
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.id column="id" type="string" 
      *    generator-class="uuid.hex" unsaved-value="null"
@@ -51,7 +52,7 @@
     }
 
     /**
-    	* Setter is needed in RollerImpl.storePersistentObject()
+     * Setter is needed in RollerImpl.storePersistentObject()
      */
     public void setData(org.roller.pojos.PersistentObject otherData)
     {
@@ -62,6 +63,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="pojo"
      * @ejb:persistent-field 
      * @hibernate.many-to-one column="entryid" cascade="none" not-null="true"
      */
@@ -76,6 +78,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="name" non-null="true" unique="false"
      */
@@ -90,6 +93,7 @@
     }
     
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="value" non-null="true" unique="false"
      */

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/FolderData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/FolderData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/FolderData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/FolderData.java Mon Aug  8 07:41:04 2005
@@ -88,6 +88,8 @@
 
     /** 
      * @see org.roller.pojos.HierarchicalPersistentObject#getObjectPropertyName()
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public String getObjectPropertyName()
     {
@@ -96,12 +98,17 @@
 
     /** 
      * @see org.roller.pojos.HierarchicalPersistentObject#getAncestorPropertyName()
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public String getAncestorPropertyName()
     {
         return "ancestorFolder";
     }
 
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public boolean isInUse()
     {
         try
@@ -114,6 +121,9 @@
         }
     }
     
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public boolean descendentOf(FolderData ancestor) 
         throws RollerException
     {
@@ -123,6 +133,8 @@
     //------------------------------------------------------------- Attributes
     
     /** 
+     * @roller.wrapPojoMethod type="simple"
+     * 
      * @ejb:persistent-field 
      * 
      * @hibernate.id column="id" type="string"
@@ -140,6 +152,8 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
+     *
      * @struts.validator type="required" msgkey="errors.required"
      * @struts.validator type="mask" msgkey="errors.noslashes"
      * @struts.validator-var name="mask" value="${noslashes}"
@@ -162,6 +176,8 @@
 
     /** 
      * Description
+     *
+     * @roller.wrapPojoMethod type="simple"
      * 
      * @ejb:persistent-field 
      * 
@@ -180,7 +196,11 @@
 
     //---------------------------------------------------------- Relationships
     
-    /** Get path to this bookmark folder. */
+    /**
+     * Get path to this bookmark folder.
+     *
+     * @roller.wrapPojoMethod type="simple"
+     */
     public String getPath() throws RollerException
     {
         if (mNewParent != null) 
@@ -197,6 +217,8 @@
     }
         
     /** 
+     * @roller.wrapPojoMethod type="pojo"
+     *
      * @ejb:persistent-field 
      * 
      * @hibernate.many-to-one column="websiteid" cascade="none" not-null="true"
@@ -212,7 +234,11 @@
         this.website = website;
     }
 
-    /** Return parent category, or null if category is root of hierarchy. */
+    /**
+     * Return parent category, or null if category is root of hierarchy.
+     *
+     * @roller.wrapPojoMethod type="pojo"
+     */
     public FolderData getParent() throws RollerException
     {
         if (mNewParent != null)
@@ -237,7 +263,11 @@
         mNewParent = parent;
     }
 
-    /** Query to get child categories of this category. */
+    /**
+     * Query to get child categories of this category.
+     *
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.roller.pojos.FolderData"
+     */
     public List getFolders() throws RollerException
     {
         if (folders == null)
@@ -258,7 +288,9 @@
     //------------------------------------------------------ Bookmark children
     
     /** 
-      * @ejb:persistent-field
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.roller.pojos.BookmarkData"
+     *
+     * @ejb:persistent-field
      * 
      * @hibernate.set lazy="true" order-by="name" inverse="true" cascade="delete" 
      * @hibernate.collection-key column="folderid" 
@@ -291,6 +323,8 @@
     }
 
     /**
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.roller.pojos.BookmarkData"
+     *
      * @param subfolders
      */
     public List retrieveBookmarks(boolean subfolders) throws RollerException

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/PersistentObject.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/PersistentObject.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/PersistentObject.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/PersistentObject.java Mon Aug  8 07:41:04 2005
@@ -44,9 +44,19 @@
             RollerFactory.getRoller().getPersistenceStrategy();
         pstrategy.remove(this);
     }
-    public String toString() {
-        return ToStringBuilder.reflectionToString(this,
-                ToStringStyle.MULTI_LINE_STYLE);
+    public String toString() 
+    {
+        try 
+        {
+            // this may throw an exception if called by a thread that
+            return ToStringBuilder.reflectionToString(
+                this, ToStringStyle.MULTI_LINE_STYLE);
+        }
+        catch (Throwable e)
+        {
+            // alternative toString() implementation used in case of exception
+            return getClass().getName() + ":" + getId();
+        }
     }
     public boolean equals(Object o) {
         return EqualsBuilder.reflectionEquals(this, o);

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/RefererData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/RefererData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/RefererData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/RefererData.java Mon Aug  8 07:41:04 2005
@@ -83,6 +83,8 @@
 
     /** 
      * Unique ID and primary key of this Referer.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.id column="id" type="string"
      *  generator-class="uuid.hex" unsaved-value="null"
      */
@@ -98,6 +100,8 @@
 
     /** 
      * ID of website that this referer refers to.
+     *
+     * @roller.wrapPojoMethod type="pojo"
      * @hibernate.many-to-one column="websiteid" cascade="none" not-null="true"
      */
     public org.roller.pojos.WebsiteData getWebsite()
@@ -111,6 +115,7 @@
     }
 
     /**
+     * @roller.wrapPojoMethod type="pojo"
      * @hibernate.many-to-one column="entryid" cascade="none"
      */
     public org.roller.pojos.WeblogEntryData getWeblogEntry()
@@ -128,6 +133,8 @@
 
     /** 
      * Date string in YYYYMMDD format.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="datestr" non-null="true" unique="false"
      */
     public java.lang.String getDateString()
@@ -142,6 +149,8 @@
 
     /** 
      * URL of the refering page.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="refurl" non-null="true" unique="false"
      */
     public java.lang.String getRefererUrl()
@@ -156,6 +165,8 @@
 
     /** 
      * Requested URL, the URL linked to by the refering page.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="refpermalink" non-null="true" unique="false"
      */
     public java.lang.String getRefererPermalink()
@@ -170,6 +181,8 @@
 
     /** 
      * Requested URL, the URL linked to by the refering page.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="requrl" non-null="true" unique="false"
      */
     public java.lang.String getRequestUrl()
@@ -183,7 +196,9 @@
     }
 
     /** 
-     * The text on the refering page that surrounds the refering link.  
+     * The text on the refering page that surrounds the refering link. 
+     *
+     * @roller.wrapPojoMethod type="simple" 
      * @hibernate.property column="title" non-null="true" unique="false"
      */
     public java.lang.String getTitle()
@@ -198,6 +213,8 @@
 
     /** 
      * The text on the refering page that surrounds the refering link.  
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="excerpt" non-null="true" unique="false"
      */
     public java.lang.String getExcerpt()
@@ -212,6 +229,8 @@
 
     /** 
      * Should this referer be displayed?
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="visible" non-null="true" unique="false"
      */
     public java.lang.Boolean getVisible()
@@ -226,6 +245,8 @@
 
     /** 
      * Is this referer a duplicate?
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="duplicate" non-null="true" unique="false"
      */
     public java.lang.Boolean getDuplicate()
@@ -240,6 +261,8 @@
 
     /** 
      * Hits received today from this referer.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="dayhits" non-null="true" unique="false"
      */
     public java.lang.Integer getDayHits()
@@ -254,6 +277,8 @@
 
     /** 
      * Total hits received from this referer.
+     *
+     * @roller.wrapPojoMethod type="simple"
      * @hibernate.property column="totalhits" non-null="true" unique="false"
      */
     public java.lang.Integer getTotalHits()
@@ -267,6 +292,10 @@
     }
 
     //-------------------------------------------------------------------------
+    
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public String getDisplayUrl(int maxWidth, boolean includeHits)
     {
         StringBuffer sb = new StringBuffer();
@@ -323,6 +352,10 @@
     }
 
     //-------------------------------------------------------------------------
+    
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public String getUrl()
     {
         if (getRefererPermalink() != null)
@@ -336,6 +369,10 @@
     }
 
     //-------------------------------------------------------------------------
+    
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public String getDisplayUrl()
     {
         return getDisplayUrl(50, false);

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/UserData.java Mon Aug  8 07:41:04 2005
@@ -127,6 +127,7 @@
    {
       return this.id;
    }
+
    /** @ejb:persistent-field */ 
    public void setId( String id )
    {
@@ -150,6 +151,8 @@
    /** 
     * Get password.
     * If password encryption is enabled, will return encrypted password.
+    *
+    * @roller.wrapPojoMethod type="simple"
     * @ejb:persistent-field 
     * @hibernate.property column="passphrase" non-null="true"
     */
@@ -167,10 +170,13 @@
       this.password = password;
    }
 
-   /** Full name of the user.
-     * @ejb:persistent-field 
-     * @hibernate.property column="fullname" non-null="true" unique="true"
-     */
+   /** 
+    * Full name of the user.
+    *
+    * @roller.wrapPojoMethod type="simple"
+    * @ejb:persistent-field
+    * @hibernate.property column="fullname" non-null="true" unique="true"
+    */
    public String getFullName()
    {
       return this.fullName;
@@ -181,10 +187,13 @@
       this.fullName = fullName;
    }
 
-   /** E-mail address of the user.
-     * @ejb:persistent-field 
-     * @hibernate.property column="emailaddress" non-null="true" unique="true"
-     */
+   /**
+    * E-mail address of the user.
+    *
+    * @roller.wrapPojoMethod type="simple"
+    * @ejb:persistent-field
+    * @hibernate.property column="emailaddress" non-null="true" unique="true"
+    */
    public String getEmailAddress()
    {
       return this.emailAddress;
@@ -196,9 +205,10 @@
    }
 
    /** 
-	* @ejb:persistent-field 
-	* @hibernate.property column="datecreated" non-null="true" unique="false"
-	*/
+    * @roller.wrapPojoMethod type="simple"
+    * @ejb:persistent-field
+    * @hibernate.property column="datecreated" non-null="true" unique="false"
+    */
    public Date getDateCreated()
    {
        if (dateCreated == null) 

Modified: incubator/roller/branches/roller_2.0/src/org/roller/pojos/WeblogCategoryData.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_2.0/src/org/roller/pojos/WeblogCategoryData.java?rev=230810&r1=230809&r2=230810&view=diff
==============================================================================
--- incubator/roller/branches/roller_2.0/src/org/roller/pojos/WeblogCategoryData.java (original)
+++ incubator/roller/branches/roller_2.0/src/org/roller/pojos/WeblogCategoryData.java Mon Aug  8 07:41:04 2005
@@ -125,6 +125,8 @@
 
     /** 
      * @see org.roller.pojos.HierarchicalPersistentObject#getObjectPropertyName()
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public String getObjectPropertyName()
     {
@@ -133,6 +135,8 @@
 
     /** 
      * @see org.roller.pojos.HierarchicalPersistentObject#getAncestorPropertyName()
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public String getAncestorPropertyName()
     {
@@ -142,9 +146,10 @@
     //------------------------------------------------------- Simple properties
 
     /**
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
-      * @hibernate.id column="id" type="string"
-      *  generator-class="uuid.hex" unsaved-value="null"
+     * @hibernate.id column="id" type="string"
+     *  generator-class="uuid.hex" unsaved-value="null"
      */
     public java.lang.String getId()
     {
@@ -157,6 +162,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="name" non-null="true" unique="false"
      */
@@ -172,6 +178,8 @@
 
     /** 
      * Description
+     * 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="description" non-null="true" unique="false"
      */
@@ -186,6 +194,7 @@
     }
 
     /** 
+     * @roller.wrapPojoMethod type="simple"
      * @ejb:persistent-field 
      * @hibernate.property column="image" non-null="true" unique="false"
      */
@@ -201,6 +210,8 @@
 
     /**
      * Get path in category hierarhcy.
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public String getPath()
     {
@@ -221,6 +232,7 @@
     //------------------------------------------------------------ Associations
 
     /** 
+     * @roller.wrapPojoMethod type="pojo"
      * @ejb:persistent-field
      *  
      * @hibernate.many-to-one column="websiteid" cascade="none" not-null="true"
@@ -250,7 +262,11 @@
 //        WeblogCategoryAssoc = weblogCategoryAssoc;
 //    }
 
-    /** Return parent category, or null if category is root of hierarchy. */
+    /** 
+     * Return parent category, or null if category is root of hierarchy.
+     *
+     * @roller.wrapPojoMethod type="pojo"
+     */
     public WeblogCategoryData getParent() throws RollerException
     {
         if (mNewParent != null)
@@ -275,7 +291,11 @@
         mNewParent = parent;
     }
 
-    /** Query to get child categories of this category. */
+    /**
+     * Query to get child categories of this category.
+     *
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.roller.pojos.WeblogCategoryData"
+     */
     public List getWeblogCategories() throws RollerException
     {
         if (mWeblogCategories == null)
@@ -293,6 +313,9 @@
         return mWeblogCategories;
     }
 
+    /**
+     * @roller.wrapPojoMethod type="simple"
+     */
     public boolean descendentOf(WeblogCategoryData ancestor) 
         throws RollerException
     {
@@ -302,6 +325,8 @@
     /** 
      * Determine if category is in use. Returns true if any weblog entries 
      * use this category or any of it's subcategories.
+     *
+     * @roller.wrapPojoMethod type="simple"
      */
     public boolean isInUse() 
     {
@@ -357,6 +382,9 @@
     /** 
      * Retrieve all weblog entries in this category and, optionally, include
      * weblog entries all sub-categories.
+     *
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.roller.pojos.WeblogEntryData"
+     *
      * @param subcats True if entries from sub-categories are to be returned.
      * @return List of WeblogEntryData objects.
      * @throws RollerException