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 [2/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...

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/AllTests.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/AllTests.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/AllTests.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/AllTests.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,48 @@
+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 junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * IDE Provided Utility Class for all tests. 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.database.constraints" );
+        //$JUnit-BEGIN$
+        suite.addTestSuite( ArtifactsProcessedConstraintTest.class );
+        suite.addTestSuite( ArtifactsBySha1ChecksumConstraintTest.class );
+        suite.addTestSuite( OlderArtifactsByAgeConstraintTest.class );
+        suite.addTestSuite( UniqueGroupIdConstraintTest.class );
+        suite.addTestSuite( OlderSnapshotArtifactsByAgeConstraintTest.class );
+        suite.addTestSuite( RecentArtifactsByAgeConstraintTest.class );
+        //$JUnit-END$
+        return suite;
+    }
+
+}

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraintTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraintTest.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraintTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueArtifactIdConstraintTest.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,119 @@
+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.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.database.SimpleConstraint;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * UniqueArtifactIdConstraintTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueArtifactIdConstraintTest
+    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 testConstraint()
+        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" );
+        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 );
+
+        assertConstraint( new String[] {}, new UniqueArtifactIdConstraint( "org.apache" ) );
+        assertConstraint( new String[] { "commons-lang" }, new UniqueArtifactIdConstraint( "commons-lang" ) );
+        assertConstraint( new String[] { "test-one" }, new UniqueArtifactIdConstraint( "org.apache.maven.test" ) );
+        assertConstraint( new String[] { "test-two", "test-bar" },
+                          new UniqueArtifactIdConstraint( "org.apache.maven.shared" ) );
+        assertConstraint( new String[] { "modellong" }, new UniqueArtifactIdConstraint( "org.codehaus.modello" ) );
+    }
+
+    private void assertConstraint( String[] artifactIds, SimpleConstraint constraint )
+    {
+        String prefix = "Unique Artifact IDs: ";
+
+        List results = dao.query( constraint );
+        assertNotNull( prefix + "Not Null", results );
+        assertEquals( prefix + "Results.size", artifactIds.length, results.size() );
+
+        List expectedArtifactIds = Arrays.asList( artifactIds );
+
+        Iterator it = results.iterator();
+        while ( it.hasNext() )
+        {
+            String actualArtifactId = (String) it.next();
+            assertTrue( prefix + "artifactId result should not be blank.", StringUtils.isNotBlank( actualArtifactId ) );
+            assertTrue( prefix + " artifactId result <" + actualArtifactId + "> exists in expected artifactIds.",
+                        expectedArtifactIds.contains( actualArtifactId ) );
+        }
+    }
+}

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraintTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraintTest.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraintTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueGroupIdConstraintTest.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,132 @@
+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.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.database.SimpleConstraint;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * UniqueGroupIdConstraintTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueGroupIdConstraintTest
+    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 testConstraint()
+        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" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "org.codehaus.modello", "test-two", "3.0" );
+        artifactDao.saveArtifact( artifact );
+
+        assertConstraint( new String[] {
+            "commons-lang",
+            "org.apache.maven.test",
+            "org.apache.maven.test.foo",
+            "org.apache.maven.shared",
+            "org.codehaus.modello" }, new UniqueGroupIdConstraint() );
+        assertConstraint( new String[] { "commons-lang" }, new UniqueGroupIdConstraint( "commons-lang" ) );
+        assertConstraint( new String[] {
+            "org.apache.maven.test",
+            "org.apache.maven.test.foo",
+            "org.apache.maven.shared" }, new UniqueGroupIdConstraint( "org.apache.maven" ) );
+        assertConstraint( new String[] {
+            "org.apache.maven.test",
+            "org.apache.maven.test.foo",
+            "org.apache.maven.shared" }, new UniqueGroupIdConstraint( "org.apache" ) );
+        assertConstraint( new String[] {
+            "org.apache.maven.test",
+            "org.apache.maven.test.foo",
+            "org.apache.maven.shared",
+            "org.codehaus.modello" }, new UniqueGroupIdConstraint( "org" ) );
+    }
+
+    private void assertConstraint( String[] expectedGroupIds, SimpleConstraint constraint )
+        throws Exception
+    {
+        String prefix = "Unique Group IDs: ";
+        
+        List results = dao.query( constraint );
+        assertNotNull( prefix + "Not Null", results );
+        assertEquals( prefix + "Results.size", expectedGroupIds.length, results.size() );
+
+        List groupIdList = Arrays.asList( expectedGroupIds );
+
+        Iterator it = results.iterator();
+        while ( it.hasNext() )
+        {
+            String actualGroupId = (String) it.next();
+            assertTrue( prefix + "groupId result should not be blank.", StringUtils.isNotBlank( actualGroupId ) );
+            assertTrue( prefix + " groupId result <" + actualGroupId + "> exists in expected GroupIds.",
+                        groupIdList.contains( actualGroupId ) );
+        }
+    }
+
+}

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

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

Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java?view=auto&rev=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java Fri Apr 20 13:44:32 2007
@@ -0,0 +1,128 @@
+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.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.database.SimpleConstraint;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * UniqueVersionConstraintTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UniqueVersionConstraintTest
+    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 testConstraint()
+        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 );
+
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( "org.apache", "invalid" ) );
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( "org.apache.test", "invalid" ) );
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( "invalid", "test-two" ) );
+
+        assertConstraint( new String[] { "2.0", "2.1" }, new UniqueVersionConstraint( "commons-lang", "commons-lang" ) );
+        assertConstraint( new String[] { "1.2" }, new UniqueVersionConstraint( "org.apache.maven.test", "test-one" ) );
+        assertConstraint( new String[] { "2.0", "2.1-SNAPSHOT", "2.1.1", "2.1-alpha-1" },
+                          new UniqueVersionConstraint( "org.apache.maven.shared", "test-two" ) );
+        assertConstraint( new String[] { "3.0" }, new UniqueVersionConstraint( "org.codehaus.modello", "modellong" ) );
+    }
+
+    private void assertConstraint( String[] versions, SimpleConstraint constraint )
+    {
+        String prefix = "Unique Versions: ";
+
+        List results = dao.query( constraint );
+        assertNotNull( prefix + "Not Null", results );
+        assertEquals( prefix + "Results.size", versions.length, results.size() );
+
+        List expectedVersions = Arrays.asList( versions );
+
+        Iterator it = results.iterator();
+        while ( it.hasNext() )
+        {
+            String actualVersion = (String) it.next();
+            assertTrue( prefix + "version result should not be blank.", StringUtils.isNotBlank( actualVersion ) );
+            assertTrue( prefix + "version result <" + actualVersion + "> exists in expected versions.",
+                        expectedVersions.contains( actualVersion ) );
+        }
+    }
+}

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

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

Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?view=diff&rev=530911&r1=530910&r2=530911
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java Fri Apr 20 13:44:32 2007
@@ -20,87 +20,40 @@
  */
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
-import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.browsing.BrowsingResults;
+import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-
 /**
  * Browse the repository.
  *
- * @todo cache should be a proper cache class that is a singleton requirement rather than static variables
+ * @todo cache browsing results.
+ * @todo implement repository selectors (all or specific repository)
+ * @todo implement security around browse (based on repository id at first)
  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="browseAction"
  */
 public class BrowseAction
     extends PlexusActionSupport
 {
     /**
-     * @plexus.requirement
-     */
-    private ArchivaDAO dao;
-
-    /**
-     * @plexus.requirement
+     * @plexus.requirement role-hint="default"
      */
-    private ArchivaConfiguration archivaConfiguration;
+    private RepositoryBrowsing repoBrowsing;
 
-    private List groups;
+    private BrowsingResults results;
 
     private String groupId;
 
-    private static final String GROUP_SEPARATOR = ".";
-
-    private List artifactIds;
-
     private String artifactId;
 
-    private List versions;
-
-    private static GroupTreeNode rootNode;
-
-    private static long groupCacheTime;
-
     public String browse()
-        throws RepositoryIndexException, IOException
     {
-        RepositoryArtifactIndex index = getIndex();
-
-        if ( !index.exists() )
-        {
-            addActionError( "The repository is not yet indexed. Please wait, and then try again." );
-            return ERROR;
-        }
-
-        GroupTreeNode rootNode = buildGroupTree( index );
-
-        this.groups = collateGroups( rootNode );
-
+        this.results = repoBrowsing.getRoot();
         return SUCCESS;
     }
 
     public String browseGroup()
-        throws RepositoryIndexException, IOException, RepositoryIndexSearchException
     {
-        RepositoryArtifactIndex index = getIndex();
-
-        if ( !index.exists() )
-        {
-            addActionError( "The repository is not yet indexed. Please wait, and then try again." );
-            return ERROR;
-        }
-
-        GroupTreeNode rootNode = buildGroupTree( index );
-
         if ( StringUtils.isEmpty( groupId ) )
         {
             // TODO: i18n
@@ -108,38 +61,12 @@
             return ERROR;
         }
 
-        StringTokenizer tok = new StringTokenizer( groupId, GROUP_SEPARATOR );
-        while ( tok.hasMoreTokens() )
-        {
-            String part = tok.nextToken();
-
-            if ( !rootNode.getChildren().containsKey( part ) )
-            {
-                // TODO: i18n
-                getLogger().debug(
-                    "Can't find part: " + part + " for groupId " + groupId + " in children " + rootNode.getChildren() );
-                addActionError( "The group specified was not found" );
-                return ERROR;
-            }
-            else
-            {
-                rootNode = (GroupTreeNode) rootNode.getChildren().get( part );
-            }
-        }
-
-        this.groups = collateGroups( rootNode );
-
-        this.artifactIds = index.getArtifactIds( groupId );
-        Collections.sort( this.artifactIds );
-
+        this.results = repoBrowsing.selectGroupId( groupId );
         return SUCCESS;
     }
 
     public String browseArtifact()
-        throws RepositoryIndexException, IOException, RepositoryIndexSearchException
     {
-        RepositoryArtifactIndex index = getIndex();
-
         if ( StringUtils.isEmpty( groupId ) )
         {
             // TODO: i18n
@@ -154,96 +81,10 @@
             return ERROR;
         }
 
-        this.versions = index.getVersions( groupId, artifactId );
-        Collections.sort( this.versions );
-
-        if ( versions.isEmpty() )
-        {
-            // TODO: i18n
-            addActionError( "Could not find any artifacts with the given group and artifact ID" );
-            return ERROR;
-        }
-
+        this.results = repoBrowsing.selectArtifactId( groupId, artifactId );
         return SUCCESS;
     }
 
-    private GroupTreeNode buildGroupTree( RepositoryArtifactIndex index )
-        throws IOException, RepositoryIndexException
-    {
-        // TODO: give action message if indexing is in progress
-
-        long lastUpdate = index.getLastUpdatedTime();
-
-        if ( rootNode == null || lastUpdate > groupCacheTime )
-        {
-            List groups = index.getAllGroupIds();
-
-            getLogger().info( "Loaded " + groups.size() + " groups from index" );
-
-            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 );
-                    }
-                }
-            }
-            groupCacheTime = lastUpdate;
-        }
-        else
-        {
-            getLogger().debug( "Loaded groups from cache" );
-        }
-
-        return rootNode;
-    }
-
-    private 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;
-    }
-
-    public List getGroups()
-    {
-        return groups;
-    }
-
-    public List getArtifactIds()
-    {
-        return artifactIds;
-    }
-
     public String getGroupId()
     {
         return groupId;
@@ -264,49 +105,8 @@
         this.artifactId = artifactId;
     }
 
-    public List getVersions()
-    {
-        return versions;
-    }
-
-    private static class GroupTreeNode
+    public BrowsingResults getResults()
     {
-        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 );
-        }
+        return results;
     }
 }