Hi Jev, Why not use a custom tag instead of returning the project metadata display block as a String? This would make adding data to the project metadata difficult IMO..
-Deng On Fri, May 21, 2010 at 10:22 PM, <[email protected]> wrote: > Author: jzurbano > Date: Fri May 21 14:22:15 2010 > New Revision: 947020 > > URL: http://svn.apache.org/viewvc?rev=947020&view=rev > Log: > [MRM-1362] Add simple 'CRUD' pages for project-level metadata along with a > "generic metadata" plugin > * modified display of project metadata; added util to format the metadata > for display > * modified format of mailing lists in "Mailing List" tab using the previous > format of the mailing lists in "Project Metadata" > > > Added: > > > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java > (with props) > Modified: > > > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java > > > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf > > > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf > > Modified: > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java > URL: > http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=947020&r1=947019&r2=947020&view=diff > > ============================================================================== > --- > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java > (original) > +++ > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java > Fri May 21 14:22:15 2010 > @@ -29,6 +29,7 @@ import org.apache.archiva.metadata.repos > import org.apache.archiva.metadata.repository.MetadataResolutionException; > import org.apache.archiva.metadata.repository.MetadataResolver; > import > org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet; > +import org.apache.maven.archiva.web.util.ProjectMetadataDisplayUtil; > import org.apache.commons.lang.StringUtils; > import org.apache.maven.archiva.model.ArtifactReference; > import org.apache.maven.archiva.repository.ManagedRepositoryContent; > @@ -288,6 +289,13 @@ public class ShowArtifactAction > > return SUCCESS; > } > + > + public String getMetadataOutput() > + { > + ProjectMetadataDisplayUtil metadataDisplayUtil = new > ProjectMetadataDisplayUtil(); > + > + return metadataDisplayUtil.formatProjectMetadata( projectMetadata > ); > + } > > public String updateProjectMetadata() > { > > Added: > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java > URL: > http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java?rev=947020&view=auto > > ============================================================================== > --- > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java > (added) > +++ > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java > Fri May 21 14:22:15 2010 > @@ -0,0 +1,199 @@ > +package org.apache.maven.archiva.web.util; > + > +/* > + * 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.archiva.metadata.model.Dependency; > +import org.apache.archiva.metadata.model.License; > +import org.apache.archiva.metadata.model.MailingList; > +import org.apache.archiva.metadata.model.ProjectVersionMetadata; > +import org.apache.commons.lang.StringUtils; > + > +import java.util.List; > + > +/** > + * ProjectMetadataDisplayUtil > + * > + */ > + > +public class ProjectMetadataDisplayUtil > +{ > + private StringBuilder metadataEntries; > + > + public String formatProjectMetadata( ProjectVersionMetadata > projectMetadata ) > + { > + metadataEntries = new StringBuilder(); > + > + startList(); > + > + addListItem( "project.metadata.id=", projectMetadata.getId() ); > + addListItem( "project.url=", projectMetadata.getUrl() ); > + addListItem( "project.name=", projectMetadata.getName() ); > + addListItem( "project.description=", > projectMetadata.getDescription() ); > + > + startListItem( "organization" ); > + if ( projectMetadata.getOrganization() != null ) > + { > + startList(); > + addListItem( "organization.name=", > projectMetadata.getOrganization().getName() ); > + addListItem( "organization.url=", > projectMetadata.getOrganization().getUrl() ); > + endList(); > + } > + endListItem(); > + > + startListItem( "issueManagement" ); > + if ( projectMetadata.getIssueManagement() != null ) > + { > + startList(); > + addListItem( "issueManagement.system=", > projectMetadata.getIssueManagement().getSystem() ); > + addListItem( "issueManagement.url=", > projectMetadata.getIssueManagement().getUrl() ); > + endList(); > + } > + endListItem(); > + > + startListItem( "scm" ); > + if ( projectMetadata.getScm() != null ) > + { > + startList(); > + addListItem( "scm.url=", projectMetadata.getScm().getUrl() ); > + addListItem( "scm.connection=", > projectMetadata.getScm().getConnection() ); > + addListItem( "scm.developer.connection=", > projectMetadata.getScm().getDeveloperConnection() ); > + endList(); > + } > + endListItem(); > + > + startListItem( "ciManagement" ); > + if ( projectMetadata.getCiManagement() != null ) > + { > + startList(); > + addListItem( "ciManagement.system=", > projectMetadata.getCiManagement().getSystem() ); > + addListItem( "ciManagement.url=", > projectMetadata.getCiManagement().getUrl() ); > + endList(); > + } > + endListItem(); > + > + startListItem( "licenses" ); > + if ( projectMetadata.getLicenses() != null ) > + { > + List<License> licenses = projectMetadata.getLicenses(); > + int ctr = 0; > + startList(); > + for ( License license : licenses ) > + { > + addListItem( "licenses." + ctr + ".name=", > license.getName() ); > + addListItem( "licenses." + ctr + ".url=", license.getUrl() > ); > + ctr++; > + } > + endList(); > + } > + endListItem(); > + > + startListItem( "mailingLists" ); > + if ( projectMetadata.getMailingLists() != null ) > + { > + List<MailingList> lists = projectMetadata.getMailingLists(); > + List<String> otherArchives; > + int ctr = 0; > + int archiveCtr = 0; > + > + startList(); > + for ( MailingList list : lists ) > + { > + addListItem( "mailingLists." + ctr + ".name=", > list.getName() ); > + addListItem( "mailingLists." + ctr + ".archive.url=", > list.getMainArchiveUrl() ); > + addListItem( "mailingLists." + ctr + ".post=", > list.getPostAddress() ); > + addListItem( "mailingLists." + ctr + ".subscribe=", > list.getSubscribeAddress() ); > + addListItem( "mailingLists." + ctr + ".unsubscribe=", > list.getUnsubscribeAddress() ); > + startListItem( "mailingLists." + ctr + ".otherArchives" ); > + > + if ( list.getOtherArchives() != null && > list.getOtherArchives().size() > 0 ) > + { > + archiveCtr = 0; > + otherArchives = list.getOtherArchives(); > + > + startList(); > + for ( String archive : otherArchives ) > + { > + addListItem( "mailingLists." + ctr + > ".otherArchives." + archiveCtr + "=", archive ); > + metadataEntries.append( archive ); > + archiveCtr++; > + } > + endList(); > + } > + endListItem(); > + ctr++; > + } > + endList(); > + } > + endListItem(); > + > + startListItem( "dependencies" ); > + if ( projectMetadata.getDependencies() != null ) > + { > + List<Dependency> dependencies = > projectMetadata.getDependencies(); > + int ctr = 0; > + > + startList(); > + for ( Dependency dependency : dependencies ) > + { > + addListItem( "dependency." + ctr + ".group.id=", > dependency.getGroupId() ); > + addListItem( "dependency." + ctr + ".artifact.id=", > dependency.getArtifactId() ); > + addListItem( "dependency." + ctr + ".version=", > dependency.getVersion() ); > + addListItem( "dependency." + ctr + ".classifier=", > dependency.getClassifier() ); > + addListItem( "dependency." + ctr + ".type=", > dependency.getType() ); > + addListItem( "dependency." + ctr + ".scope=", > dependency.getScope() ); > + addListItem( "dependency." + ctr + ".system.path=", > dependency.getSystemPath() ); > + ctr++; > + } > + endList(); > + } > + endListItem(); > + > + endList(); > + > + return metadataEntries.toString(); > + } > + > + private void startList() > + { > + metadataEntries.append( "\n<ul>" ); > + } > + > + private void endList() > + { > + metadataEntries.append( "\n</ul>" ); > + } > + > + private void addListItem( String label, String value ) > + { > + String newValue = StringUtils.isEmpty( value ) ? "" : value; > + metadataEntries.append( "\n<li>" ).append( label ).append( > newValue ).append( "</li>" ); > + } > + > + private void startListItem( String value ) > + { > + metadataEntries.append( "\n<li>" ).append( value ); > + } > + > + private void endListItem() > + { > + metadataEntries.append( "\n</li>" ); > + } > +} > + > > Propchange: > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/util/ProjectMetadataDisplayUtil.java > > ------------------------------------------------------------------------------ > svn:eol-style = native > > Modified: > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf > URL: > http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf?rev=947020&r1=947019&r2=947020&view=diff > > ============================================================================== > --- > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf > (original) > +++ > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/mailingLists.jspf > Fri May 21 14:22:15 2010 > @@ -22,64 +22,81 @@ > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> > <%@ taglib prefix="my" tagdir="/WEB-INF/tags" %> > > -<c:forEach items="${mailingLists}" var="mailingList"> > - <h3> > - ${mailingList.name} > - </h3> > - <%-- TODO: description > - <p> > - Description blah blah blah > - </p> > - --%> > - <ul> > - <c:if test="${!empty (mailingList.subscribeAddress)}"> > - <li> > - <b>Subscribe:</b> > - <a href="mailto: > ${mailingList.subscribeAddress}">${mailingList.subscribeAddress}</a> > - </li> > - </c:if> > - <c:if test="${!empty (mailingList.postAddress)}"> > - <li> > - <b>Post:</b> > - <a href="mailto: > ${mailingList.postAddress}">${mailingList.postAddress}</a> > - </li> > - </c:if> > - <c:if test="${!empty (mailingList.unsubscribeAddress)}"> > - <li> > - <b>Unsubscribe:</b> > - <a href="mailto: > ${mailingList.unsubscribeAddress}">${mailingList.unsubscribeAddress}</a> > - </li> > - </c:if> > - <%-- TODO: not in the POM yet > - <li> > - <b>List owner:</b> > - <a href="mailto: > ${mailingList.owner}">${mailingList.owner}</a> > - </li> > - --%> > - <c:if test="${!empty (mailingList.mainArchiveUrl)}"> > - <li> > - <b>Archive:</b> > - <ul> > - <li> > - <a > href="${mailingList.mainArchiveUrl}">${mailingList.mainArchiveUrl}</a> > - </li> > - </ul> > - </li> > - </c:if> > - <%-- <c:if test="${!empty (mailingList.otherArchives)}"> > - <li> > - <b>Other Archives:</b> > - <ul> > - <c:forEach items="${mailingList.otherArchives}" var="archive"> > - <li> > - <a href="${archive}">${archive}</a> > - </li> > - </c:forEach> > - </ul> > - </li> > - </c:if> --%> > - </ul> > -</c:forEach> > -<c:if test="${empty (mailingLists)}"> > - <strong>No mailing lists</strong> > -</c:if> > +<script type="text/javascript"> > + $(function() { > + $("#accordion2").accordion(); > + }); > +</script> > + > +<table class="infoTable"> > + <tr> > + <td> > + <div id="accordion2"> > + > + <c:forEach items="${mailingLists}" var="mailingList"> > + <h2> > + <a href="#">${mailingList.name}</a> > + </h2> > + <%-- TODO: description > + <p> > + Description blah blah blah > + </p> > + --%> > + <ul> > + <c:if test="${!empty (mailingList.subscribeAddress)}"> > + <li> > + <b>Subscribe:</b> > + <a href="mailto: > ${mailingList.subscribeAddress}">${mailingList.subscribeAddress}</a> > + </li> > + </c:if> > + <c:if test="${!empty (mailingList.postAddress)}"> > + <li> > + <b>Post:</b> > + <a href="mailto: > ${mailingList.postAddress}">${mailingList.postAddress}</a> > + </li> > + </c:if> > + <c:if test="${!empty (mailingList.unsubscribeAddress)}"> > + <li> > + <b>Unsubscribe:</b> > + <a href="mailto: > ${mailingList.unsubscribeAddress}">${mailingList.unsubscribeAddress}</a> > + </li> > + </c:if> > + <%-- TODO: not in the POM yet > + <li> > + <b>List owner:</b> > + <a href="mailto: > ${mailingList.owner}">${mailingList.owner}</a> > + </li> > + --%> > + <c:if test="${!empty (mailingList.mainArchiveUrl)}"> > + <li> > + <b>Archive:</b> > + <ul> > + <li> > + <a > href="${mailingList.mainArchiveUrl}">${mailingList.mainArchiveUrl}</a> > + </li> > + </ul> > + </li> > + </c:if> > + <%-- <c:if test="${!empty (mailingList.otherArchives)}"> > + <li> > + <b>Other Archives:</b> > + <ul> > + <c:forEach items="${mailingList.otherArchives}" > var="archive"> > + <li> > + <a href="${archive}">${archive}</a> > + </li> > + </c:forEach> > + </ul> > + </li> > + </c:if> --%> > + </ul> > + </c:forEach> > + </div> > + > + <c:if test="${empty (mailingLists)}"> > + <strong>No mailing lists</strong> > + </c:if> > + > + </td> > + </tr> > +</table> > > Modified: > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf > URL: > http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf?rev=947020&r1=947019&r2=947020&view=diff > > ============================================================================== > --- > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf > (original) > +++ > archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/include/projectMetadata.jspf > Fri May 21 14:22:15 2010 > @@ -22,12 +22,6 @@ > <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> > <%@ taglib prefix="archiva" uri="/WEB-INF/taglib.tld" %> > > -<script type="text/javascript"> > - $(function() { > - $("#accordion2").accordion(); > - }); > -</script> > - > <p> > <archiva:groupIdLink var="${groupId}" includeTop="true" /> > > @@ -41,240 +35,6 @@ > <strong>${version}</strong> > </p> > > -<c:if test="${!empty (projectMetadata.description)}"> > - <blockquote>${projectMetadata.description}</blockquote> > -</c:if> > - > -<table class="infoTable"> > - <tr> > - <th>Project Metadata ID</th> > - <td>${projectMetadata.id}</td> > - </tr> > - <tr> > - <th>URL</th> > - <td>${projectMetadata.url}</td> > - </tr> > - <tr> > - <th>Name</th> > - <td>${projectMetadata.name}</td> > - </tr> > - <tr> > - <th>Description</th> > - <td>${projectMetadata.description}</td> > - </tr> > -</table> > - > -<c:if test="${projectMetadata.organization != null || !empty > (projectMetadata.licenses) > - || projectMetadata.issueManagement != null || > projectMetadata.ciManagement != null }"> > - > - <h2>Other Details</h2> > - <table class="infoTable"> > - <c:if test="${projectMetadata.organization != null}"> > - <tr> > - <th>Organisation</th> > - <td> > - <c:choose> > - <c:when test="${projectMetadata.organization.url != null}"> > - <a href="${projectMetadata.organization.url}">${ > projectMetadata.organization.name}</a> > - </c:when> > - <c:otherwise> > - ${projectMetadata.organization.name} > - </c:otherwise> > - </c:choose> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (projectMetadata.licenses)}"> > - <c:forEach items="${projectMetadata.licenses}" var="license"> > - <tr> > - <th>License</th> > - <td> > - <c:choose> > - <c:when test="${!empty (license.url)}"> > - <a href="${license.url}">${license.name}</a> > - </c:when> > - <c:otherwise> > - ${license.name} > - </c:otherwise> > - </c:choose> > - </td> > - </tr> > - </c:forEach> > - </c:if> > - <c:if test="${projectMetadata.issueManagement != null}"> > - <tr> > - <th>Issue Tracker</th> > - <td> > - <c:choose> > - <c:when test="${!empty > (projectMetadata.issueManagement.url)}"> > - <a > href="${projectMetadata.issueManagement.url}">${projectMetadata.issueManagement.system}</a> > - </c:when> > - <c:otherwise> > - ${projectMetadata.issueManagement.system} > - </c:otherwise> > - </c:choose> > - </td> > - </tr> > - </c:if> > - <c:if test="${projectMetadata.ciManagement != null}"> > - <tr> > - <th>Continuous Integration</th> > - <td> > - <c:choose> > - <c:when test="${!empty (projectMetadata.ciManagement.url)}"> > - <a > href="${projectMetadata.ciManagement.url}">${projectMetadata.ciManagement.system}</a> > - </c:when> > - <c:otherwise> > - ${projectMetadata.ciManagement.system} > - </c:otherwise> > - </c:choose> > - </td> > - </tr> > - </c:if> > - </table> > -</c:if> > - > -<c:if test="${projectMetadata.scm != null}"> > - <h2>SCM</h2> > - <table class="infoTable"> > - <c:if test="${!empty (projectMetadata.scm.connection)}"> > - <tr> > - <th>Connection</th> > - <td> > - <code>${projectMetadata.scm.connection}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (projectMetadata.scm.developerConnection)}"> > - <tr> > - <th>Dev. Connection</th> > - <td> > - <code>${projectMetadata.scm.developerConnection}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (projectMetadata.scm.url)}"> > - <tr> > - <th>Viewer</th> > - <td> > - <a > href="${projectMetadata.scm.url}">${projectMetadata.scm.url}</a> > - </td> > - </tr> > - </c:if> > - </table> > -</c:if> > - > - > -<c:if test="${projectMetadata.mailingLists != null || > projectMetadata.dependencies != null}"> > - <div id="accordion2"> > - <c:if test="${!empty (projectMetadata.mailingLists)}"> > - <h2><a href="#">Mailing Lists</a></h2> > - <div> > - <c:forEach items="${projectMetadata.mailingLists}" > var="mailingList"> > - <h3>${mailingList.name}</h3> > - <table class="infoTable"> > - <c:if test="${!empty (mailingList.subscribeAddress)}"> > - <tr> > - <th>Subscribe</th> > - <td> > - <code>${mailingList.subscribeAddress}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (mailingList.postAddress)}"> > - <tr> > - <th>Post</th> > - <td> > - <code>${mailingList.postAddress}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (mailingList.unsubscribeAddress)}"> > - <tr> > - <th>Unsubscribe</th> > - <td> > - <code>${mailingList.unsubscribeAddress}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (mailingList.mainArchiveUrl)}"> > - <tr> > - <th>Archive</th> > - <td> > - <code>${mailingList.mainArchiveUrl}</code> > - </td> > - </tr> > - </c:if> > - </table> > - </c:forEach> > - </div> > - </c:if> > - > - <c:if test="${!empty (projectMetadata.dependencies)}"> > - <h2><a href="#">Dependencies</a></h2> > - <div> > - <c:forEach items="${projectMetadata.dependencies}" > var="dependency"> > - <h3>Dependency</h3> > - <table class="infoTable"> > - <c:if test="${!empty (dependency.groupId)}"> > - <tr> > - <th>Group ID</th> > - <td> > - <code>${dependency.groupId}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.artifactId)}"> > - <tr> > - <th>Artifact ID</th> > - <td> > - <code>${dependency.artifactId}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.version)}"> > - <tr> > - <th>Version</th> > - <td> > - <code>${dependency.version}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.classifier)}"> > - <tr> > - <th>Classifier</th> > - <td> > - <code>${dependency.classifier}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.type)}"> > - <tr> > - <th>Type</th> > - <td> > - <code>${dependency.type}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.scope)}"> > - <tr> > - <th>Scope</th> > - <td> > - <code>${dependency.scope}</code> > - </td> > - </tr> > - </c:if> > - <c:if test="${!empty (dependency.systemPath)}"> > - <tr> > - <th>System Path</th> > - <td> > - <code>${dependency.systemPath}</code> > - </td> > - </tr> > - </c:if> > - </table> > - </c:forEach> > - </div> > - </c:if> > - </div> > -</c:if> > +<div> > + ${metadataOutput} > +</div> > > >
