aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-database
diff options
context:
space:
mode:
authorJoakim Erdfelt <joakime@apache.org>2007-05-30 17:20:20 +0000
committerJoakim Erdfelt <joakime@apache.org>2007-05-30 17:20:20 +0000
commitf457d052aedd640e2cf53d89c581de8414eb7154 (patch)
treeb208801e8dbd3adb3f557da38879972474e160e6 /archiva-database
parent4d8738d248207e36b29f6338acb656888118b8ee (diff)
downloadarchiva-f457d052aedd640e2cf53d89c581de8414eb7154.tar.gz
archiva-f457d052aedd640e2cf53d89c581de8414eb7154.zip
[MRM-378]: Clicking on the tabs in the artifact detail page doesn't change the view
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@542881 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-database')
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java18
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java25
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java45
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java12
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraint.java81
-rw-r--r--archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java66
-rw-r--r--archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java42
-rw-r--r--archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraintTest.java115
8 files changed, 369 insertions, 35 deletions
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java
index 54b0b4724..c2bca5f05 100644
--- a/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/DeclarativeConstraint.java
@@ -44,6 +44,15 @@ public interface DeclarativeConstraint extends Constraint
* @return the parameters. (can be null)
*/
public abstract String[] getDeclaredParameters();
+
+ /**
+ * The JDOQL filter to apply to the query. (optional)
+ *
+ * NOTE: This is DAO implementation specific.
+ *
+ * @return the filter to apply. (can be null)
+ */
+ public abstract String getFilter();
/**
* Get the parameters used for this query. (required if using {@link #getDeclaredParameters()} )
@@ -67,6 +76,15 @@ public interface DeclarativeConstraint extends Constraint
* @return the sort column name. (can be null)
*/
public abstract String getSortColumn();
+
+ /**
+ * Get the variables used within the query.
+ *
+ * NOTE: This is DAO implementation specific.
+ *
+ * @return the variables used within the query.
+ */
+ public abstract String[] getVariables();
/**
* Get the SELECT WHERE (condition) value for the constraint.
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
index 7ce38abf7..1a1d80787 100644
--- a/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
@@ -22,6 +22,7 @@ package org.apache.maven.archiva.database.browsing;
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.ProjectsByArtifactUsageConstraint;
import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint;
import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint;
import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
@@ -30,6 +31,7 @@ import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.codehaus.plexus.logging.AbstractLogEnabled;
+import java.util.Collections;
import java.util.List;
/**
@@ -111,7 +113,7 @@ public class DefaultRepositoryBrowsing
{
throw e;
}
-
+
ArchivaProjectModel model;
if ( pomArtifact.getModel().isProcessed() )
@@ -128,11 +130,11 @@ public class DefaultRepositoryBrowsing
try
{
model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
-
+
if ( model == null )
{
- throw new ObjectNotFoundException( "Unable to find project model for [" + groupId + ":" + artifactId + ":"
- + version + "]" );
+ throw new ObjectNotFoundException( "Unable to find project model for [" + groupId + ":" + artifactId
+ + ":" + version + "]" );
}
return model;
@@ -142,4 +144,19 @@ public class DefaultRepositoryBrowsing
throw e;
}
}
+
+ public List getUsedBy( String groupId, String artifactId, String version )
+ throws ArchivaDatabaseException
+ {
+ ProjectsByArtifactUsageConstraint constraint = new ProjectsByArtifactUsageConstraint( groupId, artifactId,
+ version );
+ List results = dao.getProjectModelDAO().queryProjectModels( constraint );
+ if ( results == null )
+ {
+ // defensive. to honor contract as specified. never null.
+ return Collections.EMPTY_LIST;
+ }
+
+ return results;
+ }
}
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java
index ead8a7913..9ce3833d7 100644
--- a/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsing.java
@@ -23,20 +23,63 @@ import org.apache.maven.archiva.database.ArchivaDatabaseException;
import org.apache.maven.archiva.database.ObjectNotFoundException;
import org.apache.maven.archiva.model.ArchivaProjectModel;
+import java.util.List;
+
/**
- * RepositoryBrowsing
+ * Repository Browsing component
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
public interface RepositoryBrowsing
{
+ /**
+ * Get the {@link BrowsingResults} for the root of the repository.
+ *
+ * @return the root browsing results.
+ */
public BrowsingResults getRoot();
+ /**
+ * Get the {@link BrowsingResults} for the selected groupId.
+ *
+ * @param groupId the groupId to select.
+ * @return the {@link BrowsingResults} for the specified groupId.
+ */
public BrowsingResults selectGroupId( String groupId );
+ /**
+ * Get the {@link BrowsingResults} for the selected groupId & artifactId.
+ *
+ * @param groupId the groupId selected
+ * @param artifactId the artifactId selected
+ * @return the {@link BrowsingResults} for the specified groupId / artifactId combo.
+ */
public BrowsingResults selectArtifactId( String groupId, String artifactId );
+ /**
+ * Get the {@link ArchivaProjectModel} for the selected groupId / artifactId / version combo.
+ *
+ * @param groupId the groupId selected
+ * @param artifactId the artifactId selected
+ * @param version the version selected
+ * @return the {@link ArchivaProjectModel} for the selected groupId / artifactId / version combo.
+ * @throws ObjectNotFoundException if the artifact object or project object isn't found in the database.
+ * @throws ArchivaDatabaseException if there is a fundamental database error.
+ */
public ArchivaProjectModel selectVersion( String groupId, String artifactId, String version )
throws ObjectNotFoundException, ArchivaDatabaseException;
+
+ /**
+ * Get the {@link List} of {@link ArchivaProjectModel} that are used by the provided
+ * groupId, artifactId, and version specified.
+ *
+ * @param groupId the groupId selected
+ * @param artifactId the artifactId selected
+ * @param version the version selected
+ * @return the {@link List} of {@link ArchivaProjectModel} objects. (never null, but can be empty)
+ * @throws ArchivaDatabaseException if there is a fundamental database error.
+ */
+ public List getUsedBy( String groupId, String artifactId, String version )
+ throws ArchivaDatabaseException;
}
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java
index 48a4a3d21..87afa9b79 100644
--- a/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java
@@ -34,9 +34,16 @@ public abstract class AbstractDeclarativeConstraint
protected String[] declImports;
protected String[] declParams;
+
+ protected String[] variables;
protected Object[] params;
+ public String getFilter()
+ {
+ return null;
+ }
+
public String getFetchLimits()
{
return null;
@@ -61,4 +68,9 @@ public abstract class AbstractDeclarativeConstraint
{
return Constraint.ASCENDING;
}
+
+ public String[] getVariables()
+ {
+ return variables;
+ }
}
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraint.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraint.java
new file mode 100644
index 000000000..2964be7eb
--- /dev/null
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraint.java
@@ -0,0 +1,81 @@
+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.DeclarativeConstraint;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.Dependency;
+
+/**
+ * ProjectsByArtifactUsageConstraint
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectsByArtifactUsageConstraint
+ extends AbstractDeclarativeConstraint
+ implements DeclarativeConstraint
+{
+ private String filter;
+
+ public ProjectsByArtifactUsageConstraint( ArchivaArtifact artifact )
+ {
+ this( artifact.getGroupId(), artifact.getArtifactId(), artifact.getBaseVersion() );
+ }
+
+ public ProjectsByArtifactUsageConstraint( String groupId, String artifactId, String version )
+ {
+ super.declImports = new String[] {
+ "import " + Dependency.class.getName()
+ };
+
+ super.variables = new String[] {
+ "Dependency dep"
+ };
+
+ super.declParams = new String[] {
+ "String selectedGroupId",
+ "String selectedArtifactId",
+ "String selectedVersion"
+ };
+
+ filter = "dependencies.contains( dep ) && " +
+ "dep.groupId == selectedGroupId && " +
+ "dep.artifactId == selectedArtifactId && " +
+ "dep.version == selectedVersion";
+
+ super.params = new Object[] { groupId, artifactId, version };
+ }
+
+ public String getSortColumn()
+ {
+ return "groupId";
+ }
+
+ public String getWhereCondition()
+ {
+ return null;
+ }
+
+ public String getFilter()
+ {
+ return filter;
+ }
+}
diff --git a/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java b/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java
index b02cf1106..2161b7bee 100644
--- a/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java
+++ b/archiva-database/src/main/java/org/apache/maven/archiva/database/jdo/JdoAccess.java
@@ -31,12 +31,8 @@ import org.codehaus.plexus.jdo.JdoFactory;
import org.codehaus.plexus.logging.AbstractLogEnabled;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-import org.jpox.PMFConfiguration;
-import org.jpox.SchemaTool;
-import java.io.File;
import java.io.PrintStream;
-import java.net.URL;
import java.util.ArrayList;
import java.util.List;
@@ -80,35 +76,35 @@ public class JdoAccess
pmf = jdoFactory.getPersistenceManagerFactory();
/* Primitive (and failed) attempt at creating the schema on startup.
- Just to prevent the multiple stack trace warnings on auto-gen of schema.
+ Just to prevent the multiple stack trace warnings on auto-gen of schema.
- // Create the schema (if needed)
- URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
-
- File propsFile = null; // intentional
- boolean verbose = true;
-
- try
- {
- String connectionFactoryName = pmf.getConnectionFactoryName();
- if ( StringUtils.isNotBlank( connectionFactoryName ) && connectionFactoryName.startsWith( "java:comp" ) )
- {
- // We have a JNDI datasource!
- String jndiDatasource = connectionFactoryName;
- System.setProperty( PMFConfiguration.JDO_DATASTORE_URL_PROPERTY, jndiDatasource );
- }
-
- // TODO: figure out how to get the jdbc driver details from JNDI to pass into SchemaTool.
+ // Create the schema (if needed)
+ URL jdoFileUrls[] = new URL[] { getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" ) };
+
+ File propsFile = null; // intentional
+ boolean verbose = true;
+
+ try
+ {
+ String connectionFactoryName = pmf.getConnectionFactoryName();
+ if ( StringUtils.isNotBlank( connectionFactoryName ) && connectionFactoryName.startsWith( "java:comp" ) )
+ {
+ // We have a JNDI datasource!
+ String jndiDatasource = connectionFactoryName;
+ System.setProperty( PMFConfiguration.JDO_DATASTORE_URL_PROPERTY, jndiDatasource );
+ }
+
+ // TODO: figure out how to get the jdbc driver details from JNDI to pass into SchemaTool.
- SchemaTool.createSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose, null );
- }
- catch ( Exception e )
- {
- getLogger().error( "Unable to create schema: " + e.getMessage(), e );
- }
+ SchemaTool.createSchemaTables( jdoFileUrls, new URL[] {}, propsFile, verbose, null );
+ }
+ catch ( Exception e )
+ {
+ getLogger().error( "Unable to create schema: " + e.getMessage(), e );
+ }
- pmf.getPersistenceManager();
- */
+ pmf.getPersistenceManager();
+ */
// Add the lifecycle listener.
pmf.addInstanceLifecycleListener( this, null );
@@ -324,6 +320,16 @@ public class JdoAccess
Extent extent = pm.getExtent( clazz, true );
Query query = pm.newQuery( extent );
+ if ( constraint.getFilter() != null )
+ {
+ query.setFilter( constraint.getFilter() );
+ }
+
+ if ( constraint.getVariables() != null )
+ {
+ query.declareVariables( StringUtils.join( constraint.getVariables(), "; " ) );
+ }
+
if ( constraint.getSortColumn() != null )
{
String ordering = constraint.getSortColumn();
diff --git a/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java b/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
index 935ff5a0c..d433c4424 100644
--- a/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
+++ b/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
@@ -19,10 +19,13 @@ package org.apache.maven.archiva.database;
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
import org.apache.maven.archiva.database.updater.TestDatabaseCleanupConsumer;
import org.apache.maven.archiva.database.updater.TestDatabaseUnprocessedConsumer;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.VersionedReference;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
import org.codehaus.plexus.jdo.JdoFactory;
@@ -163,4 +166,43 @@ public class AbstractArchivaDatabaseTestCase
SimpleDateFormat sdf = new SimpleDateFormat( TIMESTAMP );
return sdf.format( date );
}
+
+ protected VersionedReference toVersionedReference( String id )
+ {
+ String parts[] = StringUtils.splitPreserveAllTokens( id, ':' );
+ assertEquals( "Should have 3 parts [" + id + "]", 3, parts.length );
+
+ VersionedReference ref = new VersionedReference();
+ ref.setGroupId( parts[0] );
+ ref.setArtifactId( parts[1] );
+ ref.setVersion( parts[2] );
+
+ assertTrue( "Group ID should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getGroupId() ) );
+ assertTrue( "Artifact ID should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getArtifactId() ) );
+ assertTrue( "Version should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getVersion() ) );
+
+ return ref;
+ }
+
+ protected ArtifactReference toArtifactReference( String id )
+ {
+ String parts[] = StringUtils.splitPreserveAllTokens( id, ':' );
+ assertEquals( "Should have 5 parts [" + id + "]", 5, parts.length );
+
+ ArtifactReference ref = new ArtifactReference();
+ ref.setGroupId( parts[0] );
+ ref.setArtifactId( parts[1] );
+ ref.setVersion( parts[2] );
+ ref.setClassifier( parts[3] );
+ ref.setType( parts[4] );
+
+ assertTrue( "Group ID should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getGroupId() ) );
+ assertTrue( "Artifact ID should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getArtifactId() ) );
+ assertTrue( "Version should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getVersion() ) );
+ // Blank string is ok for classifier, NULL is not.
+ assertNotNull( "Classifier should not be null [" + id + "]", ref.getClassifier() );
+ assertTrue( "Type should not be blank [" + id + "]", StringUtils.isNotBlank( ref.getType() ) );
+
+ return ref;
+ }
}
diff --git a/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraintTest.java b/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraintTest.java
new file mode 100644
index 000000000..cd6951a0c
--- /dev/null
+++ b/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/ProjectsByArtifactUsageConstraintTest.java
@@ -0,0 +1,115 @@
+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.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.DeclarativeConstraint;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.Dependency;
+import org.apache.maven.archiva.model.VersionedReference;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * ProjectsByArtifactUsageConstraintTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectsByArtifactUsageConstraintTest
+ extends AbstractArchivaDatabaseTestCase
+{
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ }
+
+ private void saveModel( String modelId, String deps[] )
+ throws Exception
+ {
+ ArchivaProjectModel model = new ArchivaProjectModel();
+ // Piece together a simple model.
+ VersionedReference ref = toVersionedReference( modelId );
+ model.setGroupId( ref.getGroupId() );
+ model.setArtifactId( ref.getArtifactId() );
+ model.setVersion( ref.getVersion() );
+ model.setPackaging( "jar" );
+ model.setOrigin( "testcase" );
+
+ if ( deps != null )
+ {
+ for ( int i = 0; i < deps.length; i++ )
+ {
+ ArtifactReference artiref = toArtifactReference( deps[i] );
+ Dependency dep = new Dependency();
+ dep.setGroupId( artiref.getGroupId() );
+ dep.setArtifactId( artiref.getArtifactId() );
+ dep.setVersion( artiref.getVersion() );
+ dep.setClassifier( artiref.getClassifier() );
+ dep.setClassifier( artiref.getType() );
+
+ model.addDependency( dep );
+ }
+ }
+
+ dao.getProjectModelDAO().saveProjectModel( model );
+ }
+
+ public ArchivaArtifact toArtifact( String id )
+ {
+ ArtifactReference ref = toArtifactReference( id );
+
+ ArchivaArtifact artifact = new ArchivaArtifact( ref.getGroupId(), ref.getArtifactId(), ref.getVersion(), ref
+ .getClassifier(), ref.getType() );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setRepositoryId( "testable_repo" );
+ return artifact;
+ }
+
+ public void testContraint()
+ throws Exception
+ {
+ saveModel( "org.apache.maven.archiva:archiva-configuration:1.0",
+ new String[] { "org.codehaus.plexus:plexus-digest:1.0::jar" } );
+
+ saveModel( "org.apache.maven.archiva:archiva-common:1.0", new String[] {
+ "org.codehaus.plexus:plexus-digest:1.0::jar",
+ "junit:junit:3.8.1::jar" } );
+
+ ArchivaArtifact artifact;
+
+ artifact = toArtifact( "org.foo:bar:4.0::jar" );
+ assertConstraint( 0, new ProjectsByArtifactUsageConstraint( artifact ) );
+ artifact = toArtifact( "org.codehaus.plexus:plexus-digest:1.0::jar" );
+ assertConstraint( 2, new ProjectsByArtifactUsageConstraint( artifact ) );
+ }
+
+ private void assertConstraint( int expectedHits, DeclarativeConstraint constraint )
+ throws Exception
+ {
+ List results = dao.getProjectModelDAO().queryProjectModels( constraint );
+ assertNotNull( "Projects By Artifact Usage: Not Null", results );
+ assertEquals( "Projects By Artifact Usage: Results.size", expectedHits, results.size() );
+ }
+}