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>


Reply via email to