import com.opensymphony.xwork2.ActionContext;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
import org.apache.maven.archiva.database.browsing.BrowsingResults;
import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
import org.apache.maven.archiva.security.*;
-import org.apache.maven.archiva.security.ArchivaXworkUser;
/**
* Browse the repository.
private String artifactId;
private String repositoryId;
-
+
+ private ArchivaProjectModel sharedModel;
+
public String browse()
{
List<String> selectedRepos = getObservableRepos();
{
return GlobalResults.ACCESS_TO_NO_REPOS;
}
-
this.results = repoBrowsing.selectArtifactId( getPrincipal(), selectedRepos, groupId, artifactId );
+
+ populateSharedModel();
+
return SUCCESS;
}
+
+ private void populateSharedModel()
+ {
+ sharedModel = new ArchivaProjectModel();
+ sharedModel.setGroupId( groupId );
+ sharedModel.setArtifactId( artifactId );
+ boolean isFirstVersion = true;
+
+ for( String version : this.results.getVersions() )
+ {
+ try
+ {
+ ArchivaProjectModel model =
+ repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
+
+ if( isFirstVersion )
+ {
+ sharedModel = model;
+ }
+ else
+ {
+ if ( sharedModel.getPackaging() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getPackaging(), model.getPackaging() ) )
+ {
+ sharedModel.setPackaging( null );
+ }
+
+ if ( sharedModel.getName() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getName(), model.getName() ) )
+ {
+ sharedModel.setName( "" );
+ }
+
+ if ( sharedModel.getDescription() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getDescription(), model.getDescription() ) )
+ {
+ sharedModel.setDescription( null );
+ }
+
+ if ( sharedModel.getIssueManagement() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getIssueManagement().getUrl(), model.getIssueManagement().getUrl() ) )
+ {
+ sharedModel.setIssueManagement( null );
+ }
+
+ if ( sharedModel.getCiManagement() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getCiManagement().getUrl(), model.getCiManagement().getUrl() ) )
+ {
+ sharedModel.setCiManagement( null );
+ }
+
+ if ( sharedModel.getOrganization() != null &&
+ !StringUtils.equalsIgnoreCase( sharedModel.getOrganization().getName(), model.getOrganization().getName() ) )
+ {
+ sharedModel.setOrganization( null );
+ }
+
+ if ( sharedModel.getUrl() != null && !StringUtils.equalsIgnoreCase( sharedModel.getUrl(), model.getUrl() ) )
+ {
+ sharedModel.setUrl( null );
+ }
+ }
+
+ isFirstVersion = false;
+ }
+ catch ( ObjectNotFoundException e )
+ {
+ getLogger().debug( e.getMessage(), e );
+ }
+ catch ( ArchivaDatabaseException e )
+ {
+ getLogger().debug( e.getMessage(), e );
+ }
+ }
+ }
private String getPrincipal()
{
this.repositoryId = repositoryId;
}
+
+ public ArchivaProjectModel getSharedModel()
+ {
+ return sharedModel;
+ }
+
+ public void setSharedModel( ArchivaProjectModel sharedModel )
+ {
+ this.sharedModel = sharedModel;
+ }
}
<head>
<title>Browse Repository</title>
<s:head/>
+
+ <script type="text/javascript" src="<c:url value='/js/jquery/jquery-1.2.6.pack.js'/>"></script>
+ <script type="text/javascript">
+ $(document).ready(function(){
+
+ $("table.infoTable").hide();
+ $("a.expand").click(function(event){
+ event.preventDefault();
+ $(this).next().toggle("slow");
+ });
+ });
+ </script>
+
</head>
<body>
</c:if>
<c:if test="${not empty results.versions}">
- <div id="nameColumn">
- <h2>Versions</h2>
- <ul>
- <c:forEach items="${results.versions}" var="version">
- <c:set var="url">
- <s:url action="showArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.results.selectedGroupId}"/>
- <s:param name="artifactId" value="%{#attr.results.selectedArtifactId}"/>
- <s:param name="version" value="%{#attr.version}"/>
- </s:url>
- </c:set>
- <li><a href="${url}">${version}/</a></li>
- </c:forEach>
- </ul>
- </div>
+ <%-- show shared project information (MRM-1041) --%>
+
+ <h2>Versions</h2>
+ <div id="nameColumn" class="versions">
+ <a class="expand" href="#">Artifact Info</a>
+ <table class="infoTable">
+ <tr>
+ <th>Group ID</th>
+ <td>${sharedModel.groupId}</td>
+ </tr>
+ <tr>
+ <th>Artifact ID</th>
+ <td>${sharedModel.artifactId}</td>
+ </tr>
+ <c:if test="${sharedModel.packaging != null}">
+ <tr>
+ <th>Packaging</th>
+ <td><code>${sharedModel.packaging}</code></td>
+ </tr>
+ </c:if>
+ <c:if test="${sharedModel.name != null}">
+ <tr>
+ <th>Name</th>
+ <td><code>${sharedModel.name}</code></td>
+ </tr>
+ </c:if>
+ <c:if test="${sharedModel.organization != null}">
+ <tr>
+ <th>Organisation</th>
+ <td>
+ <c:choose>
+ <c:when test="${sharedModel.organization.url != null}">
+ <a href="${sharedModel.organization.url}">${sharedModel.organization.name}</a>
+ </c:when>
+ <c:otherwise>
+ ${sharedModel.organization.name}
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </c:if>
+ <c:if test="${sharedModel.issueManagement != null}">
+ <tr>
+ <th>Issue Tracker</th>
+ <td>
+ <c:choose>
+ <c:when test="${!empty (sharedModel.issueManagement.url)}">
+ <a href="${sharedModel.issueManagement.url}">${sharedModel.issueManagement.system}</a>
+ </c:when>
+ <c:otherwise>
+ ${sharedModel.issueManagement.system}
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </c:if>
+ <c:if test="${sharedModel.ciManagement != null}">
+ <tr>
+ <th>Continuous Integration</th>
+ <td>
+ <c:choose>
+ <c:when test="${!empty (sharedModel.ciManagement.url)}">
+ <a href="${sharedModel.ciManagement.url}">${sharedModel.ciManagement.system}</a>
+ </c:when>
+ <c:otherwise>
+ ${sharedModel.ciManagement.system}
+ </c:otherwise>
+ </c:choose>
+ </td>
+ </tr>
+ </c:if>
+ </table>
+ </div>
+
+ <ul>
+ <c:forEach items="${results.versions}" var="version">
+ <c:set var="url">
+ <s:url action="showArtifact" namespace="/">
+ <s:param name="groupId" value="%{#attr.results.selectedGroupId}"/>
+ <s:param name="artifactId" value="%{#attr.results.selectedArtifactId}"/>
+ <s:param name="version" value="%{#attr.version}"/>
+ </s:url>
+ </c:set>
+ <li><a href="${url}">${version}/</a></li>
+ </c:forEach>
+ </ul>
</c:if>
</div>
</body>
-</html>
+</html>
\ No newline at end of file