mirror of https://github.com/apache/archiva.git
rewrote browse to match white site
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@424215 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
9818d93f30
commit
57bf8e097a
|
@ -18,9 +18,11 @@ package org.apache.maven.repository.indexing;
|
||||||
|
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.document.Field;
|
import org.apache.lucene.document.Field;
|
||||||
|
import org.apache.lucene.index.IndexReader;
|
||||||
import org.apache.lucene.index.Term;
|
import org.apache.lucene.index.Term;
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||||
import org.apache.maven.repository.digest.Digester;
|
import org.apache.maven.repository.digest.Digester;
|
||||||
import org.apache.maven.repository.digest.DigesterException;
|
import org.apache.maven.repository.digest.DigesterException;
|
||||||
|
|
||||||
|
@ -29,8 +31,10 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
|
@ -74,7 +78,7 @@ public class ArtifactRepositoryIndex
|
||||||
{
|
{
|
||||||
deleteDocuments( getTermList( artifactList ) );
|
deleteDocuments( getTermList( artifactList ) );
|
||||||
}
|
}
|
||||||
catch( IOException e )
|
catch ( IOException e )
|
||||||
{
|
{
|
||||||
throw new RepositoryIndexException( "Failed to delete an index document", e );
|
throw new RepositoryIndexException( "Failed to delete an index document", e );
|
||||||
}
|
}
|
||||||
|
@ -254,4 +258,87 @@ public class ArtifactRepositoryIndex
|
||||||
files.append( name ).append( "\n" );
|
files.append( name ).append( "\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List enumerateGroupIds()
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
IndexReader indexReader = IndexReader.open( getIndexPath() );
|
||||||
|
|
||||||
|
Set groups = new HashSet();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < indexReader.numDocs(); i ++ )
|
||||||
|
{
|
||||||
|
Document doc = indexReader.document( i );
|
||||||
|
groups.add( doc.getField( FLD_GROUPID ).stringValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
indexReader.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
List sortedGroups = new ArrayList( groups );
|
||||||
|
Collections.sort( sortedGroups );
|
||||||
|
return sortedGroups;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getArtifacts( String groupId )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
IndexReader indexReader = IndexReader.open( getIndexPath() );
|
||||||
|
|
||||||
|
Set artifactIds = new HashSet();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < indexReader.numDocs(); i ++ )
|
||||||
|
{
|
||||||
|
Document doc = indexReader.document( i );
|
||||||
|
if ( doc.getField( FLD_GROUPID ).stringValue().equals( groupId ) )
|
||||||
|
{
|
||||||
|
artifactIds.add( doc.getField( FLD_ARTIFACTID ).stringValue() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
indexReader.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
List sortedArtifactIds = new ArrayList( artifactIds );
|
||||||
|
Collections.sort( sortedArtifactIds );
|
||||||
|
return sortedArtifactIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getVersions( String groupId, String artifactId )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
IndexReader indexReader = IndexReader.open( getIndexPath() );
|
||||||
|
|
||||||
|
Set versions = new HashSet();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < indexReader.numDocs(); i ++ )
|
||||||
|
{
|
||||||
|
Document doc = indexReader.document( i );
|
||||||
|
if ( doc.getField( FLD_GROUPID ).stringValue().equals( groupId ) &&
|
||||||
|
doc.getField( FLD_ARTIFACTID ).stringValue().equals( artifactId ) )
|
||||||
|
{
|
||||||
|
// DefaultArtifactVersion is used for correct ordering
|
||||||
|
versions.add( new DefaultArtifactVersion( doc.getField( FLD_VERSION ).stringValue() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
indexReader.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
List sortedVersions = new ArrayList( versions );
|
||||||
|
Collections.sort( sortedVersions );
|
||||||
|
return sortedVersions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,10 @@
|
||||||
<!-- TODO: actually, just exclude from WAR plugin -->
|
<!-- TODO: actually, just exclude from WAR plugin -->
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-project</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<finalName>maven-repository-webapp</finalName>
|
<finalName>maven-repository-webapp</finalName>
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
package org.apache.maven.repository.manager.web.action;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright 2005-2006 The Apache Software Foundation.
|
|
||||||
*
|
|
||||||
* Licensed 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 com.opensymphony.webwork.interceptor.ParameterAware;
|
|
||||||
import com.opensymphony.xwork.ActionSupport;
|
|
||||||
import org.apache.maven.repository.configuration.Configuration;
|
|
||||||
import org.apache.maven.repository.configuration.ConfigurationStore;
|
|
||||||
import org.apache.maven.repository.manager.web.utils.ConfigurationManager;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the Action class of index.jsp, which is the initial page of the web application.
|
|
||||||
* It invokes the DiscovererScheduler to set the DiscoverJob in the scheduler.
|
|
||||||
*
|
|
||||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="baseAction"
|
|
||||||
* @todo don't like this as a base and as a forwarding action!
|
|
||||||
*/
|
|
||||||
public class BaseAction
|
|
||||||
extends ActionSupport
|
|
||||||
implements ParameterAware
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @plexus.requirement
|
|
||||||
*/
|
|
||||||
private ConfigurationStore configurationStore;
|
|
||||||
|
|
||||||
private Map parameters;
|
|
||||||
|
|
||||||
public Map getParameters()
|
|
||||||
{
|
|
||||||
return parameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setParameters( Map parameters )
|
|
||||||
{
|
|
||||||
this.parameters = parameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that executes the action
|
|
||||||
*
|
|
||||||
* @return a String that specifies if the action executed was a success or a failure
|
|
||||||
*/
|
|
||||||
public String execute()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Configuration config = configurationStore.getConfigurationFromStore();
|
|
||||||
Map parameters = new HashMap();
|
|
||||||
parameters.put( ConfigurationManager.INDEXPATH, config.getIndexPath() );
|
|
||||||
parameters.put( ConfigurationManager.MIN_INDEXPATH, config.getMinimalIndexPath() );
|
|
||||||
parameters.put( ConfigurationManager.DISCOVERY_BLACKLIST_PATTERNS, config.getDiscoveryBlackListPatterns() );
|
|
||||||
parameters.put( ConfigurationManager.DISCOVER_SNAPSHOTS, Boolean.valueOf( config.isDiscoverSnapshots() ) );
|
|
||||||
parameters.put( ConfigurationManager.DISCOVERY_CRON_EXPRESSION, config.getIndexerCronExpression() );
|
|
||||||
this.parameters = parameters;
|
|
||||||
|
|
||||||
//Configuration configuration = new Configuration(); // TODO!
|
|
||||||
// execution.executeDiscovererIfIndexDoesNotExist( new File( config.getIndexPath() ) );
|
|
||||||
}
|
|
||||||
catch ( Exception e )
|
|
||||||
{
|
|
||||||
// TODO: better exception handling!
|
|
||||||
e.printStackTrace();
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,316 @@
|
||||||
|
package org.apache.maven.repository.manager.web.action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.opensymphony.xwork.ActionSupport;
|
||||||
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
|
import org.apache.maven.repository.configuration.Configuration;
|
||||||
|
import org.apache.maven.repository.configuration.ConfigurationStore;
|
||||||
|
import org.apache.maven.repository.configuration.ConfigurationStoreException;
|
||||||
|
import org.apache.maven.repository.configuration.ConfiguredRepositoryFactory;
|
||||||
|
import org.apache.maven.repository.indexing.ArtifactRepositoryIndex;
|
||||||
|
import org.apache.maven.repository.indexing.RepositoryIndexException;
|
||||||
|
import org.apache.maven.repository.indexing.RepositoryIndexSearchLayer;
|
||||||
|
import org.apache.maven.repository.indexing.RepositoryIndexingFactory;
|
||||||
|
import org.codehaus.plexus.util.StringUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Browse the repository.
|
||||||
|
*
|
||||||
|
* @todo the tree part probably belongs in a browsing component, along with the methods currently in the indexer
|
||||||
|
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="browseAction"
|
||||||
|
*/
|
||||||
|
public class BrowseAction
|
||||||
|
extends ActionSupport
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private RepositoryIndexingFactory factory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private RepositoryIndexSearchLayer searchLayer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ConfiguredRepositoryFactory repositoryFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ConfigurationStore configurationStore;
|
||||||
|
|
||||||
|
private List groups;
|
||||||
|
|
||||||
|
private String groupId;
|
||||||
|
|
||||||
|
private static final String GROUP_SEPARATOR = "/";
|
||||||
|
|
||||||
|
private List artifactIds;
|
||||||
|
|
||||||
|
private String artifactId;
|
||||||
|
|
||||||
|
private List versions;
|
||||||
|
|
||||||
|
public String browse()
|
||||||
|
throws ConfigurationStoreException, RepositoryIndexException, IOException
|
||||||
|
{
|
||||||
|
ArtifactRepositoryIndex index = getIndex();
|
||||||
|
|
||||||
|
if ( !index.indexExists() )
|
||||||
|
{
|
||||||
|
addActionError( "The repository is not yet indexed. Please wait, and then try again." );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupTreeNode rootNode = buildGroupTree( index );
|
||||||
|
|
||||||
|
this.groups = collateGroups( rootNode );
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String browseGroup()
|
||||||
|
throws ConfigurationStoreException, RepositoryIndexException, IOException
|
||||||
|
{
|
||||||
|
ArtifactRepositoryIndex index = getIndex();
|
||||||
|
|
||||||
|
if ( !index.indexExists() )
|
||||||
|
{
|
||||||
|
addActionError( "The repository is not yet indexed. Please wait, and then try again." );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupTreeNode rootNode = buildGroupTree( index );
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( groupId ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a group ID to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringTokenizer tok = new StringTokenizer( groupId, GROUP_SEPARATOR );
|
||||||
|
while ( tok.hasMoreTokens() )
|
||||||
|
{
|
||||||
|
String part = tok.nextToken();
|
||||||
|
|
||||||
|
if ( !rootNode.getChildren().containsKey( part ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "The group specified was not found" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rootNode = (GroupTreeNode) rootNode.getChildren().get( part );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.groups = collateGroups( rootNode );
|
||||||
|
|
||||||
|
this.artifactIds = index.getArtifacts( groupId.replaceAll( GROUP_SEPARATOR, "." ) );
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String browseArtifact()
|
||||||
|
throws ConfigurationStoreException, RepositoryIndexException, IOException
|
||||||
|
{
|
||||||
|
ArtifactRepositoryIndex index = getIndex();
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( groupId ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a group ID to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( artifactId ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a artifact ID to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
versions = index.getVersions( groupId.replaceAll( GROUP_SEPARATOR, "." ), artifactId );
|
||||||
|
|
||||||
|
if ( versions.isEmpty() )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "Could not find any artifacts with the given group and artifact ID" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private GroupTreeNode buildGroupTree( ArtifactRepositoryIndex index )
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
// TODO: give action message if indexing is in progress
|
||||||
|
|
||||||
|
// TODO: this will be inefficient over a very large number of artifacts, should be cached
|
||||||
|
|
||||||
|
List groups = index.enumerateGroupIds();
|
||||||
|
|
||||||
|
GroupTreeNode rootNode = new GroupTreeNode();
|
||||||
|
|
||||||
|
// build a tree structure
|
||||||
|
for ( Iterator i = groups.iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
String groupId = (String) i.next();
|
||||||
|
|
||||||
|
StringTokenizer tok = new StringTokenizer( groupId, "." );
|
||||||
|
|
||||||
|
GroupTreeNode node = rootNode;
|
||||||
|
|
||||||
|
while ( tok.hasMoreTokens() )
|
||||||
|
{
|
||||||
|
String part = tok.nextToken();
|
||||||
|
|
||||||
|
if ( !node.getChildren().containsKey( part ) )
|
||||||
|
{
|
||||||
|
GroupTreeNode newNode = new GroupTreeNode( part, node );
|
||||||
|
node.addChild( newNode );
|
||||||
|
node = newNode;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node = (GroupTreeNode) node.getChildren().get( part );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rootNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List collateGroups( GroupTreeNode rootNode )
|
||||||
|
{
|
||||||
|
List groups = new ArrayList();
|
||||||
|
for ( Iterator i = rootNode.getChildren().values().iterator(); i.hasNext(); )
|
||||||
|
{
|
||||||
|
GroupTreeNode node = (GroupTreeNode) i.next();
|
||||||
|
|
||||||
|
while ( node.getChildren().size() == 1 )
|
||||||
|
{
|
||||||
|
node = (GroupTreeNode) node.getChildren().values().iterator().next();
|
||||||
|
}
|
||||||
|
|
||||||
|
groups.add( node.getFullName() );
|
||||||
|
}
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArtifactRepositoryIndex getIndex()
|
||||||
|
throws ConfigurationStoreException, RepositoryIndexException
|
||||||
|
{
|
||||||
|
Configuration configuration = configurationStore.getConfigurationFromStore();
|
||||||
|
File indexPath = new File( configuration.getIndexPath() );
|
||||||
|
|
||||||
|
ArtifactRepository repository = repositoryFactory.createRepository( configuration );
|
||||||
|
|
||||||
|
return factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getGroups()
|
||||||
|
{
|
||||||
|
return groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getArtifactIds()
|
||||||
|
{
|
||||||
|
return artifactIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupId()
|
||||||
|
{
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupId( String groupId )
|
||||||
|
{
|
||||||
|
this.groupId = groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArtifactId()
|
||||||
|
{
|
||||||
|
return artifactId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArtifactId( String artifactId )
|
||||||
|
{
|
||||||
|
this.artifactId = artifactId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List getVersions()
|
||||||
|
{
|
||||||
|
return versions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class GroupTreeNode
|
||||||
|
{
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
private final String fullName;
|
||||||
|
|
||||||
|
private final Map children = new TreeMap();
|
||||||
|
|
||||||
|
GroupTreeNode()
|
||||||
|
{
|
||||||
|
name = null;
|
||||||
|
fullName = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
GroupTreeNode( String name, GroupTreeNode parent )
|
||||||
|
{
|
||||||
|
this.name = name;
|
||||||
|
this.fullName = parent.fullName != null ? parent.fullName + GROUP_SEPARATOR + name : name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFullName()
|
||||||
|
{
|
||||||
|
return fullName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map getChildren()
|
||||||
|
{
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addChild( GroupTreeNode newNode )
|
||||||
|
{
|
||||||
|
children.put( newNode.name, newNode );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,147 +0,0 @@
|
||||||
package org.apache.maven.repository.manager.web.action;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright 2005-2006 The Apache Software Foundation.
|
|
||||||
*
|
|
||||||
* Licensed 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 com.opensymphony.xwork.Action;
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
|
|
||||||
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
|
|
||||||
import org.apache.maven.repository.discovery.ArtifactDiscoverer;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Browse the repository.
|
|
||||||
*
|
|
||||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="org.apache.maven.repository.manager.web.action.RepositoryBrowseAction"
|
|
||||||
*/
|
|
||||||
public class RepositoryBrowseAction
|
|
||||||
implements Action
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @plexus.requirement role-hint="default"
|
|
||||||
*/
|
|
||||||
private ArtifactDiscoverer discoverer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @plexus.requirement
|
|
||||||
*/
|
|
||||||
private ArtifactRepositoryFactory repositoryFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @plexus.requirement role-hint="default"
|
|
||||||
*/
|
|
||||||
private ArtifactRepositoryLayout layout;
|
|
||||||
|
|
||||||
private String group;
|
|
||||||
|
|
||||||
private Map artifactMap;
|
|
||||||
|
|
||||||
private String folder;
|
|
||||||
|
|
||||||
private int idx;
|
|
||||||
|
|
||||||
public String execute()
|
|
||||||
{
|
|
||||||
// TODO! fix hardcoded path
|
|
||||||
String path = "E:/jeprox/maven-repository-manager/trunk/maven-repository-discovery/src/test/repository";
|
|
||||||
|
|
||||||
ArtifactRepository repository =
|
|
||||||
repositoryFactory.createArtifactRepository( "discoveryRepo", "file://" + path, layout, null, null );
|
|
||||||
|
|
||||||
List artifacts = discoverer.discoverArtifacts( repository, null, true );
|
|
||||||
|
|
||||||
Iterator iterator = artifacts.iterator();
|
|
||||||
|
|
||||||
artifactMap = new TreeMap();
|
|
||||||
|
|
||||||
while ( iterator.hasNext() )
|
|
||||||
{
|
|
||||||
Artifact artifact = (Artifact) iterator.next();
|
|
||||||
|
|
||||||
String groupId = artifact.getGroupId();
|
|
||||||
|
|
||||||
String key = groupId.replace( '.', '/' ) + "/" + artifact.getArtifactId() + "/" + artifact.getVersion();
|
|
||||||
|
|
||||||
List artifactList;
|
|
||||||
|
|
||||||
if ( artifactMap.containsKey( key ) )
|
|
||||||
{
|
|
||||||
artifactList = (List) artifactMap.get( key );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
artifactList = new ArrayList();
|
|
||||||
}
|
|
||||||
|
|
||||||
artifactList.add( artifact );
|
|
||||||
|
|
||||||
Collections.sort( artifactList );
|
|
||||||
|
|
||||||
artifactMap.put( key, artifactList );
|
|
||||||
}
|
|
||||||
|
|
||||||
//set the index for folder level to be displayed
|
|
||||||
idx = 1;
|
|
||||||
|
|
||||||
folder = "";
|
|
||||||
|
|
||||||
return SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map getArtifactMap()
|
|
||||||
{
|
|
||||||
return artifactMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGroup()
|
|
||||||
{
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroup( String group )
|
|
||||||
{
|
|
||||||
this.group = group;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFolder()
|
|
||||||
{
|
|
||||||
return folder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFolder( String folder )
|
|
||||||
{
|
|
||||||
this.folder = folder;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIdx()
|
|
||||||
{
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIdx( int index )
|
|
||||||
{
|
|
||||||
this.idx = index;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -32,10 +32,9 @@ import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for searchString in all indexed fields.
|
* Search all indexed fields by the given criteria.
|
||||||
*
|
*
|
||||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="searchAction"
|
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="searchAction"
|
||||||
*/
|
*/
|
||||||
|
@ -72,11 +71,6 @@ public class SearchAction
|
||||||
*/
|
*/
|
||||||
private ConfiguredRepositoryFactory repositoryFactory;
|
private ConfiguredRepositoryFactory repositoryFactory;
|
||||||
|
|
||||||
/**
|
|
||||||
* @plexus.requirement role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout"
|
|
||||||
*/
|
|
||||||
private Map repositoryLayouts;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement
|
* @plexus.requirement
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
package org.apache.maven.repository.manager.web.action;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
*
|
||||||
|
* Licensed 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 com.opensymphony.xwork.ActionSupport;
|
||||||
|
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.Model;
|
||||||
|
import org.apache.maven.project.MavenProject;
|
||||||
|
import org.apache.maven.project.MavenProjectBuilder;
|
||||||
|
import org.apache.maven.project.ProjectBuildingException;
|
||||||
|
import org.apache.maven.repository.configuration.Configuration;
|
||||||
|
import org.apache.maven.repository.configuration.ConfigurationStore;
|
||||||
|
import org.apache.maven.repository.configuration.ConfigurationStoreException;
|
||||||
|
import org.apache.maven.repository.configuration.ConfiguredRepositoryFactory;
|
||||||
|
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.Collections;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Browse the repository.
|
||||||
|
*
|
||||||
|
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="showArtifactAction"
|
||||||
|
*/
|
||||||
|
public class ShowArtifactAction
|
||||||
|
extends ActionSupport
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ArtifactFactory artifactFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ConfiguredRepositoryFactory repositoryFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private MavenProjectBuilder projectBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ConfigurationStore configurationStore;
|
||||||
|
|
||||||
|
private String groupId;
|
||||||
|
|
||||||
|
private String artifactId;
|
||||||
|
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
private Model model;
|
||||||
|
|
||||||
|
public String execute()
|
||||||
|
throws ConfigurationStoreException, IOException, XmlPullParserException, ProjectBuildingException
|
||||||
|
{
|
||||||
|
Configuration configuration = configurationStore.getConfigurationFromStore();
|
||||||
|
ArtifactRepository repository = repositoryFactory.createRepository( configuration );
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( groupId ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a group ID to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( artifactId ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a artifact ID to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( StringUtils.isEmpty( version ) )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "You must specify a version to browse" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
Artifact artifact = artifactFactory.createProjectArtifact( groupId, artifactId, version );
|
||||||
|
// TODO: is this going to be problematic because repository is remote format, but being used as local?
|
||||||
|
// TODO: should it try to use the repo manager as a remote repo, proxying out?
|
||||||
|
// TODO: maybe we can decouple the assembly parts of the project builder from the repository handling
|
||||||
|
MavenProject project = projectBuilder.buildFromRepository( artifact, Collections.EMPTY_LIST, repository );
|
||||||
|
|
||||||
|
if ( !new File( repository.getBasedir(), repository.pathOf( artifact ) ).exists() )
|
||||||
|
{
|
||||||
|
// TODO: i18n
|
||||||
|
addActionError( "The given artifact was not found in the repository" );
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
model = project.getModel();
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Model getModel()
|
||||||
|
{
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroupId()
|
||||||
|
{
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupId( String groupId )
|
||||||
|
{
|
||||||
|
this.groupId = groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getArtifactId()
|
||||||
|
{
|
||||||
|
return artifactId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArtifactId( String artifactId )
|
||||||
|
{
|
||||||
|
this.artifactId = artifactId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVersion()
|
||||||
|
{
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVersion( String version )
|
||||||
|
{
|
||||||
|
this.version = version;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,220 +0,0 @@
|
||||||
package org.apache.maven.repository.manager.web.utils;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright 2006 The Apache Software Foundation.
|
|
||||||
*
|
|
||||||
* Licensed 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.repository.configuration.Configuration;
|
|
||||||
import org.apache.maven.repository.configuration.io.xpp3.ConfigurationXpp3Reader;
|
|
||||||
import org.apache.maven.repository.configuration.io.xpp3.ConfigurationXpp3Writer;
|
|
||||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.Writer;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class updates/sets the configuration values in the mrm-admin-config.xml file used
|
|
||||||
* for discovery and indexing.
|
|
||||||
*
|
|
||||||
* @plexus.component role="org.apache.maven.repository.manager.web.utils.ConfigurationManager"
|
|
||||||
*/
|
|
||||||
public class ConfigurationManager
|
|
||||||
{
|
|
||||||
public static final String WEB_XML_FILE = "web.xml";
|
|
||||||
|
|
||||||
public static final String INDEX_CONFIG_FILE = "mrm-admin-config.xml";
|
|
||||||
|
|
||||||
public static final String DISCOVER_SNAPSHOTS = "discoverSnapshots";
|
|
||||||
|
|
||||||
public static final String DISCOVERY_CRON_EXPRESSION = "discoveryCronExpression";
|
|
||||||
|
|
||||||
public static final String INDEXPATH = "indexPath";
|
|
||||||
|
|
||||||
public static final String MIN_INDEXPATH = "minimalIndexPath";
|
|
||||||
|
|
||||||
public static final String REPOSITORY_LAYOUT = "repositoryLayout";
|
|
||||||
|
|
||||||
public static final String REPOSITORY_DIRECTORY = "repositoryDirectory";
|
|
||||||
|
|
||||||
public static final String DISCOVERY_BLACKLIST_PATTERNS = "discoveryBlacklistPatterns";
|
|
||||||
|
|
||||||
private Configuration config;
|
|
||||||
|
|
||||||
private File plexusDescriptor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method for updating the configuration in mrm-admin-config.xml
|
|
||||||
*
|
|
||||||
* @param map contains the fields and the values to be updated in the configuration
|
|
||||||
*/
|
|
||||||
public void updateConfiguration( Map map )
|
|
||||||
throws IOException
|
|
||||||
{
|
|
||||||
File file = getConfigFile();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
config = readXmlDocument( file );
|
|
||||||
}
|
|
||||||
catch ( XmlPullParserException de )
|
|
||||||
{
|
|
||||||
// TODO!
|
|
||||||
de.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( Iterator iter = map.entrySet().iterator(); iter.hasNext(); )
|
|
||||||
{
|
|
||||||
Map.Entry entry = (Map.Entry) iter.next();
|
|
||||||
String name = (String) entry.getKey();
|
|
||||||
String value = (String) entry.getValue();
|
|
||||||
|
|
||||||
if ( name.equals( DISCOVERY_CRON_EXPRESSION ) )
|
|
||||||
{
|
|
||||||
config.setIndexerCronExpression( value );
|
|
||||||
}
|
|
||||||
if ( name.equals( REPOSITORY_LAYOUT ) )
|
|
||||||
{
|
|
||||||
config.setRepositoryLayout( value );
|
|
||||||
}
|
|
||||||
if ( name.equals( DISCOVER_SNAPSHOTS ) )
|
|
||||||
{
|
|
||||||
config.setDiscoverSnapshots( Boolean.valueOf( value ).booleanValue() );
|
|
||||||
}
|
|
||||||
if ( name.equals( REPOSITORY_DIRECTORY ) )
|
|
||||||
{
|
|
||||||
config.setRepositoryDirectory( value );
|
|
||||||
}
|
|
||||||
if ( name.equals( INDEXPATH ) )
|
|
||||||
{
|
|
||||||
config.setIndexPath( value );
|
|
||||||
}
|
|
||||||
if ( name.equals( MIN_INDEXPATH ) )
|
|
||||||
{
|
|
||||||
config.setMinimalIndexPath( value );
|
|
||||||
}
|
|
||||||
if ( name.equals( DISCOVERY_BLACKLIST_PATTERNS ) )
|
|
||||||
{
|
|
||||||
config.setDiscoveryBlackListPatterns( value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
writeXmlDocument( getConfigFile() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that gets the properties set in the mrm-admin-config.xml for the configuration fields
|
|
||||||
* used in the schedule, indexing and discovery
|
|
||||||
*
|
|
||||||
* @return a Map that contains the elements in the properties of the configuration object
|
|
||||||
*/
|
|
||||||
public Configuration getConfiguration()
|
|
||||||
throws IOException
|
|
||||||
{
|
|
||||||
File file = getConfigFile();
|
|
||||||
config = new Configuration();
|
|
||||||
|
|
||||||
if ( file != null )
|
|
||||||
{
|
|
||||||
if ( !file.exists() )
|
|
||||||
{
|
|
||||||
writeXmlDocument( getConfigFile() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
config = readXmlDocument( file );
|
|
||||||
}
|
|
||||||
catch ( XmlPullParserException xe )
|
|
||||||
{
|
|
||||||
// TODO: fix error handling!
|
|
||||||
xe.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that reads the xml file and returns a Configuration object
|
|
||||||
*
|
|
||||||
* @param file the xml file to be read
|
|
||||||
* @return a Document object that represents the contents of the xml file
|
|
||||||
* @throws FileNotFoundException
|
|
||||||
* @throws IOException
|
|
||||||
* @throws XmlPullParserException
|
|
||||||
*/
|
|
||||||
protected Configuration readXmlDocument( File file )
|
|
||||||
throws IOException, XmlPullParserException
|
|
||||||
{
|
|
||||||
ConfigurationXpp3Reader configReader = new ConfigurationXpp3Reader();
|
|
||||||
Reader reader = new FileReader( file );
|
|
||||||
Configuration config = configReader.read( reader );
|
|
||||||
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method for writing the configuration into the xml file
|
|
||||||
*
|
|
||||||
* @param file the file where the document will be written to
|
|
||||||
*/
|
|
||||||
protected void writeXmlDocument( File file )
|
|
||||||
throws IOException
|
|
||||||
{
|
|
||||||
Writer writer = new FileWriter( file );
|
|
||||||
ConfigurationXpp3Writer configWriter = new ConfigurationXpp3Writer();
|
|
||||||
configWriter.write( writer, config );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method that returns the mrm-admin-config.xml file
|
|
||||||
*
|
|
||||||
* @return a File that references the plexus.xml
|
|
||||||
*/
|
|
||||||
protected File getConfigFile()
|
|
||||||
{
|
|
||||||
URL indexConfigXml = getClass().getClassLoader().getResource( "../" + INDEX_CONFIG_FILE );
|
|
||||||
|
|
||||||
if ( indexConfigXml != null )
|
|
||||||
{
|
|
||||||
plexusDescriptor = new File( indexConfigXml.getFile() );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
URL xmlPath = getClass().getClassLoader().getResource( "../" + WEB_XML_FILE );
|
|
||||||
if ( xmlPath != null )
|
|
||||||
{
|
|
||||||
String path = xmlPath.getFile();
|
|
||||||
int lastIndex = path.lastIndexOf( '/' );
|
|
||||||
path = path.substring( 0, lastIndex + 1 );
|
|
||||||
path = path + INDEX_CONFIG_FILE;
|
|
||||||
plexusDescriptor = new File( path );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return plexusDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -39,6 +39,7 @@
|
||||||
<global-results>
|
<global-results>
|
||||||
<!-- TODO: might want an extra message on the configure page when this first happens -->
|
<!-- TODO: might want an extra message on the configure page when this first happens -->
|
||||||
<result name="config-needed" type="redirect">/admin/configure.action</result>
|
<result name="config-needed" type="redirect">/admin/configure.action</result>
|
||||||
|
<result name="error">/WEB-INF/jsp/generalError.jsp</result>
|
||||||
</global-results>
|
</global-results>
|
||||||
|
|
||||||
<action name="index" class="searchAction" method="input">
|
<action name="index" class="searchAction" method="input">
|
||||||
|
@ -61,6 +62,22 @@
|
||||||
<result name="error">/WEB-INF/jsp/findArtifact.jsp</result>
|
<result name="error">/WEB-INF/jsp/findArtifact.jsp</result>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
|
<action name="browse" class="browseAction" method="browse">
|
||||||
|
<result>/WEB-INF/jsp/browse.jsp</result>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="browseGroup" class="browseAction" method="browseGroup">
|
||||||
|
<result>/WEB-INF/jsp/browseGroup.jsp</result>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="browseArtifact" class="browseAction" method="browseArtifact">
|
||||||
|
<result>/WEB-INF/jsp/browseArtifact.jsp</result>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="showArtifact" class="showArtifactAction">
|
||||||
|
<result>/WEB-INF/jsp/showArtifact.jsp</result>
|
||||||
|
</action>
|
||||||
|
|
||||||
<!-- TODO! old actions
|
<!-- TODO! old actions
|
||||||
<action name="proxy" class="org.apache.maven.repository.proxy.web.action.RepositoryProxyAction">
|
<action name="proxy" class="org.apache.maven.repository.proxy.web.action.RepositoryProxyAction">
|
||||||
<result name="success" type="stream">
|
<result name="success" type="stream">
|
||||||
|
@ -71,11 +88,6 @@
|
||||||
<result name="notFound" type="dispatcher">notFoundError</result>
|
<result name="notFound" type="dispatcher">notFoundError</result>
|
||||||
<result name="proxyError" type="dispatcher">proxyError</result>
|
<result name="proxyError" type="dispatcher">proxyError</result>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
<action name="browse" class="org.apache.maven.repository.manager.web.action.RepositoryBrowseAction">
|
|
||||||
<result name="success" type="dispatcher">/WEB-INF/jsp/browse.jsp</result>
|
|
||||||
<result name="error" type="dispatcher">/WEB-INF/jsp/browse.jsp</result>
|
|
||||||
</action>
|
|
||||||
-->
|
-->
|
||||||
</package>
|
</package>
|
||||||
|
|
||||||
|
|
|
@ -14,96 +14,61 @@
|
||||||
~ limitations under the License.
|
~ limitations under the License.
|
||||||
--%>
|
--%>
|
||||||
|
|
||||||
<%@ taglib uri="webwork" prefix="ww" %>
|
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Repository Browser</title>
|
<title>Browse Repository</title>
|
||||||
|
<ww:head />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h3><a href="<ww:url value="browse!edit.action"><ww:param name="idx" value="0"/></ww:url>">basedir</a> /
|
|
||||||
<ww:set name="previousFolder" value="''" />
|
|
||||||
<ww:set name="counter" value="0" />
|
|
||||||
<ww:if test="folder != ''">
|
|
||||||
<ww:set name="folderHeader" value="folder.split('/')" />
|
|
||||||
<ww:iterator value="#folderHeader">
|
|
||||||
<ww:set name="counter" value="#counter + 1" />
|
|
||||||
<ww:if test="#previousFolder == ''">
|
|
||||||
<ww:set name="previousFolder" value="top" />
|
|
||||||
</ww:if>
|
|
||||||
<ww:else>
|
|
||||||
<ww:set name="previousFolder" value="#previousFolder + '/' + top" />
|
|
||||||
</ww:else>
|
|
||||||
<ww:if test="idx > (#counter + 1)"><a href="<ww:url value="browse!edit.action"><ww:param name="idx"><ww:property
|
|
||||||
value="#counter" /></ww:param><ww:param name="folder"></ww:param></ww:url>"></ww:if><ww:property /></a> /
|
|
||||||
</ww:iterator>
|
|
||||||
</ww:if>
|
|
||||||
</h3>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
<ww:set name="previousFolder" value="'the previous folder'"/>
|
<h1>Browse Repository</h1>
|
||||||
<ww:set name="in" value="idx" scope="page"/>
|
|
||||||
<ww:iterator value="artifactMap.keySet().iterator()">
|
|
||||||
<ww:set name="groupName" value="top"/>
|
|
||||||
<ww:if test="idx == 1 || (folder != '' and #groupName.startsWith(folder))">
|
|
||||||
<%
|
|
||||||
|
|
||||||
|
<div id="contentArea">
|
||||||
|
<div id="nameColumn">
|
||||||
|
<h2>Groups</h2>
|
||||||
|
<ul>
|
||||||
|
<ww:set name="groups" value="groups" />
|
||||||
|
<c:forEach items="${groups}" var="groupId">
|
||||||
|
<ww:url id="url" action="browseGroup" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${groupId}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<li><a href="${url}">${groupId}/</a></li>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
int ctr = 1;
|
<%-- TODO: later, when supported in metadata
|
||||||
|
<div id="categoryColumn">
|
||||||
|
<h2>Category</h2>
|
||||||
%>
|
<table>
|
||||||
<ww:set name="groupFolder" value="#groupName.split('/')"/>
|
<tr>
|
||||||
<ww:iterator value="#groupFolder">
|
<td>
|
||||||
<%
|
<a href="#">Java</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
if (ctr == ((Integer)pageContext.getAttribute("in")).intValue()) {
|
|
||||||
|
|
||||||
%>
|
|
||||||
<ww:if test="top != #previousFolder">
|
|
||||||
<ww:set name="previousFolder" value="top"/>
|
|
||||||
<a href="<ww:url value="browse!edit.action"><ww:param name="folder"><ww:property value="folder"/><ww:if test="folder != ''">/</ww:if><ww:property/></ww:param><ww:param name="idx" value="idx"/></ww:url>"">
|
|
||||||
<ww:property/>/
|
|
||||||
</ a><br>
|
|
||||||
</ww:if>
|
|
||||||
<%
|
|
||||||
}
|
|
||||||
ctr++;
|
|
||||||
%>
|
|
||||||
</ww:iterator>
|
|
||||||
</ww:if>
|
|
||||||
</ww:iterator>
|
|
||||||
|
|
||||||
<ww:if test="folder != ''">
|
|
||||||
<ww:set name="previousFolder" value="''" />
|
|
||||||
<ww:set name="artifactList" value="artifactMap.get(folder)" />
|
|
||||||
<ww:iterator value="#artifactList">
|
|
||||||
<table border="1">
|
|
||||||
<tr align="left">
|
|
||||||
<th>Group ID</th>
|
|
||||||
<td><ww:property value="groupId" /></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr align="left">
|
<tr>
|
||||||
<th>Artifact ID</th>
|
<td>
|
||||||
<td><ww:property value="artifactId" /></td>
|
<a href="#">Ruby</a>
|
||||||
</tr>
|
</td>
|
||||||
<tr align="left">
|
|
||||||
<th>Version</th>
|
|
||||||
<td><ww:property value="version" /></td>
|
|
||||||
</tr>
|
|
||||||
<tr align="left">
|
|
||||||
<th>Derivatives</th>
|
|
||||||
<td><ww:property value="groupId" /></td>
|
|
||||||
</tr>
|
|
||||||
<tr align="left">
|
|
||||||
<th>Parent</th>
|
|
||||||
<td><ww:property value="folder" /></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<br />
|
</div>
|
||||||
</ww:iterator>
|
|
||||||
</ww:if>
|
<h2>Labels</h2>
|
||||||
|
|
||||||
|
<div id="labels">
|
||||||
|
<p>
|
||||||
|
<a href="#">jdo</a>
|
||||||
|
<a href="#">j2ee</a>
|
||||||
|
<a href="#">maven</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
--%>
|
||||||
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
<%--
|
||||||
|
~ Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Browse Repository</title>
|
||||||
|
<ww:head />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Browse Repository</h1>
|
||||||
|
|
||||||
|
<div id="contentArea">
|
||||||
|
<div id="nameColumn">
|
||||||
|
<p>
|
||||||
|
<c:forTokens items="${groupId}" delims="./" var="part">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty(cumulativeGroup)}">
|
||||||
|
<c:set var="cumulativeGroup" value="${part}" />
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<c:set var="cumulativeGroup" value="${cumulativeGroup}/${part}" />
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
<ww:url id="url" action="browseGroup" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${cumulativeGroup}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<a href="${url}">${part}</a> /
|
||||||
|
</c:forTokens>
|
||||||
|
<strong>${artifactId}</strong>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Versions</h2>
|
||||||
|
<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>
|
||||||
|
<li><a href="${url}">${version}/</a></li>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,86 @@
|
||||||
|
<%--
|
||||||
|
~ Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Browse Repository</title>
|
||||||
|
<ww:head />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Browse Repository</h1>
|
||||||
|
|
||||||
|
<div id="contentArea">
|
||||||
|
<div id="nameColumn">
|
||||||
|
<p>
|
||||||
|
<c:forTokens items="${groupId}" delims="./" var="part" varStatus="status">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty(cumulativeGroup)}">
|
||||||
|
<c:set var="cumulativeGroup" value="${part}" />
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<c:set var="cumulativeGroup" value="${cumulativeGroup}/${part}" />
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${status.last}">
|
||||||
|
<strong>${part}</strong>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<ww:url id="url" action="browseGroup" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${cumulativeGroup}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<a href="${url}">${part}</a> /
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</c:forTokens>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ww:set name="groups" value="groups" />
|
||||||
|
<c:if test="${!empty(groups)}">
|
||||||
|
<h2>Group / Artifact</h2>
|
||||||
|
<ul>
|
||||||
|
<c:forEach items="${groups}" var="groupId">
|
||||||
|
<ww:url id="url" action="browseGroup" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${groupId}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<li><a href="${url}">${groupId}/</a></li>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<ww:set name="artifactIds" value="artifactIds" />
|
||||||
|
<c:if test="${!empty(artifactIds)}">
|
||||||
|
<h2>Artifacts</h2>
|
||||||
|
<ul>
|
||||||
|
<c:forEach items="${artifactIds}" var="artifactId">
|
||||||
|
<ww:url id="url" action="browseArtifact" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${groupId}'}" />
|
||||||
|
<ww:param name="artifactId" value="%{'${artifactId}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<li><a href="${url}">${artifactId}/</a></li>
|
||||||
|
</c:forEach>
|
||||||
|
</ul>
|
||||||
|
</c:if>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -75,11 +75,9 @@
|
||||||
<my:currentWWUrl action="findArtifact" namespace="/">Find Artifact</my:currentWWUrl>
|
<my:currentWWUrl action="findArtifact" namespace="/">Find Artifact</my:currentWWUrl>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<%-- TODO
|
|
||||||
<li class="none">
|
<li class="none">
|
||||||
<a href="#">Browse</a>
|
<my:currentWWUrl action="browse" namespace="/">Browse</my:currentWWUrl>
|
||||||
</li>
|
</li>
|
||||||
--%>
|
|
||||||
</ul>
|
</ul>
|
||||||
<h5>Manage</h5>
|
<h5>Manage</h5>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<%--
|
||||||
|
~ Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Error Occurred</title>
|
||||||
|
<ww:head />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Error Occurred</h1>
|
||||||
|
|
||||||
|
<ww:actionerror />
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -41,7 +41,7 @@
|
||||||
<th></th>
|
<th></th>
|
||||||
--%>
|
--%>
|
||||||
</tr>
|
</tr>
|
||||||
<ww:set name="searchResults" scope="request" value="searchResults" />
|
<ww:set name="searchResults" value="searchResults" />
|
||||||
<c:forEach items="${searchResults}" var="result" varStatus="i">
|
<c:forEach items="${searchResults}" var="result" varStatus="i">
|
||||||
<tr class="${i.index % 2 == 0 ? "b" : "a"}">
|
<tr class="${i.index % 2 == 0 ? "b" : "a"}">
|
||||||
<td><c:out value="${result.artifact.groupId}" /></td>
|
<td><c:out value="${result.artifact.groupId}" /></td>
|
||||||
|
|
|
@ -0,0 +1,254 @@
|
||||||
|
<%--
|
||||||
|
~ Copyright 2005-2006 The Apache Software Foundation.
|
||||||
|
~
|
||||||
|
~ Licensed 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.
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||||
|
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Browse Repository</title>
|
||||||
|
<ww:head />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<%-- TODO: image by type
|
||||||
|
<img src="images/jar.png" width="100" height="100" alt="jar" style="float: left" />
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<%-- TODO: download link
|
||||||
|
<div class="downloadButton">
|
||||||
|
<a href="#">Download</a>
|
||||||
|
</div>
|
||||||
|
--%>
|
||||||
|
|
||||||
|
<ww:set name="model" value="model" />
|
||||||
|
<h1>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty(model.name)}">
|
||||||
|
${model.artifactId}
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
${model.name}
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div id="contentArea">
|
||||||
|
<div id="tabs">
|
||||||
|
<p>
|
||||||
|
<strong>Info</strong>
|
||||||
|
<%-- TODO: perhaps using ajax?
|
||||||
|
<a href="TODO">Dependencies</a>
|
||||||
|
<a href="TODO">Depended On</a>
|
||||||
|
<a href="TODO">Mailing Lists</a>
|
||||||
|
<a href="TODO">Developers</a>
|
||||||
|
<a href="TODO">POM</a>
|
||||||
|
--%>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="tabArea">
|
||||||
|
<p>
|
||||||
|
<c:forTokens items="${model.groupId}" delims="." var="part">
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${empty(cumulativeGroup)}">
|
||||||
|
<c:set var="cumulativeGroup" value="${part}" />
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
<c:set var="cumulativeGroup" value="${cumulativeGroup}/${part}" />
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
<ww:url id="url" action="browseGroup" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${cumulativeGroup}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<a href="${url}">${part}</a> /
|
||||||
|
</c:forTokens>
|
||||||
|
<ww:url id="url" action="browseArtifact" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${model.groupId}'}" />
|
||||||
|
<ww:param name="artifactId" value="%{'${model.artifactId}'}" />
|
||||||
|
</ww:url>
|
||||||
|
<a href="${url}">${model.artifactId}</a> /
|
||||||
|
<strong>${model.version}</strong>
|
||||||
|
|
||||||
|
<!-- TODO: new versions?
|
||||||
|
(<strong class="statusFailed">Newer version available:</strong>
|
||||||
|
<a href="artifact.html">2.0.3</a>)
|
||||||
|
-->
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>${mode.description}</p>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>Group ID</th>
|
||||||
|
<td>${model.groupId}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Artifact ID</th>
|
||||||
|
<td>${model.artifactId}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Version</th>
|
||||||
|
<td>${model.version}</td>
|
||||||
|
</tr>
|
||||||
|
<%-- TODO: derivatives
|
||||||
|
<tr>
|
||||||
|
<th>Derivatives</th>
|
||||||
|
<td>
|
||||||
|
<a href="#">Source</a>
|
||||||
|
|
|
||||||
|
<a href="#">Javadoc</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
--%>
|
||||||
|
<c:if test="${model.parent != null}">
|
||||||
|
<tr>
|
||||||
|
<th>Parent</th>
|
||||||
|
<td>
|
||||||
|
${model.parent.groupId} ${model.parent.artifactId} ${model.parent.version}
|
||||||
|
<ww:url id="url" action="showArtifact" namespace="/">
|
||||||
|
<ww:param name="groupId" value="%{'${model.parent.groupId}'}" />
|
||||||
|
<ww:param name="artifactId" value="%{'${model.parent.artifactId}'}" />
|
||||||
|
<ww:param name="version" value="%{'${model.parent.version}'}" />
|
||||||
|
</ww:url>
|
||||||
|
(<a href="${url}">View</a>)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
<%-- TODO: deployment timestamp
|
||||||
|
<tr>
|
||||||
|
<th>Deployment Date</th>
|
||||||
|
<td>
|
||||||
|
15 Jan 2006, 20:38:00 +1000
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
--%>
|
||||||
|
<!-- TODO: origin
|
||||||
|
<tr>
|
||||||
|
<th>Origin</th>
|
||||||
|
<td>
|
||||||
|
<a href="TODO">Apache Repository</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
-->
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<c:if test="${model.organization != null || !empty(model.licenses)
|
||||||
|
|| model.issueManagement != null || model.ciManagement != null}">
|
||||||
|
|
||||||
|
<h2>Other Details</h2>
|
||||||
|
<table>
|
||||||
|
<c:if test="${model.organization != null}">
|
||||||
|
<tr>
|
||||||
|
<th>Organisation</th>
|
||||||
|
<td>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${model.organization != null}">
|
||||||
|
<a href="${model.organization.url}">${model.organization.name}</a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
${model.organization.name}
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${!empty(model.licenses)}">
|
||||||
|
<c:forEach items="${model.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="${model.issueManagement != null}">
|
||||||
|
<tr>
|
||||||
|
<th>Issue Tracker</th>
|
||||||
|
<td>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${!empty(model.issueManagement.url)}">
|
||||||
|
<a href="${model.issueManagement.url}">${model.issueManagement.system}</a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
${model.issueManagement.system}
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${model.ciManagement != null}">
|
||||||
|
<tr>
|
||||||
|
<th>Continuous Integration</th>
|
||||||
|
<td>
|
||||||
|
<c:choose>
|
||||||
|
<c:when test="${!empty(model.ciManagement.url)}">
|
||||||
|
<a href="${model.ciManagement.url}">${model.ciManagement.system}</a>
|
||||||
|
</c:when>
|
||||||
|
<c:otherwise>
|
||||||
|
${model.ciManagement.system}
|
||||||
|
</c:otherwise>
|
||||||
|
</c:choose>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
</table>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<c:if test="${model.scm != null}">
|
||||||
|
<h2>SCM</h2>
|
||||||
|
<table>
|
||||||
|
<c:if test="${!empty(model.scm.connection)}">
|
||||||
|
<tr>
|
||||||
|
<th>Connection</th>
|
||||||
|
<td>
|
||||||
|
<code>${model.scm.connection}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${!empty(model.scm.developerConnection)}">
|
||||||
|
<tr>
|
||||||
|
<th>Dev. Connection</th>
|
||||||
|
<td>
|
||||||
|
<code>${model.scm.developerConnection}</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
<c:if test="${!empty(model.scm.url)}">
|
||||||
|
<tr>
|
||||||
|
<th>Viewer</th>
|
||||||
|
<td>
|
||||||
|
<a href="${model.scm.url}">${model.scm.url}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</c:if>
|
||||||
|
</table>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -30,7 +30,7 @@
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#tabs b {
|
#tabs strong {
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
padding-left: 1em;
|
padding-left: 1em;
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 53 B |
Binary file not shown.
After Width: | Height: | Size: 52 B |
18
pom.xml
18
pom.xml
|
@ -152,27 +152,32 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-repository-metadata</artifactId>
|
<artifactId>maven-repository-metadata</artifactId>
|
||||||
<version>2.0.2</version>
|
<version>${maven.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-model</artifactId>
|
<artifactId>maven-model</artifactId>
|
||||||
<version>2.0.2</version>
|
<version>${maven.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-artifact</artifactId>
|
<artifactId>maven-artifact</artifactId>
|
||||||
<version>2.0.2</version>
|
<version>${maven.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-artifact-manager</artifactId>
|
<artifactId>maven-artifact-manager</artifactId>
|
||||||
<version>2.0.2</version>
|
<version>${maven.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-project</artifactId>
|
||||||
|
<version>${maven.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven</groupId>
|
<groupId>org.apache.maven</groupId>
|
||||||
<artifactId>maven-model-converter</artifactId>
|
<artifactId>maven-model-converter</artifactId>
|
||||||
<version>2.0.2</version>
|
<version>${maven.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven.wagon</groupId>
|
<groupId>org.apache.maven.wagon</groupId>
|
||||||
|
@ -364,4 +369,7 @@
|
||||||
<url>http://snapshots.repository.codehaus.org</url>
|
<url>http://snapshots.repository.codehaus.org</url>
|
||||||
</pluginRepository>
|
</pluginRepository>
|
||||||
</pluginRepositories>
|
</pluginRepositories>
|
||||||
|
<properties>
|
||||||
|
<maven.version>2.0.4</maven.version>
|
||||||
|
</properties>
|
||||||
</project>
|
</project>
|
||||||
|
|
Loading…
Reference in New Issue