You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/04/09 23:28:31 UTC

svn commit: r526927 - in /maven/archiva/branches/archiva-jpox-database-refactor: archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ archiva-base/archiva-model/src/main/mdo/ archiva-database/src/main/java/org/apache/maven/archiva/d...

Author: joakime
Date: Mon Apr  9 14:28:30 2007
New Revision: 526927

URL: http://svn.apache.org/viewvc?view=rev&rev=526927
Log:
* More unit testing of the archiva-database.
* Added CompoundKey tag to help JdoAccess process compound keys more intelligently.
* Updates to keys to honor CompoundKey identity.


Added:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java   (with props)
Modified:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArtifactKey.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractProjectKey.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractVersionedKey.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArtifactKey.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArtifactKey.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArtifactKey.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractArtifactKey.java Mon Apr  9 14:28:30 2007
@@ -76,7 +76,8 @@
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
  */
-public class AbstractArtifactKey implements Serializable
+public class AbstractArtifactKey
+    implements CompoundKey, Serializable
 {
     /**
      * The Group ID. (JPOX Requires this remain public)
@@ -92,17 +93,17 @@
      * The Version. (JPOX Requires this remain public)
      */
     public String version = "";
-    
+
     /**
      * The Classifier. (JPOX Requires this remain public)
      */
-    public String classifier;
-    
+    public String classifier = "";
+
     /**
      * The Type. (JPOX Requires this remain public)
      */
-    public String type;
-    
+    public String type = "";
+
     /**
      * Default Constructor.  Required by JPOX.
      */
@@ -110,7 +111,7 @@
     {
         /* do nothing */
     }
-    
+
     /**
      * Key Based Constructor.  Required by JPOX.
      * 
@@ -119,19 +120,19 @@
     public AbstractArtifactKey( String key )
     {
         String parts[] = StringUtils.splitPreserveAllTokens( key, ":" );
-        groupId = parts[1];
-        artifactId = parts[2];
-        version = parts[3];
-        classifier = parts[4];
-        type = parts[5];
+        groupId = parts[0];
+        artifactId = parts[1];
+        version = parts[2];
+        classifier = parts[3];
+        type = parts[4];
     }
-    
+
     /**
      * Get the String representation of this object. - Required by JPOX.
      */
     public String toString()
     {
-        return StringUtils.join( new String[] { groupId, artifactId, version, classifier, type } );
+        return StringUtils.join( new String[] { groupId, artifactId, version, classifier, type }, ':' );
     }
 
     /**
@@ -158,19 +159,19 @@
         {
             return true;
         }
-        
+
         if ( !super.equals( obj ) )
         {
             return false;
         }
-        
+
         if ( getClass() != obj.getClass() )
         {
             return false;
         }
-        
+
         final AbstractArtifactKey other = (AbstractArtifactKey) obj;
-        
+
         if ( groupId == null )
         {
             if ( other.groupId != null )
@@ -182,7 +183,7 @@
         {
             return false;
         }
-        
+
         if ( artifactId == null )
         {
             if ( other.artifactId != null )
@@ -194,7 +195,7 @@
         {
             return false;
         }
-        
+
         if ( version == null )
         {
             if ( other.version != null )
@@ -206,7 +207,7 @@
         {
             return false;
         }
-        
+
         if ( classifier == null )
         {
             if ( other.classifier != null )
@@ -218,7 +219,7 @@
         {
             return false;
         }
-        
+
         if ( type == null )
         {
             if ( other.type != null )
@@ -230,7 +231,58 @@
         {
             return false;
         }
-        
+
         return true;
     }
+
+    public void setGroupId( String groupId )
+    {
+        if ( StringUtils.isBlank( groupId ) )
+        {
+            throw new IllegalArgumentException( "A blank Group ID is not allowed." );
+        }
+
+        this.groupId = groupId;
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        if ( StringUtils.isBlank( artifactId ) )
+        {
+            throw new IllegalArgumentException( "A blank Artifact ID is not allowed." );
+        }
+
+        this.artifactId = artifactId;
+    }
+
+    public void setVersion( String version )
+    {
+        if ( StringUtils.isBlank( artifactId ) )
+        {
+            throw new IllegalArgumentException( "A blank version is not allowed." );
+        }
+
+        this.version = version;
+    }
+
+    public void setClassifier( String classifier )
+    {
+        this.classifier = "";
+
+        if ( StringUtils.isNotBlank( classifier ) )
+        {
+            this.classifier = classifier;
+        }
+    }
+
+    public void setType( String type )
+    {
+        this.type = "";
+
+        if ( StringUtils.isNotBlank( type ) )
+        {
+            this.type = type;
+        }
+    }
+
 }

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractProjectKey.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractProjectKey.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractProjectKey.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractProjectKey.java Mon Apr  9 14:28:30 2007
@@ -77,7 +77,7 @@
  * @version $Id$
  */
 public class AbstractProjectKey
-    implements Serializable
+    implements CompoundKey, Serializable
 {
     /**
      * The Group ID. (JPOX Requires this remain public)
@@ -105,8 +105,8 @@
     public AbstractProjectKey( String key )
     {
         String parts[] = StringUtils.splitPreserveAllTokens( key, ":" );
-        groupId = parts[1];
-        artifactId = parts[2];
+        groupId = parts[0];
+        artifactId = parts[1];
     }
 
     /**

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractVersionedKey.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractVersionedKey.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractVersionedKey.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/AbstractVersionedKey.java Mon Apr  9 14:28:30 2007
@@ -76,7 +76,8 @@
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
  */
-public class AbstractVersionedKey implements Serializable
+public class AbstractVersionedKey
+    implements CompoundKey, Serializable
 {
     /**
      * The Group ID. (JPOX Requires this remain public)
@@ -92,7 +93,7 @@
      * The Version. (JPOX Requires this remain public)
      */
     public String version = "";
-    
+
     /**
      * Default Constructor.  Required by JPOX.
      */
@@ -100,7 +101,7 @@
     {
         /* do nothing */
     }
-    
+
     /**
      * Key Based Constructor.  Required by JPOX.
      * 
@@ -109,17 +110,17 @@
     public AbstractVersionedKey( String key )
     {
         String parts[] = StringUtils.splitPreserveAllTokens( key, ":" );
-        groupId = parts[1];
-        artifactId = parts[2];
-        version = parts[3];
+        groupId = parts[0];
+        artifactId = parts[1];
+        version = parts[2];
     }
-    
+
     /**
      * Get the String representation of this object. - Required by JPOX.
      */
     public String toString()
     {
-        return StringUtils.join( new String[] { groupId, artifactId, version } );
+        return StringUtils.join( new String[] { groupId, artifactId, version }, ':' );
     }
 
     /**
@@ -144,19 +145,19 @@
         {
             return true;
         }
-        
+
         if ( !super.equals( obj ) )
         {
             return false;
         }
-        
+
         if ( getClass() != obj.getClass() )
         {
             return false;
         }
-        
+
         final AbstractVersionedKey other = (AbstractVersionedKey) obj;
-        
+
         if ( groupId == null )
         {
             if ( other.groupId != null )
@@ -168,7 +169,7 @@
         {
             return false;
         }
-        
+
         if ( artifactId == null )
         {
             if ( other.artifactId != null )
@@ -180,7 +181,7 @@
         {
             return false;
         }
-        
+
         if ( version == null )
         {
             if ( other.version != null )
@@ -192,7 +193,7 @@
         {
             return false;
         }
-        
+
         return true;
     }
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java?view=auto&rev=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java Mon Apr  9 14:28:30 2007
@@ -0,0 +1,31 @@
+package org.apache.maven.archiva.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Tag for identifying a Compound Key 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface CompoundKey
+{
+    public String toString();
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/CompoundKey.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/mdo/archiva-base.xml?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/mdo/archiva-base.xml (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-model/src/main/mdo/archiva-base.xml Mon Apr  9 14:28:30 2007
@@ -225,7 +225,7 @@
           <identifier>true</identifier>
           <version>1.0.0+</version>
           <type>String</type>
-          <required>false</required>
+          <required>true</required>
           <description>
             The version of the repository content.
           </description>
@@ -406,7 +406,7 @@
           <identifier>true</identifier>
           <version>1.0.0+</version>
           <type>String</type>
-          <required>false</required>
+          <required>true</required>
           <description>
             The version of the repository content.
           </description>
@@ -621,7 +621,7 @@
           <identifier>true</identifier>
           <version>1.0.0+</version>
           <type>String</type>
-          <required>false</required>
+          <required>true</required>
           <description>
             The version of the repository content.
           </description>

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ProjectModelDAO.java Mon Apr  9 14:28:30 2007
@@ -57,7 +57,7 @@
     public ArchivaProjectModel getProjectModel( String groupId, String artifactId, String version )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
-    public List /*<ArchivaProjectModel>*/queryProjectModel( Constraint constraint )
+    public List /*<ArchivaProjectModel>*/queryProjectModels( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException;
 
     public ArchivaProjectModel saveProjectModel( ArchivaProjectModel model )

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java Mon Apr  9 14:28:30 2007
@@ -23,6 +23,7 @@
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.Constraint;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.model.CompoundKey;
 import org.codehaus.plexus.jdo.JdoFactory;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
@@ -299,7 +300,16 @@
                 pm.getFetchPlan().addGroup( fetchGroup );
             }
 
-            Object objectId = pm.newObjectIdInstance( clazz, id );
+            Object objectId = null;
+
+            if ( id instanceof CompoundKey )
+            {
+                objectId = pm.newObjectIdInstance( clazz, id.toString() );
+            }
+            else
+            {
+                objectId = pm.newObjectIdInstance( clazz, id );
+            }
 
             Object object = pm.getObjectById( objectId );
 
@@ -311,13 +321,15 @@
         }
         catch ( JDOObjectNotFoundException e )
         {
-            throw new ObjectNotFoundException( "Unable to find Database Object '" + id + "' of type " + clazz.getName()
-                + " using fetch-group '" + fetchGroup + "'", e, id );
+            throw new ObjectNotFoundException( "Unable to find Database Object [" + id + "] of type " + clazz.getName()
+                + " using " + ( ( fetchGroup == null ) ? "no fetch-group" : "a fetch-group of [" + fetchGroup + "]" ),
+                                               e, id );
         }
         catch ( JDOException e )
         {
-            throw new ArchivaDatabaseException( "Error in JDO during get of Database object id '" + id + "' of type "
-                + clazz.getName() + " using fetch-group '" + fetchGroup + "'", e );
+            throw new ArchivaDatabaseException( "Error in JDO during get of Database object id [" + id + "] of type "
+                + clazz.getName() + " using "
+                + ( ( fetchGroup == null ) ? "no fetch-group" : "a fetch-group of [" + fetchGroup + "]" ), e );
         }
         finally
         {

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAO.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAO.java Mon Apr  9 14:28:30 2007
@@ -26,6 +26,7 @@
 import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.model.ArchivaArtifactModel;
 import org.apache.maven.archiva.model.jpox.ArchivaArtifactModelKey;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -40,6 +41,7 @@
  * @plexus.component role-hint="jdo"
  */
 public class JdoArtifactDAO
+    extends AbstractLogEnabled
     implements ArtifactDAO
 {
     /**
@@ -60,6 +62,12 @@
         }
         catch ( ArchivaDatabaseException e )
         {
+            if ( !( e instanceof ObjectNotFoundException ) )
+            {
+                getLogger().warn(
+                                  "Unable to get artifact [" + groupId + ":" + artifactId + ":" + version + ":"
+                                      + classifier + ":" + type + "]: " + e.getMessage(), e );
+            }
             artifact = new ArchivaArtifact( groupId, artifactId, version, classifier, type );
         }
 
@@ -71,14 +79,14 @@
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
         ArchivaArtifactModelKey key = new ArchivaArtifactModelKey();
-        key.groupId = groupId;
-        key.artifactId = artifactId;
-        key.version = version;
-        key.classifier = classifier;
-        key.type = type;
+        key.setGroupId( groupId );
+        key.setArtifactId( artifactId );
+        key.setVersion( version );
+        key.setClassifier( classifier );
+        key.setType( type );
 
         ArchivaArtifactModel model = (ArchivaArtifactModel) jdo.getObjectById( ArchivaArtifactModel.class, key, null );
-        
+
         return new ArchivaArtifact( model );
     }
 

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java?view=diff&rev=526927&r1=526926&r2=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAO.java Mon Apr  9 14:28:30 2007
@@ -24,6 +24,7 @@
 import org.apache.maven.archiva.database.ObjectNotFoundException;
 import org.apache.maven.archiva.database.ProjectModelDAO;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.jpox.ArchivaProjectModelKey;
 
 import java.util.List;
 
@@ -45,36 +46,49 @@
 
     public ArchivaProjectModel createProjectModel( String groupId, String artifactId, String version )
     {
-        
-        return null;
+        ArchivaProjectModel model;
+
+        try
+        {
+            model = getProjectModel( groupId, artifactId, version );
+        }
+        catch ( ArchivaDatabaseException e )
+        {
+            model = new ArchivaProjectModel();
+            model.setGroupId( groupId );
+            model.setArtifactId( artifactId );
+            model.setVersion( version );
+        }
+
+        return model;
     }
 
     public ArchivaProjectModel getProjectModel( String groupId, String artifactId, String version )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        
-        return null;
+        ArchivaProjectModelKey key = new ArchivaProjectModelKey();
+        key.groupId = groupId;
+        key.artifactId = artifactId;
+        key.version = version;
+
+        return (ArchivaProjectModel) jdo.getObjectById( ArchivaProjectModel.class, key, null );
     }
 
-    public List queryProjectModel( Constraint constraint )
+    public List queryProjectModels( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        // TODO Auto-generated method stub
-        return null;
+        return jdo.getAllObjects( ArchivaProjectModel.class, constraint );
     }
 
     public ArchivaProjectModel saveProjectModel( ArchivaProjectModel model )
         throws ArchivaDatabaseException
     {
-        // TODO Auto-generated method stub
-        return null;
+        return (ArchivaProjectModel) jdo.saveObject( model );
     }
 
     public void deleteProjectModel( ArchivaProjectModel model )
         throws ArchivaDatabaseException
     {
-        // TODO Auto-generated method stub
-
+        jdo.removeObject( model );
     }
-
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java?view=auto&rev=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java Mon Apr  9 14:28:30 2007
@@ -0,0 +1,115 @@
+package org.apache.maven.archiva.database.jdo;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.jpox.ArchivaArtifactModelKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.spi.JDOImplHelper;
+
+/**
+ * JdoArtifactDAOTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class JdoArtifactDAOTest
+    extends AbstractArchivaDatabaseTestCase
+{
+    public void testArtifactKey()
+    {
+        Object o = JDOImplHelper.getInstance().newObjectIdInstance( ArchivaArtifactModel.class, "foo:bar:1.0::jar" );
+        assertNotNull( "Key should not be null.", o );
+        assertTrue( "Key should be an instance of " + ArchivaArtifactModelKey.class.getName(),
+                    ( o instanceof ArchivaArtifactModelKey ) );
+
+        ArchivaArtifactModelKey key = (ArchivaArtifactModelKey) o;
+        assertEquals( "foo", key.groupId );
+        assertEquals( "bar", key.artifactId );
+        assertEquals( "1.0", key.version );
+        assertEquals( "", key.classifier );
+        assertEquals( "jar", key.type );
+    }
+
+    public void testArtifactCRUD()
+        throws Exception
+    {
+        ArtifactDAO artiDao = dao.getArtifactDAO();
+
+        // Create it
+        ArchivaArtifact artifact = artiDao.createArtifact( "org.apache.maven.archiva", "archiva-test-module", "1.0",
+                                                           "", "jar" );
+        assertNotNull( artifact );
+
+        // Set some mandatory values
+        artifact.getModel().setLastModified( new Date() );
+        artifact.getModel().setOrigin( "test" );
+
+        // Save it.
+        ArchivaArtifact savedArtifact = artiDao.saveArtifact( artifact );
+        assertNotNull( savedArtifact );
+        String savedKeyId = JDOHelper.getObjectId( savedArtifact.getModel() ).toString();
+        assertEquals( "org.apache.maven.archiva:archiva-test-module:1.0::jar", savedKeyId );
+
+        // Test that something has been saved.
+        List artifacts = artiDao.queryArtifacts( null );
+        assertNotNull( artifacts );
+        assertEquals( 1, artifacts.size() );
+
+        // Test that retrieved object is what we expect.
+        ArchivaArtifact firstArtifact = (ArchivaArtifact) artifacts.get( 0 );
+        assertNotNull( firstArtifact );
+        assertEquals( "org.apache.maven.archiva", firstArtifact.getGroupId() );
+        assertEquals( "archiva-test-module", firstArtifact.getArtifactId() );
+        assertEquals( "1.0", firstArtifact.getVersion() );
+        assertEquals( "", firstArtifact.getClassifier() );
+        assertEquals( "jar", firstArtifact.getType() );
+
+        // Change value and save.
+        savedArtifact.getModel().setOrigin( "changed" );
+        artiDao.saveArtifact( savedArtifact );
+
+        // Test that only 1 object is saved.
+        assertEquals( 1, artiDao.queryArtifacts( null ).size() );
+
+        // Get the specific artifact.
+        ArchivaArtifact actualArtifact = artiDao.getArtifact( "org.apache.maven.archiva", "archiva-test-module", "1.0",
+                                                              null, "jar" );
+        assertNotNull( actualArtifact );
+
+        // Test expected values.
+        assertEquals( "archiva-test-module", actualArtifact.getArtifactId() );
+        assertEquals( "changed", actualArtifact.getModel().getOrigin() );
+
+        // Test that only 1 object is saved.
+        assertEquals( 1, artiDao.queryArtifacts( null ).size() );
+
+        // Delete object.
+        artiDao.deleteArtifact( actualArtifact );
+        assertEquals( 0, artiDao.queryArtifacts( null ).size() );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoArtifactDAOTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java?view=auto&rev=526927
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java Mon Apr  9 14:28:30 2007
@@ -0,0 +1,111 @@
+package org.apache.maven.archiva.database.jdo;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ProjectModelDAO;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.jpox.ArchivaProjectModelKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.jdo.JDOHelper;
+import javax.jdo.spi.JDOImplHelper;
+
+/**
+ * JdoProjectModelDAOTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class JdoProjectModelDAOTest
+    extends AbstractArchivaDatabaseTestCase
+{
+    public void testProjectModelKey()
+    {
+        Object o = JDOImplHelper.getInstance().newObjectIdInstance( ArchivaProjectModel.class, "foo:bar:1.0" );
+        assertNotNull( "Key should not be null.", o );
+        assertTrue( "Key should be an instance of " + ArchivaProjectModelKey.class.getName(),
+                    ( o instanceof ArchivaProjectModelKey ) );
+
+        ArchivaProjectModelKey key = (ArchivaProjectModelKey) o;
+        assertEquals( "foo", key.groupId );
+        assertEquals( "bar", key.artifactId );
+        assertEquals( "1.0", key.version );
+    }
+
+    public void testProjectModelCRUD()
+        throws Exception
+    {
+        ProjectModelDAO projectDao = dao.getProjectModelDAO();
+
+        // Create it
+        ArchivaProjectModel model = projectDao.createProjectModel( "org.apache.maven.archiva", "archiva-test-module",
+                                                                   "1.0" );
+        assertNotNull( model );
+
+        // Set some mandatory values
+        model.setPackaging( "pom" );
+        model.setWhenIndexed( new Date() );
+        model.setOrigin( "test" );
+
+        // Save it.
+        ArchivaProjectModel savedModel = projectDao.saveProjectModel( model );
+        assertNotNull( savedModel );
+        String savedKeyId = JDOHelper.getObjectId( savedModel ).toString();
+        assertEquals( "org.apache.maven.archiva:archiva-test-module:1.0", savedKeyId );
+
+        // Test that something has been saved.
+        List projects = projectDao.queryProjectModels( null );
+        assertNotNull( projects );
+        assertEquals( 1, projects.size() );
+
+        // Test that retrieved object is what we expect.
+        ArchivaProjectModel firstModel = (ArchivaProjectModel) projects.get( 0 );
+        assertNotNull( firstModel );
+        assertEquals( "org.apache.maven.archiva", firstModel.getGroupId() );
+        assertEquals( "archiva-test-module", firstModel.getArtifactId() );
+        assertEquals( "1.0", firstModel.getVersion() );
+
+        // Change value and save.
+        savedModel.setOrigin( "changed" );
+        projectDao.saveProjectModel( savedModel );
+
+        // Test that only 1 object is saved.
+        assertEquals( 1, projectDao.queryProjectModels( null ).size() );
+
+        // Get the specific artifact.
+        ArchivaProjectModel actualModel = projectDao.getProjectModel( "org.apache.maven.archiva",
+                                                                      "archiva-test-module", "1.0" );
+        assertNotNull( actualModel );
+
+        // Test expected values.
+        assertEquals( "archiva-test-module", actualModel.getArtifactId() );
+        assertEquals( "changed", actualModel.getOrigin() );
+
+        // Test that only 1 object is saved.
+        assertEquals( 1, projectDao.queryProjectModels( null ).size() );
+
+        // Delete object.
+        projectDao.deleteProjectModel( actualModel );
+        assertEquals( 0, projectDao.queryProjectModels( null ).size() );
+    }
+}

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain