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/20 22:44:34 UTC

svn commit: r530911 [1/2] - in /maven/archiva/branches/archiva-jpox-database-refactor: archiva-database/src/main/java/org/apache/maven/archiva/database/ archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/ archiva-database/src/mai...

Author: joakime
Date: Fri Apr 20 13:44:32 2007
New Revision: 530911

URL: http://svn.apache.org/viewvc?view=rev&rev=530911
Log:
* Splitting up Constraint into DeclarativeConstraint and SimpleConstraint.
* Adding ArchivaDAO.query(SimpleConstraint).
* Adding UniqueGroupIdConstraint.
* Adding UniqueArtifactId Constraint.
* Adding UniqueVersionConstraint.
* Adding RepositoryBrowsing component.
* Refactoring webapp's BrowseAction groupId filtering into GroupIdFilter class.
* Refactoring BrowseAction to utilize new RepositoryBrowsing component.


Added:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/SimpleConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/BrowsingResults.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/GroupIdFilter.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java
      - copied, changed from r530396, maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractSimpleConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraint.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/AllTests.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraintTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraintTest.java   (with props)
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java   (with props)
Removed:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractConstraint.java
Modified:
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/Constraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArchivaRepositoryByUrlConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsBySha1ChecksumConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsRelatedConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderArtifactsByAgeConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderSnapshotArtifactsByAgeConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RecentArtifactsByAgeConstraint.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RepositoryProblemByTypeConstraint.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/JdoArchivaDAO.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
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryProblemDAO.java
    maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/ArchivaDAO.java Fri Apr 20 13:44:32 2007
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.util.List;
+
 /**
  * ArchivaDAO - The interface for all content within the database.
  *
@@ -29,11 +31,19 @@
 {
     public static final String ROLE = ArchivaDAO.class.getName();
 
+    /**
+     * Perform a simple query against the database.
+     * 
+     * @param constraint the constraint to use.
+     * @return the List of results.
+     */
+    List query( SimpleConstraint constraint );
+
     ArtifactDAO getArtifactDAO();
 
     ProjectModelDAO getProjectModelDAO();
 
     RepositoryDAO getRepositoryDAO();
-    
+
     RepositoryProblemDAO getRepositoryProblemDAO();
 }

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/Constraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/Constraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/Constraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/Constraint.java Fri Apr 20 13:44:32 2007
@@ -1,10 +1,32 @@
 package org.apache.maven.archiva.database;
 
+/*
+ * 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.
+ */
+
+
 /**
- * Constraint 
+ * Constraint - a generic object for dealing with database constraints. 
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
+ * @see DeclarativeConstraint
+ * @see SimpleConstraint
  */
 public interface Constraint
 {
@@ -18,52 +40,4 @@
      * @return the fetch limits on the object. (can be null) (O/RM specific)
      */
     public String getFetchLimits();
-
-    /**
-     * Get the SELECT WHERE (condition) value for the constraint.
-     * 
-     * @return the equivalent of the SELECT WHERE (condition) value for this constraint. (can be null)
-     */
-    public String getWhereCondition();
-
-    /**
-     * Get the sort column name.
-     * 
-     * @return the sort column name. (can be null)
-     */
-    public String getSortColumn();
-
-    /**
-     * Get the sort direction name.
-     * 
-     * @return the sort direction name. ("ASC" or "DESC") (only valid if {@link #getSortColumn()} is specified.)
-     */
-    public String getSortDirection();
-    
-    /**
-     * Get the declared imports used for this query. (optional)
-     * 
-     * NOTE: This is DAO implementation specific.
-     * 
-     * @return the imports. (can be null)
-     */
-    public String[] getDeclaredImports();
-    
-    /**
-     * Get the declared parameters used for this query. (optional)
-     * 
-     * NOTE: This is DAO implementation specific.
-     * 
-     * @return the parameters. (can be null)
-     */
-    public String[] getDeclaredParameters();
-    
-    /**
-     * Get the parameters used for this query. (required if using {@link #getDeclaredParameters()} )
-     * 
-     * NOTE: This is DAO implementation specific.
-     * 
-     * @return the parameters. (can be null)
-     */
-    public Object[] getParameters();
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,77 @@
+package org.apache.maven.archiva.database;
+
+/*
+ * 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.
+ */
+
+/**
+ * DeclarativeConstraint 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface DeclarativeConstraint extends Constraint
+{
+    /**
+     * Get the declared imports used for this query. (optional)
+     * 
+     * NOTE: This is DAO implementation specific.
+     * 
+     * @return the imports. (can be null)
+     */
+    public abstract String[] getDeclaredImports();
+
+    /**
+     * Get the declared parameters used for this query. (optional)
+     * 
+     * NOTE: This is DAO implementation specific.
+     * 
+     * @return the parameters. (can be null)
+     */
+    public abstract String[] getDeclaredParameters();
+
+    /**
+     * Get the parameters used for this query. (required if using {@link #getDeclaredParameters()} )
+     * 
+     * NOTE: This is DAO implementation specific.
+     * 
+     * @return the parameters. (can be null)
+     */
+    public abstract Object[] getParameters();
+
+    /**
+     * Get the sort direction name.
+     * 
+     * @return the sort direction name. ("ASC" or "DESC") (only valid if {@link #getSortColumn()} is specified.)
+     */
+    public abstract String getSortDirection();
+
+    /**
+     * Get the sort column name.
+     * 
+     * @return the sort column name. (can be null)
+     */
+    public abstract String getSortColumn();
+
+    /**
+     * Get the SELECT WHERE (condition) value for the constraint.
+     * 
+     * @return the equivalent of the SELECT WHERE (condition) value for this constraint. (can be null)
+     */
+    public abstract String getWhereCondition();
+}
\ No newline at end of file

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/SimpleConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/SimpleConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/SimpleConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/SimpleConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,60 @@
+package org.apache.maven.archiva.database;
+
+/*
+ * 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.
+ */
+
+/**
+ * SimpleConstraint 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface SimpleConstraint extends Constraint
+{
+    /**
+     * Get the parameters used for this query. (required if using parameterized SQL)
+     * 
+     * NOTE: This is DAO implementation specific.
+     * 
+     * @return the parameters. (can be null)
+     */
+    public Object[] getParameters();
+
+    /**
+     * Get the SELECT query value for the constraint.
+     * 
+     * @return the SELECT value for this constraint. (can be null)
+     */
+    public abstract String getSelectSql();
+
+    /**
+     * For simple Constraints the results class must be specified.
+     * 
+     * @return the result class.
+     */
+    public Class getResultClass();
+    
+    /**
+     * When working with result classes that are not persistable,
+     * it is advisable to tell the underlying DAO to not do the persistable related efforts.
+     * 
+     * @return true if result classes are persistable.
+     */
+    public boolean isResultsPersistable();
+}
\ No newline at end of file

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/BrowsingResults.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/BrowsingResults.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/BrowsingResults.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/BrowsingResults.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,114 @@
+package org.apache.maven.archiva.database.browsing;
+
+/*
+ * 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.commons.collections.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * BrowsingResults 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BrowsingResults
+{
+    private String selectedGroupId;
+    
+    private String selectedArtifactId;
+
+    private List groupIds = null;
+
+    private List artifacts = null;
+
+    private List versions = null;
+
+    public BrowsingResults()
+    {
+        /* do nothing, this is the results of the root */
+    }
+
+    public BrowsingResults( String groupId )
+    {
+        this.selectedGroupId = groupId;
+    }
+    
+    public BrowsingResults( String groupId, String artifactId )
+    {
+        this.selectedGroupId = groupId;
+        this.selectedArtifactId = artifactId;
+    }
+
+    public List getArtifacts()
+    {
+        return artifacts;
+    }
+
+    public List getGroupIds()
+    {
+        return groupIds;
+    }
+
+    public String getSelectedArtifactId()
+    {
+        return selectedArtifactId;
+    }
+
+    public String getSelectedGroupId()
+    {
+        return selectedGroupId;
+    }
+
+    public List getVersions()
+    {
+        return versions;
+    }
+
+    public boolean hasArtifacts()
+    {
+        return CollectionUtils.isNotEmpty( artifacts );
+    }
+
+    public boolean hasGroupIds()
+    {
+        return CollectionUtils.isNotEmpty( groupIds );
+    }
+
+    public boolean hasVersions()
+    {
+        return CollectionUtils.isNotEmpty( versions );
+    }
+
+    public void setArtifacts( List artifacts )
+    {
+        this.artifacts = artifacts;
+    }
+
+    public void setGroupIds( List groupIds )
+    {
+        this.groupIds = groupIds;
+    }
+
+    public void setVersions( List versions )
+    {
+        this.versions = versions;
+    }
+}

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.database.browsing;
+
+/*
+ * 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.ArchivaDAO;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint;
+import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint;
+import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+import java.util.List;
+
+/**
+ * DefaultRepositoryBrowsing 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.archiva.database.browsing.RepositoryBrowsing"
+ *                   role-hint="default"
+ */
+public class DefaultRepositoryBrowsing
+    extends AbstractLogEnabled
+    implements RepositoryBrowsing
+{
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaDAO dao;
+
+    public BrowsingResults getRoot()
+    {
+        List groups = dao.query( new UniqueGroupIdConstraint() );
+
+        BrowsingResults results = new BrowsingResults();
+
+        results.setGroupIds( GroupIdFilter.filterGroups( groups ) );
+
+        return results;
+    }
+
+    public BrowsingResults selectArtifactId( String groupId, String artifactId )
+    {
+        // List groups = dao.query( new UniqueGroupIdConstraint( groupId ) );
+        // List artifacts = dao.query( new UniqueArtifactIdConstraint( groupId ) );
+        List versions = dao.query( new UniqueVersionConstraint( groupId, artifactId ) );
+
+        BrowsingResults results = new BrowsingResults( groupId, artifactId );
+
+        // results.setGroupIds( groups );
+        // results.setArtifacts( artifacts );
+        results.setArtifacts( versions );
+
+        return results;
+    }
+
+    public BrowsingResults selectGroupId( String groupId )
+    {
+        List groups = dao.query( new UniqueGroupIdConstraint( groupId ) );
+        List artifacts = dao.query( new UniqueArtifactIdConstraint( groupId ) );
+
+        BrowsingResults results = new BrowsingResults( groupId );
+        results.setGroupIds( groups );
+        results.setArtifacts( artifacts );
+
+        return results;
+    }
+
+    public ArchivaProjectModel selectVersion( String groupId, String artifactId, String version )
+        throws ObjectNotFoundException, ArchivaDatabaseException
+    {
+        ArchivaProjectModel model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
+
+        // TODO: if the model isn't found. load it from disk, insert into DB, and then return it.
+
+        return model;
+    }
+}

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/GroupIdFilter.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/GroupIdFilter.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/GroupIdFilter.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/GroupIdFilter.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,176 @@
+package org.apache.maven.archiva.database.browsing;
+
+/*
+ * 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 java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+/**
+ * GroupIdFilter - utility methods for filtering groupIds. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class GroupIdFilter
+{
+    private static final String GROUP_SEPARATOR = ".";
+
+    /**
+     * <p>
+     * Filter out excessive groupId naming. (to provide a tree-ish view of the list of groupIds).
+     * </p>
+     * 
+     * <pre>
+     *  // Input List
+     *  commons-lang
+     *  com.jsch
+     *  org.apache.apache
+     *  org.apache.maven
+     *  org.codehaus.modello
+     *  // Filtered List
+     *  commons-lang
+     *  com.jsch
+     *  org
+     * </pre>
+     * 
+     * <pre>
+     *  // Input List
+     *  commons-lang
+     *  commons-io
+     *  commons-pool
+     *  com.jsch
+     *  com.jsch.lib
+     *  com.jsch.providers
+     *  org.apache.apache
+     *  org.apache.maven
+     *  org.apache.maven.archiva
+     *  org.apache.maven.shared
+     *  // Filtered List
+     *  commons-lang
+     *  commons-io
+     *  commons-pool
+     *  com.jsch
+     *  org.apache
+     * </pre>
+     * 
+     * @param groups the list of groupIds.
+     * @return
+     */
+    public static List filterGroups( List groups )
+    {
+        GroupTreeNode tree = buildGroupTree( groups );
+        return collateGroups( tree );
+    }
+
+    public static GroupTreeNode buildGroupTree( List groups )
+    {
+        GroupTreeNode rootNode = new GroupTreeNode();
+
+        // build a tree structure
+        for ( Iterator i = groups.iterator(); i.hasNext(); )
+        {
+            String groupId = (String) i.next();
+
+            StringTokenizer tok = new StringTokenizer( groupId, GROUP_SEPARATOR );
+
+            GroupTreeNode node = rootNode;
+
+            while ( tok.hasMoreTokens() )
+            {
+                String part = tok.nextToken();
+
+                if ( !node.getChildren().containsKey( part ) )
+                {
+                    GroupTreeNode newNode = new GroupTreeNode( part, node );
+                    node.addChild( newNode );
+                    node = newNode;
+                }
+                else
+                {
+                    node = (GroupTreeNode) node.getChildren().get( part );
+                }
+            }
+        }
+
+        return rootNode;
+    }
+
+    private static List collateGroups( GroupTreeNode rootNode )
+    {
+        List groups = new ArrayList();
+        for ( Iterator i = rootNode.getChildren().values().iterator(); i.hasNext(); )
+        {
+            GroupTreeNode node = (GroupTreeNode) i.next();
+
+            while ( node.getChildren().size() == 1 )
+            {
+                node = (GroupTreeNode) node.getChildren().values().iterator().next();
+            }
+
+            groups.add( node.getFullName() );
+        }
+        return groups;
+    }
+
+    private static class GroupTreeNode
+    {
+        private final String name;
+
+        private final String fullName;
+
+        private final Map children = new TreeMap();
+
+        GroupTreeNode()
+        {
+            name = null;
+            fullName = null;
+        }
+
+        GroupTreeNode( String name, GroupTreeNode parent )
+        {
+            this.name = name;
+            this.fullName = parent.fullName != null ? parent.fullName + GROUP_SEPARATOR + name : name;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public String getFullName()
+        {
+            return fullName;
+        }
+
+        public Map getChildren()
+        {
+            return children;
+        }
+
+        public void addChild( GroupTreeNode newNode )
+        {
+            children.put( newNode.name, newNode );
+        }
+    }
+}

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.database.browsing;
+
+/*
+ * 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.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+
+/**
+ * RepositoryBrowsing 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface RepositoryBrowsing
+{
+    public BrowsingResults getRoot();
+
+    public BrowsingResults selectGroupId( String groupId );
+
+    public BrowsingResults selectArtifactId( String groupId, String artifactId );
+
+    public ArchivaProjectModel selectVersion( String groupId, String artifactId, String version )
+        throws ObjectNotFoundException, ArchivaDatabaseException;
+}

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

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

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

Copied: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java (from r530396, maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractConstraint.java)
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java?view=diff&rev=530911&p1=maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractConstraint.java&r1=530396&p2=maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java Fri Apr 20 13:44:32 2007
@@ -20,18 +20,21 @@
  */
 
 import org.apache.maven.archiva.database.Constraint;
+import org.apache.maven.archiva.database.DeclarativeConstraint;
 
 /**
- * AbstractConstraint 
+ * AbstractDeclarativeConstraint 
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
  */
-public abstract class AbstractConstraint
-    implements Constraint
+public abstract class AbstractDeclarativeConstraint
+    implements DeclarativeConstraint
 {
     protected String[] declImports;
+
     protected String[] declParams;
+
     protected Object[] params;
 
     public String getFetchLimits()
@@ -48,7 +51,7 @@
     {
         return declParams;
     }
-    
+
     public Object[] getParameters()
     {
         return params;
@@ -58,8 +61,4 @@
     {
         return Constraint.ASCENDING;
     }
-
-    public abstract String getSortColumn();
-
-    public abstract String getWhereCondition();
 }

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractSimpleConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractSimpleConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractSimpleConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractSimpleConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,49 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.SimpleConstraint;
+
+/**
+ * Simple Constraint abstract for working with nearly-raw SQL strings. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractSimpleConstraint
+    implements SimpleConstraint
+{
+    protected Object[] params;
+    
+    public Object[] getParameters()
+    {
+        return params;
+    }
+
+    public String getFetchLimits()
+    {
+        return null;
+    }
+
+    public boolean isResultsPersistable()
+    {
+        return false;
+    }
+}

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

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

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

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArchivaRepositoryByUrlConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArchivaRepositoryByUrlConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArchivaRepositoryByUrlConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArchivaRepositoryByUrlConstraint.java Fri Apr 20 13:44:32 2007
@@ -9,7 +9,7 @@
  * @version $Id$
  */
 public class ArchivaRepositoryByUrlConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereCondition;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsBySha1ChecksumConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsBySha1ChecksumConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsBySha1ChecksumConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsBySha1ChecksumConstraint.java Fri Apr 20 13:44:32 2007
@@ -28,7 +28,7 @@
  * @version $Id$
  */
 public class ArtifactsBySha1ChecksumConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsProcessedConstraint.java Fri Apr 20 13:44:32 2007
@@ -30,7 +30,7 @@
  * @version $Id$
  */
 public class ArtifactsProcessedConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsRelatedConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsRelatedConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsRelatedConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ArtifactsRelatedConstraint.java Fri Apr 20 13:44:32 2007
@@ -29,7 +29,7 @@
  * @version $Id$
  */
 public class ArtifactsRelatedConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderArtifactsByAgeConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderArtifactsByAgeConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderArtifactsByAgeConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderArtifactsByAgeConstraint.java Fri Apr 20 13:44:32 2007
@@ -31,7 +31,7 @@
  * @version $Id$
  */
 public class OlderArtifactsByAgeConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderSnapshotArtifactsByAgeConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderSnapshotArtifactsByAgeConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderSnapshotArtifactsByAgeConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/OlderSnapshotArtifactsByAgeConstraint.java Fri Apr 20 13:44:32 2007
@@ -31,7 +31,7 @@
  * @version $Id$
  */
 public class OlderSnapshotArtifactsByAgeConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RecentArtifactsByAgeConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RecentArtifactsByAgeConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RecentArtifactsByAgeConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RecentArtifactsByAgeConstraint.java Fri Apr 20 13:44:32 2007
@@ -31,7 +31,7 @@
  * @version $Id$
  */
 public class RecentArtifactsByAgeConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RepositoryProblemByTypeConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RepositoryProblemByTypeConstraint.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RepositoryProblemByTypeConstraint.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/RepositoryProblemByTypeConstraint.java Fri Apr 20 13:44:32 2007
@@ -28,7 +28,7 @@
  * @version $Id$
  */
 public class RepositoryProblemByTypeConstraint
-    extends AbstractConstraint
+    extends AbstractDeclarativeConstraint
     implements Constraint
 {
     private String whereClause;

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,60 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.Constraint;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+
+/**
+ * Obtain a set of unique ArtifactIds for the specified groupId.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueArtifactIdConstraint
+    extends AbstractSimpleConstraint
+    implements Constraint
+{
+    private String sql;
+
+    /**
+     * Obtain a set of unique ArtifactIds for the specified groupId.
+     * 
+     * @param groupId the groupId to search for artifactIds within.
+     */
+    public UniqueArtifactIdConstraint( String groupId )
+    {
+        sql = "SELECT artifactId FROM " + ArchivaArtifactModel.class.getName()
+            + " WHERE groupId == selectedGroupId PARAMETERS String selectedGroupId"
+            + " GROUP BY artifactId ORDER BY artifactId ASCENDING";
+
+        super.params = new Object[] { groupId };
+    }
+
+    public Class getResultClass()
+    {
+        return String.class;
+    }
+
+    public String getSelectSql()
+    {
+        return sql;
+    }
+}

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,62 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.Constraint;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+
+/**
+ * UniqueGroupIdConstraint 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueGroupIdConstraint
+    extends AbstractSimpleConstraint
+    implements Constraint
+{
+    private String sql;
+
+    public UniqueGroupIdConstraint()
+    {
+        /* this assumes search for no groupId prefix */
+        sql = "SELECT groupId FROM " + ArchivaArtifactModel.class.getName()
+            + " GROUP BY groupId ORDER BY groupId ASCENDING";
+    }
+
+    public UniqueGroupIdConstraint( String groupIdPrefix )
+    {
+        sql = "SELECT groupId FROM " + ArchivaArtifactModel.class.getName()
+            + " WHERE groupId.startsWith(groupIdPrefix) PARAMETERS String groupIdPrefix"
+            + " GROUP BY groupId ORDER BY groupId ASCENDING";
+
+        super.params = new Object[] { groupIdPrefix };
+    }
+
+    public Class getResultClass()
+    {
+        return String.class;
+    }
+
+    public String getSelectSql()
+    {
+        return sql;
+    }
+}

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

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraint.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraint.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraint.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraint.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.database.constraints;
+
+/*
+ * 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.commons.lang.StringUtils;
+import org.apache.maven.archiva.database.Constraint;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+
+/**
+ * Obtain the list of version's for specific GroupId and ArtifactId.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueVersionConstraint
+    extends AbstractSimpleConstraint
+    implements Constraint
+{
+    private String sql;
+
+    /**
+     * Obtain the list of version's for specific GroupId and ArtifactId.
+     * 
+     * @param groupId the selected groupId.
+     * @param artifactId the selected artifactId.
+     */
+    public UniqueVersionConstraint( String groupId, String artifactId )
+    {
+        if ( StringUtils.isBlank( groupId ) )
+        {
+            throw new IllegalArgumentException( "A blank groupId is not allowed." );
+        }
+
+        if ( StringUtils.isBlank( artifactId ) )
+        {
+            throw new IllegalArgumentException( "A blank artifactId is not allowed." );
+        }
+
+        sql = "SELECT version FROM " + ArchivaArtifactModel.class.getName()
+            + " WHERE groupId == selectedGroupId && artifactId == selectedArtifactId"
+            + " PARAMETERS String selectedGroupId, String selectedArtifactId"
+            + " GROUP BY version ORDER BY version ASCENDING";
+
+        super.params = new Object[] { groupId, artifactId };
+    }
+
+    public Class getResultClass()
+    {
+        return String.class;
+    }
+
+    public String getSelectSql()
+    {
+        return sql;
+    }
+}

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

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

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

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=530911&r1=530910&r2=530911
==============================================================================
--- 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 Fri Apr 20 13:44:32 2007
@@ -22,13 +22,17 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.Constraint;
+import org.apache.maven.archiva.database.DeclarativeConstraint;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.database.SimpleConstraint;
+import org.apache.maven.archiva.database.constraints.AbstractSimpleConstraint;
 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;
 
 import java.io.PrintStream;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.jdo.Extent;
@@ -167,10 +171,10 @@
 
     public List getAllObjects( Class clazz )
     {
-        return getAllObjects( clazz, null );
+        return queryObjects( clazz, null );
     }
 
-    public List getAllObjects( Class clazz, Constraint constraint )
+    public List queryObjects( Class clazz, Constraint constraint )
     {
         PersistenceManager pm = getPersistenceManager();
         Transaction tx = pm.currentTransaction();
@@ -179,93 +183,26 @@
         {
             tx.begin();
 
-            Extent extent = pm.getExtent( clazz, true );
-
-            Query query = pm.newQuery( extent );
-
             List result = null;
 
             if ( constraint != null )
             {
-                if ( constraint.getSortColumn() != null )
-                {
-                    String ordering = constraint.getSortColumn();
-
-                    if ( constraint.getSortDirection() != null )
-                    {
-                        ordering += " " + constraint.getSortDirection();
-                    }
-
-                    query.setOrdering( ordering );
-                }
-
-                if ( constraint.getFetchLimits() != null )
-                {
-                    pm.getFetchPlan().addGroup( constraint.getFetchLimits() );
-                }
-
-                if ( constraint.getWhereCondition() != null )
-                {
-                    query.setFilter( constraint.getWhereCondition() );
-                }
-
-                if ( constraint.getDeclaredImports() != null )
+                if ( constraint instanceof DeclarativeConstraint )
                 {
-                    for ( int i = 0; i < constraint.getDeclaredImports().length; i++ )
-                    {
-                        String qimport = constraint.getDeclaredImports()[i];
-                        query.declareImports( qimport );
-                    }
+                    result = processConstraint( pm, clazz, (DeclarativeConstraint) constraint );
                 }
-
-                if ( constraint.getDeclaredParameters() != null )
+                else if ( constraint instanceof AbstractSimpleConstraint )
                 {
-                    if ( constraint.getParameters() == null )
-                    {
-                        throw new JDOException( "Unable to use query, there are declared parameters, "
-                            + "but no parameter objects to use." );
-                    }
-
-                    if ( constraint.getParameters().length != constraint.getDeclaredParameters().length )
-                    {
-                        throw new JDOException( "Unable to use query, there are <"
-                            + constraint.getDeclaredParameters().length + "> declared parameters, yet there are <"
-                            + constraint.getParameters().length + "> parameter objects to use.  This should be equal." );
-                    }
-
-                    for ( int i = 0; i < constraint.getDeclaredParameters().length; i++ )
-                    {
-                        String declaredParam = constraint.getDeclaredParameters()[i];
-                        query.declareParameters( declaredParam );
-                    }
-
-                    switch ( constraint.getParameters().length )
-                    {
-                        case 1:
-                            result = (List) query.execute( constraint.getParameters()[0] );
-                            break;
-                        case 2:
-                            result = (List) query
-                                .execute( constraint.getParameters()[0], constraint.getParameters()[1] );
-                            break;
-                        case 3:
-                            result = (List) query
-                                .execute( constraint.getParameters()[0], constraint.getParameters()[1], constraint
-                                    .getParameters()[2] );
-                            break;
-                        default:
-                            throw new JDOException( "Unable to use more than 3 parameters." );
-                    }
+                    result = processConstraint( pm, (SimpleConstraint) constraint );
                 }
                 else
                 {
-                    // Process unparameterized query.
-                    result = (List) query.execute();
+                    result = processUnconstrained( pm, clazz );
                 }
             }
             else
             {
-                result = (List) query.execute();
+                result = processUnconstrained( pm, clazz );
             }
 
             result = (List) pm.detachCopyAll( result );
@@ -277,6 +214,150 @@
         finally
         {
             rollbackIfActive( tx );
+        }
+    }
+
+    public List queryObjects( SimpleConstraint constraint )
+    {
+        PersistenceManager pm = getPersistenceManager();
+        Transaction tx = pm.currentTransaction();
+
+        try
+        {
+            tx.begin();
+
+            List result = processConstraint( pm, constraint );
+
+            // Only detach if results are known to be persistable.
+            if ( constraint.isResultsPersistable() )
+            {
+                result = (List) pm.detachCopyAll( result );
+            }
+            else
+            {
+                List copiedResults = new ArrayList();
+                copiedResults.addAll( result );
+                result = copiedResults;
+            }
+
+            tx.commit();
+
+            return result;
+        }
+        finally
+        {
+            rollbackIfActive( tx );
+        }
+    }
+
+    private List processUnconstrained( PersistenceManager pm, Class clazz )
+    {
+        Extent extent = pm.getExtent( clazz, true );
+        Query query = pm.newQuery( extent );
+        return (List) query.execute();
+    }
+
+    private List processConstraint( PersistenceManager pm, SimpleConstraint constraint )
+    {
+        Query query = pm.newQuery( constraint.getSelectSql() );
+
+        if ( constraint.getResultClass() == null )
+        {
+            throw new IllegalStateException( "Unable to use a SimpleConstraint with a null result class." );
+        }
+
+        query.setResultClass( constraint.getResultClass() );
+
+        if ( constraint.getFetchLimits() != null )
+        {
+            pm.getFetchPlan().addGroup( constraint.getFetchLimits() );
+        }
+
+        if ( constraint.getParameters() != null )
+        {
+            return processParameterizedQuery( query, constraint.getParameters() );
+        }
+
+        return (List) query.execute();
+    }
+
+    private List processConstraint( PersistenceManager pm, Class clazz, DeclarativeConstraint constraint )
+    {
+        Extent extent = pm.getExtent( clazz, true );
+        Query query = pm.newQuery( extent );
+
+        if ( constraint.getSortColumn() != null )
+        {
+            String ordering = constraint.getSortColumn();
+
+            if ( constraint.getSortDirection() != null )
+            {
+                ordering += " " + constraint.getSortDirection();
+            }
+
+            query.setOrdering( ordering );
+        }
+
+        if ( constraint.getFetchLimits() != null )
+        {
+            pm.getFetchPlan().addGroup( constraint.getFetchLimits() );
+        }
+
+        if ( constraint.getWhereCondition() != null )
+        {
+            query.setFilter( constraint.getWhereCondition() );
+        }
+
+        if ( constraint.getDeclaredImports() != null )
+        {
+            for ( int i = 0; i < constraint.getDeclaredImports().length; i++ )
+            {
+                String qimport = constraint.getDeclaredImports()[i];
+                query.declareImports( qimport );
+            }
+        }
+
+        if ( constraint.getDeclaredParameters() != null )
+        {
+            if ( constraint.getParameters() == null )
+            {
+                throw new JDOException( "Unable to use query, there are declared parameters, "
+                    + "but no parameter objects to use." );
+            }
+
+            if ( constraint.getParameters().length != constraint.getDeclaredParameters().length )
+            {
+                throw new JDOException( "Unable to use query, there are <" + constraint.getDeclaredParameters().length
+                    + "> declared parameters, yet there are <" + constraint.getParameters().length
+                    + "> parameter objects to use.  This should be equal." );
+            }
+
+            for ( int i = 0; i < constraint.getDeclaredParameters().length; i++ )
+            {
+                String declaredParam = constraint.getDeclaredParameters()[i];
+                query.declareParameters( declaredParam );
+            }
+
+            return processParameterizedQuery( query, constraint.getParameters() );
+        }
+        else
+        {
+            return (List) query.execute();
+        }
+    }
+
+    private List processParameterizedQuery( Query query, Object parameters[] )
+    {
+        switch ( parameters.length )
+        {
+            case 1:
+                return (List) query.execute( parameters[0] );
+            case 2:
+                return (List) query.execute( parameters[0], parameters[1] );
+            case 3:
+                return (List) query.execute( parameters[0], parameters[1], parameters[2] );
+            default:
+                throw new JDOException( "Unable to use more than 3 parameters." );
         }
     }
 

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.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/JdoArchivaDAO.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoArchivaDAO.java Fri Apr 20 13:44:32 2007
@@ -24,8 +24,11 @@
 import org.apache.maven.archiva.database.ProjectModelDAO;
 import org.apache.maven.archiva.database.RepositoryDAO;
 import org.apache.maven.archiva.database.RepositoryProblemDAO;
+import org.apache.maven.archiva.database.SimpleConstraint;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
+import java.util.List;
+
 /**
  * JdoArchivaDAO 
  *
@@ -39,6 +42,11 @@
     implements ArchivaDAO
 {
     /**
+     * @plexus.requirement role-hint="archiva"
+     */
+    private JdoAccess jdo;
+    
+    /**
      * @plexus.requirement role-hint="jdo"
      */
     private ArtifactDAO artifactDAO;
@@ -57,6 +65,11 @@
      * @plexus.requirement role-hint="jdo"
      */
     private RepositoryProblemDAO repositoryProblemDAO;
+    
+    public List query( SimpleConstraint constraint )
+    {
+        return jdo.queryObjects( constraint );
+    }
 
     public ArtifactDAO getArtifactDAO()
     {

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=530911&r1=530910&r2=530911
==============================================================================
--- 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 Fri Apr 20 13:44:32 2007
@@ -87,7 +87,7 @@
     public List queryArtifacts( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        List results = jdo.getAllObjects( ArchivaArtifactModel.class, constraint );
+        List results = jdo.queryObjects( ArchivaArtifactModel.class, constraint );
         if ( ( results == null ) || results.isEmpty() )
         {
             return results;

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=530911&r1=530910&r2=530911
==============================================================================
--- 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 Fri Apr 20 13:44:32 2007
@@ -77,7 +77,7 @@
     public List queryProjectModels( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        return jdo.getAllObjects( ArchivaProjectModel.class, constraint );
+        return jdo.queryObjects( ArchivaProjectModel.class, constraint );
     }
 
     public ArchivaProjectModel saveProjectModel( ArchivaProjectModel model )

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryDAO.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/JdoRepositoryDAO.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryDAO.java Fri Apr 20 13:44:32 2007
@@ -81,7 +81,7 @@
     public List queryRepositories( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        List results = jdo.getAllObjects( ArchivaRepositoryModel.class, constraint );
+        List results = jdo.queryObjects( ArchivaRepositoryModel.class, constraint );
 
         if ( ( results == null ) || results.isEmpty() )
         {

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryProblemDAO.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/JdoRepositoryProblemDAO.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryProblemDAO.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoRepositoryProblemDAO.java Fri Apr 20 13:44:32 2007
@@ -46,7 +46,7 @@
     public List queryRepositoryProblems( Constraint constraint )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        return jdo.getAllObjects( RepositoryProblem.class, constraint );
+        return jdo.queryObjects( RepositoryProblem.class, constraint );
     }
 
     public RepositoryProblem saveRepositoryProblem( RepositoryProblem problem )

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,115 @@
+package org.apache.maven.archiva.database.browsing;
+
+/*
+ * 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.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.Date;
+
+/**
+ * RepositoryBrowsingTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryBrowsingTest
+    extends AbstractArchivaDatabaseTestCase
+{
+    private ArtifactDAO artifactDao;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
+        artifactDao = dao.getArtifactDAO();
+    }
+
+    public ArchivaArtifact createArtifact( String groupId, String artifactId, String version )
+    {
+        ArchivaArtifact artifact = artifactDao.createArtifact( groupId, artifactId, version, "", "jar" );
+        artifact.getModel().setLastModified( new Date() ); // mandatory field.
+        artifact.getModel().setRepositoryId( "testable_repo" );
+        return artifact;
+    }
+
+    public void saveTestData()
+        throws Exception
+    {
+        ArchivaArtifact artifact;
+
+        // Setup artifacts in fresh DB.
+        artifact = createArtifact( "commons-lang", "commons-lang", "2.0" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "commons-lang", "commons-lang", "2.1" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.test", "test-one", "1.2" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.test.foo", "test-two", "1.0" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.0" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-SNAPSHOT" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1.1" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-alpha-1" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.apache.maven.shared", "test-bar", "2.1" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.codehaus.modello", "modellong", "3.0" );
+        artifactDao.saveArtifact( artifact );
+    }
+
+    public RepositoryBrowsing lookupBrowser()
+        throws Exception
+    {
+        RepositoryBrowsing browser = (RepositoryBrowsing) lookup( RepositoryBrowsing.class.getName(), "default" );
+        assertNotNull( "RepositoryBrowsing should not be null.", browser );
+        return browser;
+    }
+
+    public void testSimpleBrowse()
+        throws Exception
+    {
+        saveTestData();
+
+        RepositoryBrowsing browser = lookupBrowser();
+        BrowsingResults results = browser.getRoot();
+        assertNotNull( "Browsing Results should not be null.", results );
+
+        String expectedRootGroupIds[] = new String[] { "commons-lang", "org" };
+
+        assertEquals( "Browsing Results: groupIds on root.", expectedRootGroupIds.length, results.getGroupIds().size() );
+    }
+}

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

Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.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/browsing/RepositoryBrowsingTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain