You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ri...@apache.org on 2007/12/07 09:58:08 UTC

svn commit: r602031 - in /maven/continuum/branches/continuum-jpa/continuum-model-jpa/src: main/java/org/apache/maven/continuum/store/api/ main/java/org/apache/maven/continuum/store/jpa/ test/java/org/apache/maven/continuum/store/jpa/ test/resources/MET...

Author: rinku
Date: Fri Dec  7 00:58:07 2007
New Revision: 602031

URL: http://svn.apache.org/viewvc?rev=602031&view=rev
Log:
o  playing around with generics to implement a leaner JpaStore and drop specific extensions for Project, ProjectGroup etc. 
o  added unit tests.
o  Some more unit tests required before earlier implementations can be deprecated. 

Added:
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java   (with props)
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java   (with props)
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java   (with props)
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java   (with props)
Modified:
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/ProjectQuery.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Query.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Store.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStore.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectNotifierStore.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectStore.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/StoreSupport.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStoreTest.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectStoreTest.java
    maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/resources/META-INF/spring-config.xml

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/ProjectQuery.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/ProjectQuery.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/ProjectQuery.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/ProjectQuery.java Fri Dec  7 00:58:07 2007
@@ -4,6 +4,7 @@
 package org.apache.maven.continuum.store.api;
 
 import java.util.Date;
+import java.util.Map;
 
 import org.apache.maven.continuum.model.project.Project;
 
@@ -14,7 +15,7 @@
  * @version $Id$
  * @since 1.2
  */
-public class ProjectQuery implements Query<Project>
+public class ProjectQuery<Project> implements Query<Project>
 {
 
     /**
@@ -319,6 +320,91 @@
     public void setVersion( String version )
     {
         this.version = version;
+    }
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Query#toString(java.util.Map)
+     */
+    public String toString( Map<String, Object> where )
+    {
+        StringBuffer sb = new StringBuffer();
+
+        if ( this.hasId() )
+        {
+            where.put( "id", this.getId() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.id =:id " );
+        }
+        if ( this.hasDateCreated() )
+        {
+            where.put( "dateCreated", this.getDateCreated() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.dateCreated =:dateCreated " );
+        }
+        if ( this.hasDateUpdated() )
+        {
+            where.put( "dateUpdated", this.getDateUpdated() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.dateUpdated =:dateUpdated " );
+        }
+        if ( this.hasDescription() )
+        {
+            where.put( "description", this.getDescription() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.description =:description " );
+        }
+        if ( this.hasGroupId() )
+        {
+            where.put( "groupId", this.getGroupId() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.groupId =:groupId " );
+        }
+        if ( this.hasModelEncoding() )
+        {
+            where.put( "modelEncoding", this.getModelEncoding() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.modelEncoding =:modelEncoding " );
+        }
+        if ( this.hasName() )
+        {
+            where.put( "name", this.getName() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.name =:name " );
+        }
+        if ( this.hasArtifactId() )
+        {
+            where.put( "artifactId", this.getArtifactId() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.artifactId =:artifactId" );
+        }
+        if ( this.hasBuildNumber() )
+        {
+            where.put( "buildNumber", this.getBuildNumber() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.buildNumber =:buildNumber" );
+        }
+        if ( this.hasVersion() )
+        {
+            where.put( "version", this.getVersion() );
+            if ( sb.length() > 0 )
+                sb.append( "and" );
+            sb.append( " project.version =:version" );
+        }
+
+        String whereClause = ( sb.length() > 0 ? " where " : "" ) + sb.toString();
+
+        return null;
     }
 
 }

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Query.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Query.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Query.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Query.java Fri Dec  7 00:58:07 2007
@@ -3,8 +3,14 @@
  */
 package org.apache.maven.continuum.store.api;
 
+import java.util.Map;
+
 /**
  * Wraps up Type Query criteria to be used by store extensions to filter (and obtain) matching type instances.
+ * <p>
+ * Implementations/extensions are expected to override {@link Object#toString()} method and return a <b>JPQL</b>
+ * formatted string. The JPQL string is consumed by the {@link Store} implementation in {@link Store#query(Query)}
+ * operations.
  * 
  * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
  * @version $Id$
@@ -12,5 +18,16 @@
  */
 public interface Query<Q>
 {
-    // Marker interface
+
+    /**
+     * Returns this instance of {@link Query} as a JPQL String.
+     * 
+     * @param whereClause
+     *            {@link Map} containing the named parameters to be substituted in the JPQL query. This is populated by
+     *            the {@link Query} implementation and subsequently used by the {@link Store} implementation to
+     *            interpolate the parameters before the JPQL query is executed.
+     * 
+     * @return {@link Query} as a JPQL String
+     */
+    public String toString( Map<String, Object> whereClause );
 }

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Store.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Store.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Store.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/api/Store.java Fri Dec  7 00:58:07 2007
@@ -6,6 +6,15 @@
 import java.util.List;
 
 /**
+ * Interface that Continuum store extensions/implementations are expected to implement to allow operations on the
+ * underlying store.
+ * <ul>
+ * <li>Entity look ups</li>
+ * <li>Entity insert/updates</li>
+ * <li>Entity removal</li>
+ * <li>Querying one or more entity/entities based on specified criteria</li>
+ * </ul>
+ * 
  * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
  * @version $Id$
  * @since 1.2
@@ -16,48 +25,51 @@
     /**
      * Looks up the underlying store and returns a {@link T} instance that matches the specified id.
      * 
+     * @param klass
+     *            {@link Class} for type entity to lookup and return an instance of.
      * @param id
-     *            {@link T} id to match.
-     * @return matching {@link T} instance.
+     *            Entity Type {@link T}'s id to match.
+     * 
+     * @return matching entity type {@link T} instance.
      * @throws StoreException
      * @throws EntityNotFoundException
      *             if the entity specified by the identifier could be located in the system.
      * @throws EntityNotFoundException
      *             if the instance could not be looked up.
      */
-    public T lookup( Long id ) throws StoreException, EntityNotFoundException;
+    public T lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException;
 
     /**
-     * Persists the passed in {@link T} instance to the underlying store.
+     * Persists the passed in entity type {@link T} instance to the underlying store.
      * <p>
      * If the entity instance already exists in the database it is updated, else a new instance is created and an
      * store-generated identifier assigned to it.
      * 
      * @param entity
-     *            {@link T} instance to be created/saved.
-     * @return updated {@link T} instance.
+     *            Type {@link T} instance to be created/saved.
+     * @return updated entity type {@link T} instance.
      * @throws StoreException
      *             if there was an error saving the entity.
      */
     public T save( T entity ) throws StoreException;
 
     /**
-     * Removes the passed {@link T} instance from the underlying store.
+     * Removes the passed entity type {@link T} instance from the underlying store.
      * 
      * @param entity
-     *            {@link T} instance to remove.
+     *            Type {@link T} instance to remove.
      * @throws StoreException
      *             if there was an error removing the entity.
      */
     public void delete( T entity ) throws StoreException;
 
     /**
-     * Obtains a {@link List} of instances of type {@link T} which match the criteria specified by the passed in query
-     * instance.
+     * Obtains a {@link List} of instances of entity type {@link T} which match the criteria specified by the passed in
+     * query instance.
      * 
      * @param query
      *            instance that wraps up the criteria for querying matching instances in the system.
-     * @return {@link List} of instances of type {@link T} which match the specified query.
+     * @return {@link List} of instances of entity type {@link T} which match the specified query.
      * @throws StoreException
      */
     public List<T> query( Q query ) throws StoreException;

Added: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java?rev=602031&view=auto
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java (added)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java Fri Dec  7 00:58:07 2007
@@ -0,0 +1,32 @@
+/**
+ * 
+ */
+package org.apache.maven.continuum.store.jpa;
+
+import java.util.List;
+
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.store.api.ProjectQuery;
+import org.apache.maven.continuum.store.api.StoreException;
+
+/**
+ * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
+ * @deprecated <em>experimental</em>
+ */
+public class ExtendedJpaProjectStore<T extends Project, Q extends ProjectQuery<Project>>
+    extends JpaStore<Project, ProjectQuery<Project>>
+{
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.jpa.JpaStore#query(org.apache.maven.continuum.store.api.Query)
+     */
+    @Override
+    public List<Project> query( ProjectQuery<Project> query ) throws StoreException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/ExtendedJpaProjectStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStore.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStore.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStore.java Fri Dec  7 00:58:07 2007
@@ -40,6 +40,16 @@
      */
     public ProjectGroup lookup( Long id ) throws StoreException, EntityNotFoundException
     {
+        return lookup( null, id );
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#lookup(Class, java.lang.Long)
+     */
+    public ProjectGroup lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException
+    {
         return lookup( ProjectGroup.class, id );
     }
 

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectNotifierStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectNotifierStore.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectNotifierStore.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectNotifierStore.java Fri Dec  7 00:58:07 2007
@@ -40,6 +40,16 @@
      */
     public ProjectNotifier lookup( Long id ) throws StoreException, EntityNotFoundException
     {
+        return lookup( null, id );
+    }
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#lookup(Class, java.lang.Long)
+     */
+    public ProjectNotifier lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException
+    {
         return lookup( ProjectNotifier.class, id );
     }
 

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectStore.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectStore.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaProjectStore.java Fri Dec  7 00:58:07 2007
@@ -19,7 +19,7 @@
  * @version $Id$
  * @since 1.2
  */
-public class JpaProjectStore extends StoreSupport implements Store<Project, ProjectQuery>
+public class JpaProjectStore extends StoreSupport implements Store<Project, ProjectQuery<Project>>
 {
 
     /**
@@ -39,6 +39,16 @@
      * @see org.apache.maven.continuum.store.api.Store#lookup(java.lang.Long)
      */
     public Project lookup( Long id ) throws StoreException, EntityNotFoundException
+    {
+        return lookup( null, id );
+    }
+
+    /**
+     * {@inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#lookup(Class, java.lang.Long)
+     */
+    public Project lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException
     {
         return lookup( Project.class, id );
     }

Added: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java?rev=602031&view=auto
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java (added)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java Fri Dec  7 00:58:07 2007
@@ -0,0 +1,87 @@
+/**
+ * 
+ */
+package org.apache.maven.continuum.store.jpa;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.store.api.EntityNotFoundException;
+import org.apache.maven.continuum.store.api.Query;
+import org.apache.maven.continuum.store.api.Store;
+import org.apache.maven.continuum.store.api.StoreException;
+import org.springframework.orm.jpa.JpaObjectRetrievalFailureException;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
+ * @version $Id$
+ * @since 1.2
+ */
+public class JpaStore<T, Q extends Query<T>> extends StoreSupport implements Store<T, Q>
+{
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#delete(java.lang.Object)
+     */
+    @Transactional( readOnly = false )
+    public void delete( T entity ) throws StoreException
+    {
+        getJpaTemplate().remove( entity );
+    }
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#lookup(Class, java.lang.Long)
+     */
+    public T lookup( Class<T> klass, Long id ) throws StoreException, EntityNotFoundException
+    {
+        if ( id == null )
+            throw new EntityNotFoundException();
+        T entity = null;
+        try
+        {
+            entity = getJpaTemplate().find( klass, id );
+        }
+        catch ( JpaObjectRetrievalFailureException e )
+        {
+            throw new EntityNotFoundException();
+        }
+        if ( entity == null )
+            throw new EntityNotFoundException();
+        return entity;
+    }
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#query(org.apache.maven.continuum.store.api.Query)
+     */
+    public List<T> query( Q query ) throws StoreException
+    {
+        Map<String, Object> where = new HashMap<String, Object>();
+        String q = query.toString( where );
+
+        List<T> results = find( q, where, 0, 0 );
+
+        return results;
+    }
+
+    /**
+     * @{inheritDoc}
+     * 
+     * @see org.apache.maven.continuum.store.api.Store#save(java.lang.Object)
+     */
+    @Transactional( readOnly = false )
+    public T save( T entity ) throws StoreException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStore.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java?rev=602031&view=auto
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java (added)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java Fri Dec  7 00:58:07 2007
@@ -0,0 +1,26 @@
+/**
+ * 
+ */
+package org.apache.maven.continuum.store.jpa;
+
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.store.api.ProjectQuery;
+import org.apache.maven.continuum.store.api.Store;
+
+/**
+ * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
+ * @version $Id$
+ * @since 1.2
+ */
+public class JpaStoreFactory
+{
+
+    private final JpaStore<Project, ProjectQuery<Project>> JPA_PROJECT_STORE =
+        new JpaStore<Project, ProjectQuery<Project>>();
+
+    public Store<Project, ProjectQuery<Project>> createProjectStoreInstance()
+    {
+        return JPA_PROJECT_STORE;
+    }
+
+}

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/JpaStoreFactory.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/StoreSupport.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/StoreSupport.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/StoreSupport.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/main/java/org/apache/maven/continuum/store/jpa/StoreSupport.java Fri Dec  7 00:58:07 2007
@@ -30,33 +30,6 @@
 {
 
     /**
-     * Service method to lookup matching entities.
-     * 
-     * @param <E>
-     * @param klass
-     * @param id
-     * @return
-     * @throws EntityNotFoundException
-     */
-    protected <E extends CommonPersistableEntity> E lookup( Class<E> klass, Long id ) throws EntityNotFoundException
-    {
-        if ( id == null )
-            throw new EntityNotFoundException();
-        E entity = null;
-        try
-        {
-            entity = getJpaTemplate().find( klass, id );
-        }
-        catch ( JpaObjectRetrievalFailureException e )
-        {
-            throw new EntityNotFoundException();
-        }
-        if ( entity == null )
-            throw new EntityNotFoundException();
-        return entity;
-    }
-
-    /**
      * Prepares and executes a query using the 'where' criteria, a start index and a given range of results to return.
      * 
      * @param queryString

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStoreTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStoreTest.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStoreTest.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectGroupStoreTest.java Fri Dec  7 00:58:07 2007
@@ -81,7 +81,7 @@
     @Test
     public void testLookupProjectGroup() throws EntityNotFoundException, StoreException
     {
-        ProjectGroup projectGroup = getProjectGroupStore().lookup( 1000L );
+        ProjectGroup projectGroup = getProjectGroupStore().lookup( null, 1000L );
         Assert.assertNotNull( projectGroup );
         Assert.assertEquals( 1000L, projectGroup.getId().longValue() );
         Assert.assertEquals( "Continuum Projects", projectGroup.getName() );
@@ -93,7 +93,7 @@
     {
         try
         {
-            ProjectGroup projectGroup = getProjectGroupStore().lookup( 99999L );
+            ProjectGroup projectGroup = getProjectGroupStore().lookup( null, 99999L );
             Assert.fail( "Expected " + EntityNotFoundException.class.getSimpleName()
                             + " on account of an invalid ProjectGroup Id." );
         }

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectStoreTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectStoreTest.java?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectStoreTest.java (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaProjectStoreTest.java Fri Dec  7 00:58:07 2007
@@ -89,9 +89,9 @@
      * 
      * @return
      */
-    private Store<Project, ProjectQuery> getProjectStore()
+    private Store<Project, ProjectQuery<Project>> getProjectStore()
     {
-        Store<Project, ProjectQuery> store = getStore( BEAN_REF__PROJECT_STORE );
+        Store<Project, ProjectQuery<Project>> store = getStore( BEAN_REF__PROJECT_STORE );
         return store;
     }
 

Added: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java?rev=602031&view=auto
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java (added)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java Fri Dec  7 00:58:07 2007
@@ -0,0 +1,75 @@
+/**
+ * 
+ */
+package org.apache.maven.continuum.store.jpa;
+
+import java.io.File;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.continuum.model.project.ProjectNotifier;
+import org.apache.maven.continuum.store.ApplicationContextAwareStoreTestCase;
+import org.apache.maven.continuum.store.api.ProjectNotifierQuery;
+import org.apache.maven.continuum.store.api.Store;
+import org.apache.maven.continuum.store.api.StoreException;
+import org.apache.openjpa.persistence.OpenJPAQuery;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+/**
+ * @author <a href='mailto:rahul.thakur.xdev@gmail.com'>Rahul Thakur</a>
+ * @version $Id$
+ * @since 1.2
+ */
+@RunWith( SpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = "/META-INF/spring-config.xml" )
+public class JpaStoreTest extends ApplicationContextAwareStoreTestCase
+{
+    private static final String BEAN_REF__PROJECT_STORE = "projectStore";
+
+    @Override
+    @Before
+    public void setUp()
+    {
+        File testData = new File( "src/test/resources/sql/project-table-data.sql" );
+        Assert.assertTrue( "Unable to find test data resource: " + testData.getAbsolutePath(), testData.exists() );
+        Properties propMap = new Properties();
+        setUp( propMap );
+
+        // load test data from SQL file.
+        setSqlSource( testData );
+    }
+
+    @Test
+    public void testOpenJPASetup()
+    {
+        OpenJPAQuery q = em.createQuery( "select p from Project p" );
+        String[] sql = q.getDataStoreActions( null );
+        Assert.assertEquals( 1, sql.length );
+        Assert.assertTrue( sql[0].startsWith( "SELECT" ) );
+        List results = q.getResultList();
+        Assert.assertNotNull( results );
+        Assert.assertEquals( 2, results.size() );
+    }
+
+    // @Test
+    public void testCreateProjectNotifier() throws StoreException
+    {
+        ProjectNotifier notifier = new ProjectNotifier();
+        notifier.setModelEncoding( "UTF-8" );
+        Assert.assertTrue( null == notifier.getId() );
+        notifier = getProjectNotifierStore().save( notifier );
+        Assert.assertTrue( null != notifier.getId() );
+        Assert.assertTrue( notifier.getId() > 0L );
+    }
+
+    private Store<ProjectNotifier, ProjectNotifierQuery> getProjectNotifierStore()
+    {
+        Store<ProjectNotifier, ProjectNotifierQuery> store = getStore( BEAN_REF__PROJECT_STORE );
+        return store;
+    }
+}

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/java/org/apache/maven/continuum/store/jpa/JpaStoreTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/resources/META-INF/spring-config.xml
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/resources/META-INF/spring-config.xml?rev=602031&r1=602030&r2=602031&view=diff
==============================================================================
--- maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/resources/META-INF/spring-config.xml (original)
+++ maven/continuum/branches/continuum-jpa/continuum-model-jpa/src/test/resources/META-INF/spring-config.xml Fri Dec  7 00:58:07 2007
@@ -30,6 +30,7 @@
     </property>
   </bean>
 
+  <!-- 
   <bean id="projectStoreTarget"
     class="org.apache.maven.continuum.store.jpa.JpaProjectStore">
     <property name="entityManagerFactory" ref="entityManagerFactory" />
@@ -70,6 +71,19 @@
     <property name="interceptorNames">
       <idref local="transactionInterceptor" />
     </property>
+  </bean>
+  -->
+
+  <bean id="projectStoreFactory"
+    class="org.apache.maven.continuum.store.jpa.JpaStoreFactory">
+  </bean>
+  
+   <bean id="projectStore"
+    class="org.apache.maven.continuum.store.jpa.JpaStore"
+    factory-bean="projectStoreFactory"
+    factory-method="createProjectStoreInstance"    
+    >    
+    <property name="entityManagerFactory" ref="entityManagerFactory" />
   </bean>
 
 </beans>