Author: brett
Date: Sat Aug 26 11:07:54 2006
New Revision: 437197
URL: http://svn.apache.org/viewvc?rev=437197&view=rev
Log:
[MRM-131] add depended on by page
Modified:
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
maven/archiva/trunk/archiva-webapp/src/main/resources/xwork.xml
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
Modified:
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
Sat Aug 26 11:07:54 2006
@@ -17,13 +17,22 @@
*/
import com.opensymphony.xwork.ActionSupport;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.TermQuery;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.ConfigurationStore;
import org.apache.maven.archiva.configuration.ConfigurationStoreException;
import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
+import org.apache.maven.archiva.indexer.lucene.LuceneQuery;
+import org.apache.maven.archiva.indexer.record.StandardArtifactIndexRecord;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
@@ -31,8 +40,15 @@
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
/**
* Browse the repository.
@@ -62,6 +78,11 @@
*/
private ConfigurationStore configurationStore;
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryArtifactIndexFactory factory;
+
private String groupId;
private String artifactId;
@@ -70,7 +91,7 @@
private Model model;
- private List dependencies;
+ private Collection dependencies;
public String artifact()
throws ConfigurationStoreException, IOException,
XmlPullParserException, ProjectBuildingException
@@ -100,11 +121,78 @@
model = project.getModel();
// TODO: should this be the whole set of artifacts, and be more like
the maven dependencies report?
- dependencies = project.getModel().getDependencies();
+
+ List dependencies = new ArrayList();
+
+ for ( Iterator i = project.getModel().getDependencies().iterator();
i.hasNext(); )
+ {
+ Dependency dependency = (Dependency) i.next();
+
+ dependencies.add( new DependencyWrapper( dependency ) );
+ }
+
+ this.dependencies = dependencies;
return SUCCESS;
}
+ public String dependees()
+ throws ConfigurationStoreException, IOException,
XmlPullParserException, ProjectBuildingException,
+ RepositoryIndexException, RepositoryIndexSearchException
+ {
+ if ( !checkParameters() )
+ {
+ return ERROR;
+ }
+
+ MavenProject project = readProject();
+
+ model = project.getModel();
+
+ RepositoryArtifactIndex index = getIndex();
+
+ String id = createId( groupId, artifactId, version );
+ List records = index.search( new LuceneQuery( new TermQuery( new Term(
"dependencies", id ) ) ) );
+
+ Map dependees = new LinkedHashMap();
+
+ for ( Iterator i = records.iterator(); i.hasNext(); )
+ {
+ StandardArtifactIndexRecord record = (StandardArtifactIndexRecord)
i.next();
+
+ String key = record.getGroupId() + ":" + record.getArtifactId();
+ if ( dependees.containsKey( key ) )
+ {
+ DependencyWrapper wrapper = (DependencyWrapper) dependees.get(
key );
+ wrapper.addVersion( record.getVersion() );
+ }
+ else
+ {
+ DependencyWrapper wrapper = new DependencyWrapper( record );
+
+ dependees.put( key, wrapper );
+ }
+ }
+
+ dependencies = dependees.values();
+
+ return SUCCESS;
+ }
+
+ private static String createId( String groupId, String artifactId, String
version )
+ {
+ return groupId + ":" + artifactId + ":" + version;
+ }
+
+ private RepositoryArtifactIndex getIndex()
+ throws ConfigurationStoreException, RepositoryIndexException
+ {
+ Configuration configuration =
configurationStore.getConfigurationFromStore();
+ File indexPath = new File( configuration.getIndexPath() );
+
+ return factory.createStandardIndex( indexPath );
+ }
+
private MavenProject readProject()
throws ConfigurationStoreException, ProjectBuildingException
{
@@ -149,7 +237,7 @@
return model;
}
- public List getDependencies()
+ public Collection getDependencies()
{
return dependencies;
}
@@ -182,5 +270,88 @@
public void setVersion( String version )
{
this.version = version;
+ }
+
+ public static class DependencyWrapper
+ {
+ private final String groupId;
+
+ private final String artifactId;
+
+ private List versions = new ArrayList();
+
+ private String version;
+
+ private String scope;
+
+ private String classifier;
+
+ public DependencyWrapper( StandardArtifactIndexRecord record )
+ {
+ this.groupId = record.getGroupId();
+
+ this.artifactId = record.getArtifactId();
+
+ addVersion( record.getVersion() );
+ }
+
+ public DependencyWrapper( Dependency dependency )
+ {
+ this.groupId = dependency.getGroupId();
+
+ this.artifactId = dependency.getArtifactId();
+
+ this.scope = dependency.getScope();
+
+ this.classifier = dependency.getClassifier();
+
+ addVersion( dependency.getVersion() );
+ }
+
+ public String getScope()
+ {
+ return scope;
+ }
+
+ public String getClassifier()
+ {
+ return classifier;
+ }
+
+ public void addVersion( String version )
+ {
+ versions.add( version );
+
+ if ( versions.size() == 1 )
+ {
+ this.version = version;
+ }
+ else
+ {
+ this.version = null;
+ // TODO: use version comparator!
+ Collections.sort( versions );
+ }
+ }
+
+ public String getGroupId()
+ {
+ return groupId;
+ }
+
+ public String getArtifactId()
+ {
+ return artifactId;
+ }
+
+ public List getVersions()
+ {
+ return versions;
+ }
+
+ public String getVersion()
+ {
+ return version;
+ }
}
}
Modified:
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/java/org/apache/maven/archiva/web/mapper/RepositoryActionMapper.java
Sat Aug 26 11:07:54 2006
@@ -56,6 +56,11 @@
return BROWSE_PREFIX + params.remove( "groupId" ) + "/" +
params.remove( "artifactId" ) + "/" +
params.remove( "version" ) + "/dependencies";
}
+ else if ( "showArtifactDependees".equals( actionMapping.getName() ) )
+ {
+ return BROWSE_PREFIX + params.remove( "groupId" ) + "/" +
params.remove( "artifactId" ) + "/" +
+ params.remove( "version" ) + "/dependedonby";
+ }
else if ( "proxy".equals( actionMapping.getName() ) )
{
return PROXY_PREFIX + params.remove( "path" );
@@ -108,6 +113,10 @@
if ( "dependencies".equals( parts[3] ) )
{
return new ActionMapping( "showArtifactDependencies",
"/", "", params );
+ }
+ else if ( "dependedonby".equals( parts[3] ) )
+ {
+ return new ActionMapping( "showArtifactDependees",
"/", "", params );
}
}
}
Modified: maven/archiva/trunk/archiva-webapp/src/main/resources/xwork.xml
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/resources/xwork.xml?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-webapp/src/main/resources/xwork.xml (original)
+++ maven/archiva/trunk/archiva-webapp/src/main/resources/xwork.xml Sat Aug 26
11:07:54 2006
@@ -115,6 +115,10 @@
<result>/WEB-INF/jsp/showArtifact.jsp</result>
</action>
+ <action name="showArtifactDependees" class="showArtifactAction"
method="dependees">
+ <result>/WEB-INF/jsp/showArtifact.jsp</result>
+ </action>
+
<action name="proxy" class="proxyAction">
<result type="stream">
<param name="contentType">${contentType}</param>
Modified:
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/browseArtifact.jsp
Sat Aug 26 11:07:54 2006
@@ -53,11 +53,13 @@
<ul>
<ww:set name="versions" value="versions"/>
<c:forEach items="${versions}" var="version">
- <ww:url id="url" action="showArtifact" namespace="/">
- <ww:param name="groupId" value="%{'${groupId}'}"/>
- <ww:param name="artifactId" value="%{'${artifactId}'}"/>
- <ww:param name="version" value="%{'${version}'}"/>
- </ww:url>
+ <c:set var="url">
+ <ww:url action="showArtifact" namespace="/">
+ <ww:param name="groupId" value="%{'${groupId}'}"/>
+ <ww:param name="artifactId" value="%{'${artifactId}'}"/>
+ <ww:param name="version" value="%{'${version}'}"/>
+ </ww:url>
+ </c:set>
<li><a href="${url}">${version}/</a></li>
</c:forEach>
</ul>
Modified:
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/artifactDependencies.jspf
Sat Aug 26 11:07:54 2006
@@ -1,13 +1,19 @@
+<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<%-- TODO: paginate --%>
<c:forEach items="${dependencies}" var="dependency">
<h3>
<c:set var="url">
<ww:url action="showArtifact" namespace="/">
<ww:param name="groupId" value="%{'${dependency.groupId}'}"/>
<ww:param name="artifactId" value="%{'${dependency.artifactId}'}"/>
- <ww:param name="version" value="%{'${dependency.version}'}"/>
+ <c:if test="${!empty(dependency.version)}">
+ <ww:param name="version" value="%{'${dependency.version}'}"/>
+ </c:if>
</ww:url>
</c:set>
- <%-- TODO: showing the name and description would be nice, but that would
require loading the POMs --%>
+ <%-- TODO: showing the name and description would be nice, but that
would require loading the POMs --%>
<a href="${url}">${dependency.artifactId}</a>
</h3>
@@ -32,7 +38,34 @@
<a href="${url}">${part}</a> /
</c:forTokens>
<strong>${dependency.artifactId}</strong>
- | <strong>Version(s):</strong> ${dependency.version}
+ | <strong>Version(s):</strong>
+ <c:choose>
+ <c:when test="${!empty(dependency.version)}">
+ <c:set var="url">
+ <ww:url action="showArtifact" namespace="/">
+ <ww:param name="groupId"
value="%{'${dependency.groupId}'}"/>
+ <ww:param name="artifactId"
value="%{'${dependency.artifactId}'}"/>
+ <c:if test="${!empty(dependency.version)}">
+ <ww:param name="version"
value="%{'${dependency.version}'}"/>
+ </c:if>
+ </ww:url>
+ </c:set>
+ <a href="${url}">${dependency.version}</a>
+ </c:when>
+ <c:otherwise>
+ <c:forEach items="${dependency.versions}" var="version"
varStatus="i">
+ <c:set var="url">
+ <ww:url action="showArtifact" namespace="/">
+ <ww:param name="groupId"
value="%{'${dependency.groupId}'}"/>
+ <ww:param name="artifactId"
value="%{'${dependency.artifactId}'}"/>
+ <ww:param name="version" value="%{'${version}'}"/>
+ </ww:url>
+ </c:set>
+ <a href="${url}">${version}</a>
+ <c:if test="${!i.last}">,</c:if>
+ </c:forEach>
+ </c:otherwise>
+ </c:choose>
<c:if test="${!empty(dependency.scope)}">
| <strong>Scope:</strong> ${dependency.scope}
</c:if>
@@ -41,4 +74,7 @@
</c:if>
</span>
</p>
-</c:forEach>
\ No newline at end of file
+</c:forEach>
+<c:if test="${empty(dependencies)}">
+ <strong>No results</strong>
+</c:if>
\ No newline at end of file
Modified:
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
Sat Aug 26 11:07:54 2006
@@ -67,8 +67,15 @@
</ww:url>
</c:set>
<my:currentWWUrl url="${url}">Dependencies</my:currentWWUrl>
+ <c:set var="url">
+ <ww:url action="showArtifactDependees">
+ <ww:param name="groupId" value="%{groupId}"/>
+ <ww:param name="artifactId" value="%{artifactId}"/>
+ <ww:param name="version" value="%{version}"/>
+ </ww:url>
+ </c:set>
+ <my:currentWWUrl url="${url}">Depended On By</my:currentWWUrl>
<%-- TODO:
- <a href="TODO">Depended On</a>
<a href="TODO">Mailing Lists</a>
--%>
</p>
Modified:
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag?rev=437197&r1=437196&r2=437197&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
(original)
+++
maven/archiva/trunk/archiva-webapp/src/main/webapp/WEB-INF/tags/currentWWUrl.tag
Sat Aug 26 11:07:54 2006
@@ -19,10 +19,11 @@
<%@ attribute name="action" %>
<%@ attribute name="namespace" %>
<%@ attribute name="url" %>
+
<c:set var="currentUrl">
<ww:url/>
</c:set>
-<c:if test="${empty(url)}">
+<c:if test="${!empty(action) && !empty(namespace)}">
<c:set var="url">
<ww:url action="${action}" namespace="${namespace}"/>
</c:set>