You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by cl...@apache.org on 2006/12/12 23:52:46 UTC

svn commit: r486394 - in /incubator/roller/trunk/sandbox/jdobackend: ./ src/org/apache/roller/business/datamapper/ src/org/apache/roller/business/jdo/ src/org/apache/roller/business/jpa/ src/org/apache/roller/pojos/

Author: clr
Date: Tue Dec 12 14:52:45 2006
New Revision: 486394

URL: http://svn.apache.org/viewvc?view=rev&rev=486394
Log:
Datamapper updates

Added:
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRefererManagerImpl.java
      - copied, changed from r483601, incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperReferrerManagerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARefererManager.java
Removed:
    incubator/roller/trunk/sandbox/jdobackend/HibernateToJDO.xsl
    incubator/roller/trunk/sandbox/jdobackend/HibernateToJPA.xsl
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperReferrerManagerImpl.java
Modified:
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPersistenceStrategy.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPlanetManagerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerPlanetManagerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDOPersistenceStrategy.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDORollerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAPersistenceStrategy.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARollerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAWeblogManagerImpl.java
    incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/pojos/RefererData.orm.xml

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPersistenceStrategy.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPersistenceStrategy.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPersistenceStrategy.java Tue Dec 12 14:52:45 2006
@@ -47,7 +47,7 @@
      * @return the object persisted
      * @throws org.apache.roller.RollerException on any error
      */
-    PersistentObject store(PersistentObject obj) 
+    Object store(Object obj) 
             throws RollerException;
 
     /**
@@ -66,7 +66,7 @@
      * @param po the persistent object to remove
      * @throws org.apache.roller.RollerException on any error
      */
-    public void remove(PersistentObject po) 
+    public void remove(Object po)
             throws RollerException;
 
     /**
@@ -94,7 +94,7 @@
      * @return the object retrieved
      * @throws RollerException on any error retrieving object
      */
-    public PersistentObject load(Class clazz, String id) 
+    public Object load(Class clazz, String id)
             throws RollerException;
 
     /**

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPlanetManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPlanetManagerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPlanetManagerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperPlanetManagerImpl.java Tue Dec 12 14:52:45 2006
@@ -43,17 +43,11 @@
 
 import org.apache.roller.RollerException;
 
-import org.apache.roller.business.Roller;
-import org.apache.roller.business.RollerFactory;
-import org.apache.roller.business.WeblogManager;
-import org.apache.roller.config.RollerRuntimeConfig;
 import org.apache.roller.planet.business.PlanetManager;
 import org.apache.roller.planet.pojos.PlanetConfigData;
 import org.apache.roller.planet.pojos.PlanetEntryData;
 import org.apache.roller.planet.pojos.PlanetGroupData;
 import org.apache.roller.planet.pojos.PlanetSubscriptionData;
-import org.apache.roller.pojos.WeblogEntryData;
-import org.apache.roller.pojos.WebsiteData;
 import org.apache.roller.util.rome.DiskFeedInfoCache;
 
 

Copied: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRefererManagerImpl.java (from r483601, incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperReferrerManagerImpl.java)
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRefererManagerImpl.java?view=diff&rev=486394&p1=incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperReferrerManagerImpl.java&r1=483601&p2=incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRefererManagerImpl.java&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperReferrerManagerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRefererManagerImpl.java Tue Dec 12 14:52:45 2006
@@ -27,6 +27,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.commons.lang.StringUtils;
 
 import org.apache.roller.RollerException;
 
@@ -45,24 +46,23 @@
 import org.apache.roller.util.Utilities;
 
 /*
- * DatamapperReferrerManagerImpl.java
+ * DatamapperRefererManagerImpl.java
  *
  * Created on May 31, 2006, 4:06 PM
  *
  */
-public class DatamapperReferrerManagerImpl implements RefererManager {
+public abstract class DatamapperRefererManagerImpl implements RefererManager {
 
     private static Log log = LogFactory.getLog(
-        DatamapperReferrerManagerImpl.class);
+        DatamapperRefererManagerImpl.class);
 
     protected static final String DAYHITS = "dayHits";
     protected static final String TOTALHITS = "totalHits";
     /** The strategy for this manager. */
-    private DatamapperPersistenceStrategy strategy;
+    protected DatamapperPersistenceStrategy strategy;
 
-    /** Creates a new instance of DatamapperReferrerManagerImpl */
-    public DatamapperReferrerManagerImpl
-            (DatamapperPersistenceStrategy strategy) {
+    /** Creates a new instance of DatamapperRefererManagerImpl */
+    public DatamapperRefererManagerImpl(DatamapperPersistenceStrategy strategy) {
         log.debug("Instantiating Datamapper Referer Manager");
 
         this.strategy = strategy;
@@ -80,71 +80,51 @@
      * Clear referrer dayhits and remove referrers without excerpts.
      */
     public void clearReferrers() throws RollerException {
-        // TODO not implemented
+        clearDayHits();
 
-//        Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
-//        String reset = "update RefererData set dayHits=0";
-//        session.createQuery(reset).executeUpdate();
-//        String delete = null;
-//        if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
-//            delete = "delete RefererData where excerpt is null or excerpt like ''";
-//        } else {
-//            delete = "delete RefererData where excerpt is null or excerpt=''";
-//        }
-//        session.createQuery(delete).executeUpdate();
+        //TODO: Datamapper port: The original code used two different expressions
+        // to find empty exerpt
+        // (1) excerpt like '' for mssql, oracle and derby
+        // (2) excerpt = '' for all other
+        // I could verify that (1) works for mssql, oralce, derby, and mysql
+        strategy.newRemoveQuery(RefererData.class,
+                "RefererData.deleteByNullOrEmptyExcerpt").removeAll();
     }
 
+    abstract protected  void clearDayHits() throws RollerException;
+
     /**
      * Clear referrer dayhits and remove referrers without excerpts.
      */
     public void clearReferrers(WebsiteData website) throws RollerException {
-        // TODO not implemented
+        clearDayHitsByWebsite(website);
+
+        //TODO: Datamapper port: Same comments as for method clearReferrers() apply for the expression
+        strategy.newRemoveQuery(RefererData.class,
+                "RefererData.deleteByNullOrEmptyExcerpt&website").removeAll(website);
 
-//        Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
-//        String reset = "update RefererData set dayHits=0 where website=:site";
-//        session.createQuery(reset)
-//        .setParameter("site",website).executeUpdate();
-//        String delete = null;
-//        if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
-//            delete = "delete RefererData where website=:site and (excerpt is null or excerpt like '')";
-//        } else {
-//            delete = "delete RefererData where website=:site and (excerpt is null or excerpt='')";
-//        }
-//        session.createQuery(delete)
-//        .setParameter("site",website).executeUpdate();
     }
 
+    abstract protected  void clearDayHitsByWebsite(WebsiteData website) throws RollerException;
+
     /**
      * Apply ignoreWord/spam filters to all referers in system.
      */
     public void applyRefererFilters() throws RollerException {
-        // TODO not implemented
-
-//        Criteria criteria = session.createCriteria(RefererData.class);
-//            
-//        String spamwords = RollerRuntimeConfig.getProperty("spam.blacklist");
-//            
-//        String[] blacklist = StringUtils.split(
-//                StringUtils.deleteWhitespace(spamwords),",");
-//        Junction or = Expression.disjunction();
-//        for (int i=0; i<blacklist.length; i++) {
-//            String ignoreWord = blacklist[i].trim();
-//            //log.debug("including ignore word - "+ignoreWord);
-//            or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
-//        }
-//        criteria.add(Expression.conjunction()
-//        .add(Expression.disjunction().add(Expression.isNull("excerpt")).add(Expression.eq("excerpt", "")))
-//        .add(or)
-//        );
-//            
-//        log.debug("removing spam referers - "+criteria.list().size());
-//            
-//        Iterator referer = criteria.list().iterator();
-//        while (referer.hasNext()) {
-//            this.strategy.remove((RefererData) referer.next());
-//        }
+        String spamwords = RollerRuntimeConfig.getProperty("spam.blacklist");
+        String[] blacklist = StringUtils.split(
+                StringUtils.deleteWhitespace(spamwords),",");
+        if (blacklist.length == 0) return;
+        List referers = getBlackListedReferer(blacklist);
+        for (Iterator iterator = referers.iterator(); iterator.hasNext();) {
+            RefererData referer= (RefererData) iterator.next();
+            this.strategy.remove(referer);
+        }
     }
 
+    protected abstract List getBlackListedReferer(String[] blacklist) throws
+            RollerException;
+
     /**
      * Apply ignoreWord/spam filters to all referers in website.
      */
@@ -155,28 +135,18 @@
         if (null == website) throw new RollerException("website is null");
         if (null == website.getBlacklist()) return;
         
-//        Criteria criteria = session.createCriteria(RefererData.class);
-//            
-//        String[] blacklist = StringUtils.split(
-//                StringUtils.deleteWhitespace(website.getBlacklist()),",");
-//        if (blacklist.length == 0) return;
-//            
-//        Junction or = Expression.disjunction();
-//        for (int i=0; i<blacklist.length; i++) {
-//            String ignoreWord = blacklist[i].trim();
-//            or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
-//        }
-//        criteria.add(Expression.conjunction()
-//        .add(Expression.disjunction().add(Expression.isNull("excerpt")).add(Expression.eq("excerpt", "")))
-//        .add(Expression.eq("website",website))
-//        .add(or)
-//        );
-//            
-//        Iterator referer = criteria.list().iterator();
-//        while (referer.hasNext()) {
-//            this.strategy.remove((RefererData) referer.next());
-//        }        
+        String[] blacklist = StringUtils.split(
+                StringUtils.deleteWhitespace(website.getBlacklist()),",");
+        if (blacklist.length == 0) return;
+        List referers = getBlackListedReferer(website, blacklist);
+        for (Iterator iterator = referers.iterator(); iterator.hasNext();) {
+            RefererData referer= (RefererData) iterator.next();
+            this.strategy.remove(referer);
+        }
     }
+
+    protected abstract List getBlackListedReferer(WebsiteData website,
+            String[] blacklist) throws RollerException;
 
     protected List getExistingReferers(WebsiteData website, String dateString,
             String permalink) throws RollerException {

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerImpl.java Tue Dec 12 14:52:45 2006
@@ -31,7 +31,6 @@
 import org.apache.roller.business.pings.PingQueueManager;
 import org.apache.roller.business.pings.PingTargetManager;
 import org.apache.roller.business.referrers.RefererManager;
-import org.apache.roller.planet.business.PlanetManager;
 
 /**
  * A Datamapper specific implementation of the Roller business layer.
@@ -51,7 +50,6 @@
     // references to the managers we maintain
     private BookmarkManager bookmarkManager = null;
     private PropertiesManager propertiesManager = null;
-    private PlanetManager planetManager = null;
     private RefererManager referrerManager = null;
     private UserManager userManager = null;
     private WeblogManager weblogManager = null;
@@ -158,21 +156,6 @@
     }
 
     /**
-     * @see org.apache.roller.business.Roller#getPlanetManager()
-     */
-    public PlanetManager getPlanetManager() {
-        if ( planetManager == null ) {
-            planetManager = createDatamapperPlanetManager(strategy);
-        }
-        return planetManager;
-    }
-
-    protected PlanetManager createDatamapperPlanetManager(
-            DatamapperPersistenceStrategy strategy) {
-        return new DatamapperPlanetManagerImpl(strategy);
-    }
-
-    /**
      * @see org.apache.roller.business.Roller#getPropertiesManager()
      */
     public PropertiesManager getPropertiesManager() {
@@ -192,15 +175,13 @@
      */
     public RefererManager getRefererManager() {
         if ( referrerManager == null ) {
-            referrerManager = createDatamapperReferrerManager(strategy);
+            referrerManager = createDatamapperRefererManagerImpl(strategy);
         }
         return referrerManager;
     }
 
-    protected RefererManager createDatamapperReferrerManager(
-            DatamapperPersistenceStrategy strategy) {
-        return new DatamapperReferrerManagerImpl(strategy);
-    }
+    protected abstract RefererManager createDatamapperRefererManagerImpl(
+            DatamapperPersistenceStrategy strategy);
 
     /**
      * @see org.apache.roller.business.Roller#getUserManager()

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerPlanetManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerPlanetManagerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerPlanetManagerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/datamapper/DatamapperRollerPlanetManagerImpl.java Tue Dec 12 14:52:45 2006
@@ -153,9 +153,10 @@
                     try {
                         WeblogEntryData rollerEntry =
                             (WeblogEntryData)entryIter.next();
-                        PlanetEntryData entry =
-                            new PlanetEntryData(rollerEntry, sub, 
-                                pagePlugins);
+                        PlanetEntryData entry = null;
+//TODO: DatamapperPort Need to sync up code with trunk                        
+//                            new PlanetEntryData(rollerEntry, sub,
+//                                pagePlugins);
                         saveEntry(entry);
                         newEntries.add(entry);
                     } catch (Exception e) {

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDOPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDOPersistenceStrategy.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDOPersistenceStrategy.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDOPersistenceStrategy.java Tue Dec 12 14:52:45 2006
@@ -30,8 +30,6 @@
 import org.apache.roller.business.datamapper.DatamapperPersistenceStrategy;
 import org.apache.roller.business.datamapper.DatamapperQuery;
 import org.apache.roller.business.datamapper.DatamapperRemoveQuery;
-import org.apache.roller.pojos.PersistentObject;
-import org.apache.roller.pojos.UserData;
 
 /**
  * JDOPersistenceStrategy is responsible for the lowest-level interaction
@@ -95,7 +93,7 @@
      * @return the object persisted
      * @throws org.apache.roller.RollerException on any error
      */
-    public PersistentObject store(PersistentObject obj) 
+    public Object store(Object obj) 
             throws RollerException {
         PersistenceManager pm = getPersistenceManager(true);
         pm.makePersistent(obj);
@@ -120,7 +118,7 @@
      * @param po the persistent object to remove
      * @throws org.apache.roller.RollerException on any error
      */
-    public void remove(PersistentObject po) 
+    public void remove(Object po) 
             throws RollerException {
         PersistenceManager pm = getPersistenceManager(true);
         pm.deletePersistent(po);
@@ -155,10 +153,10 @@
      * @return the object retrieved
      * @throws RollerException on any error retrieving object
      */
-    public PersistentObject load(Class clazz, String id) 
+    public Object load(Class clazz, String id) 
             throws RollerException {
         PersistenceManager pm = getPersistenceManager(false);
-        return (PersistentObject)pm.getObjectById(clazz, id);
+        return pm.getObjectById(clazz, id);
     }
 
     /**

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDORollerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDORollerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDORollerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jdo/JDORollerImpl.java Tue Dec 12 14:52:45 2006
@@ -26,6 +26,7 @@
 import org.apache.roller.business.Roller;
 import org.apache.roller.business.UserManager;
 import org.apache.roller.business.WeblogManager;
+import org.apache.roller.business.referrers.RefererManager;
 
 /**
  * Implements Roller, the entry point interface for the Roller business tier
@@ -55,6 +56,10 @@
 
     protected WeblogManager createDatamapperWeblogManager(
             DatamapperPersistenceStrategy strategy) {
+        return null;
+    }
+
+    protected RefererManager createDatamapperRefererManagerImpl(DatamapperPersistenceStrategy strategy) {
         return null;
     }
 

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAPersistenceStrategy.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAPersistenceStrategy.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAPersistenceStrategy.java Tue Dec 12 14:52:45 2006
@@ -33,7 +33,6 @@
 import org.apache.roller.business.datamapper.DatamapperPersistenceStrategy;
 import org.apache.roller.business.datamapper.DatamapperQuery;
 import org.apache.roller.business.datamapper.DatamapperRemoveQuery;
-import org.apache.roller.pojos.PersistentObject;
 
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityManager;
@@ -108,7 +107,7 @@
      * @return the object persisted
      * @throws org.apache.roller.RollerException on any error
      */
-    public PersistentObject store(PersistentObject obj) throws RollerException {
+    public Object store(Object obj) throws RollerException {
         EntityManager em = getEntityManager(true);
         em.persist(obj);
         return obj;
@@ -131,7 +130,7 @@
      * @param po the persistent object to remove
      * @throws org.apache.roller.RollerException on any error
      */
-    public void remove(PersistentObject po) throws RollerException {
+    public void remove(Object po) throws RollerException {
         EntityManager em = getEntityManager(true);
         em.remove(po);
     }
@@ -170,10 +169,10 @@
      * @return the object retrieved
      * @throws RollerException on any error retrieving object
      */
-    public PersistentObject load(Class clazz, String id)
+    public Object load(Class clazz, String id)
             throws RollerException {
         EntityManager em = getEntityManager(false);
-        return (PersistentObject) em.find(clazz, id);
+        return em.find(clazz, id);
     }
 
     /**

Added: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARefererManager.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARefererManager.java?view=auto&rev=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARefererManager.java (added)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARefererManager.java Tue Dec 12 14:52:45 2006
@@ -0,0 +1,96 @@
+/*
+ * 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.business.jpa;
+
+import org.apache.roller.business.datamapper.DatamapperRefererManagerImpl;
+import org.apache.roller.business.datamapper.DatamapperQuery;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.WebsiteData;
+
+import java.util.List;
+
+/**
+ * @author Mitesh Meswani
+ */
+public class JPARefererManager extends DatamapperRefererManagerImpl {
+    public JPARefererManager(JPAPersistenceStrategy strategy) {
+        super(strategy);
+    }
+
+    protected void clearDayHits() throws RollerException {
+        JPAUpdateQuery query = ((JPAPersistenceStrategy) strategy).
+                newUpdateQuery("RefererData.clearDayHits");
+        query.updateAll();
+    }
+
+    protected void clearDayHitsByWebsite(WebsiteData website) throws
+            RollerException {
+        JPAUpdateQuery query = ((JPAPersistenceStrategy) strategy).
+                newUpdateQuery("RefererData.clearDayHitsByWebsite");
+        query.updateAll(website);    
+    }
+
+    protected List getBlackListedReferer(String[] blacklist) throws
+            RollerException {
+        StringBuffer queryString = getQueryStringForBlackList(blacklist);
+        DatamapperQuery query =
+                ((JPAPersistenceStrategy) strategy).newDynamicQuery(queryString.toString());
+        return (List) query.execute();
+    }
+
+    protected List getBlackListedReferer(WebsiteData website, String[] blacklist) 
+            throws RollerException {
+        StringBuffer queryString = getQueryStringForBlackList(blacklist);
+        queryString.append(" AND r.website = ?1 ");
+        DatamapperQuery query =
+                ((JPAPersistenceStrategy) strategy).newDynamicQuery(queryString.toString());
+        return (List) query.execute(website);
+    }
+
+    /**
+     * Generates a JPQL query of form
+     * SELECT r FROM RefererData r WHERE
+     *     ( refererUrl like %blacklist[1] ..... OR refererUrl like %blacklist[n])
+     * AND (r.excerpt IS NULL OR r.excerpt LIKE '')
+     * @param blacklist
+     * @return
+     */
+    private StringBuffer getQueryStringForBlackList(String[] blacklist) {
+        assert blacklist.length > 0;
+        StringBuffer queryString = new StringBuffer("SELECT r FROM RefererData r WHERE (");
+        //Search for any matching entry from blacklist[]
+        final String OR = " OR ";
+        for (int i = 0; i < blacklist.length; i++) {
+            String ignoreWord = blacklist[i];
+            //TODO: DataMapper port: original code use "like ignore case" as follows
+            // or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
+            // There is no equivalent for it in JPA
+            queryString.append("refererUrl like %").append(ignoreWord.trim()).append('%').
+                    append(OR);
+        }
+        // Get rid of last OR
+        queryString.delete(queryString.length() - OR.length(), queryString.length());
+        queryString.append(" ) ");
+        queryString.append(" AND (r.excerpt IS NULL OR r.excerpt LIKE '')");
+        return queryString;
+    }
+
+}
+
+

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARollerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARollerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARollerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPARollerImpl.java Tue Dec 12 14:52:45 2006
@@ -23,8 +23,8 @@
 import org.apache.roller.RollerException;
 import org.apache.roller.business.datamapper.DatamapperRollerImpl;
 import org.apache.roller.business.datamapper.DatamapperPersistenceStrategy;
-import org.apache.roller.business.jpa.JPAUserManagerImpl;
 import org.apache.roller.business.Roller;
+import org.apache.roller.business.referrers.RefererManager;
 import org.apache.roller.business.UserManager;
 import org.apache.roller.business.WeblogManager;
 
@@ -56,6 +56,10 @@
     protected WeblogManager createDatamapperWeblogManager(
             DatamapperPersistenceStrategy strategy) {
         return null;
+    }
+
+    protected RefererManager createDatamapperRefererManagerImpl(DatamapperPersistenceStrategy strategy) {
+        return new JPARefererManager((JPAPersistenceStrategy) strategy);
     }
 
     /**

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAWeblogManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAWeblogManagerImpl.java?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAWeblogManagerImpl.java (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/business/jpa/JPAWeblogManagerImpl.java Tue Dec 12 14:52:45 2006
@@ -374,8 +374,7 @@
             else
                 results = (List) strategy.newQuery(
                     WeblogEntryTagAggregateData.class, 
-                    "WeblogEntryTagAggregateData
-                    .getNameByNameIn&WebsiteNull")
+                    "WeblogEntryTagAggregateData.getNameByNameIn&WebsiteNull")
                     .execute(tags);
         } catch (RollerException re) {
             throw new RuntimeException(re);

Modified: incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/pojos/RefererData.orm.xml
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/pojos/RefererData.orm.xml?view=diff&rev=486394&r1=486393&r2=486394
==============================================================================
--- incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/pojos/RefererData.orm.xml (original)
+++ incubator/roller/trunk/sandbox/jdobackend/src/org/apache/roller/pojos/RefererData.orm.xml Tue Dec 12 14:52:45 2006
@@ -51,15 +51,27 @@
             </query>
         </named-query>
         <named-query name="RefererData.getDaysPopularWebsitesByWebsite.enabled&amp;Website.active">
-            <query>SELECT SUM(DISTICT r.dayHits), r.website.id, r.website.name, r.website.handle
+            <query>SELECT SUM(DISTINCT r.dayHits), r.website.id, r.website.name, r.website.handle
                 FROM RefererData r WHERE r.website.enabled = ?1 AND r.website.active = ?2
                 GROUP BY r.website.id, r.website.name, r.website.handle
             </query>
         </named-query>
         <named-query name="RefererData.getHitsByWebsite.enabled&amp;Website.id">
-            <query>SELECT SUM(DISTICT r.dayHits), SUM(DISTINCT r.totalHits)
+            <query>SELECT SUM(DISTINCT r.dayHits), SUM(DISTINCT r.totalHits)
                 FROM RefererData r WHERE r.website.enabled = ?1 AND r.website.id = ?2
             </query>
+        </named-query>
+        <named-query name="RefererData.clearDayHits">
+            <query>UPDATE RefererData r SET r.dayHits=0</query>
+        </named-query>
+        <named-query name="RefererData.clearDayHitsByWebsite">
+            <query>UPDATE RefererData r SET r.dayHits=0 where r.website = ?1</query>
+        </named-query>
+        <named-query name="RefererData.deleteByNullOrEmptyExcerpt">
+            <query>DELETE FROM RefererData r WHERE r.excerpt IS NULL OR r.excerpt LIKE ''</query>
+        </named-query>
+        <named-query name="RefererData.deleteByNullOrEmptyExcerpt&amp;website">
+            <query>DELETE FROM RefererData r WHERE r.website = ?1 AND (r.excerpt IS NULL OR r.excerpt LIKE '')</query>
         </named-query>
         <attributes>
             <id name="id">