mirror of https://github.com/apache/archiva.git
cleanup the checksum search
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@423825 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
154d0d416e
commit
9818d93f30
|
@ -21,6 +21,7 @@ import java.applet.Applet;
|
|||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.AccessController;
|
||||
|
@ -65,29 +66,20 @@ public class ChecksumApplet
|
|||
}
|
||||
catch ( NoSuchAlgorithmException e )
|
||||
{
|
||||
return e;
|
||||
return "Error checksumming file: " + e.getMessage();
|
||||
}
|
||||
catch ( FileNotFoundException e )
|
||||
{
|
||||
return "Couldn't find the file. " + e.getMessage();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
return e;
|
||||
return "Error reading file: " + e.getMessage();
|
||||
}
|
||||
}
|
||||
} );
|
||||
|
||||
//noinspection ChainOfInstanceofChecks
|
||||
if ( o instanceof IOException )
|
||||
{
|
||||
throw (IOException) o;
|
||||
}
|
||||
else if ( o instanceof NoSuchAlgorithmException )
|
||||
{
|
||||
throw (NoSuchAlgorithmException) o;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (String) o;
|
||||
}
|
||||
}
|
||||
|
||||
protected String checksumFile( String file )
|
||||
throws NoSuchAlgorithmException, IOException
|
||||
|
|
|
@ -1,112 +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.repository.ArtifactRepository;
|
||||
import org.apache.maven.repository.configuration.Configuration;
|
||||
import org.apache.maven.repository.configuration.ConfiguredRepositoryFactory;
|
||||
import org.apache.maven.repository.indexing.ArtifactRepositoryIndex;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndex;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexSearchException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexSearchLayer;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexingFactory;
|
||||
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Search by package name.
|
||||
*
|
||||
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="org.apache.maven.repository.manager.web.action.PackageSearchAction"
|
||||
*/
|
||||
public class PackageSearchAction
|
||||
implements Action
|
||||
{
|
||||
private String packageName;
|
||||
|
||||
private String md5;
|
||||
|
||||
private List searchResult;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryIndexingFactory factory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private ConfiguredRepositoryFactory repositoryFactory;
|
||||
|
||||
/**
|
||||
* @plexus.requirement
|
||||
*/
|
||||
private RepositoryIndexSearchLayer searchLayer;
|
||||
|
||||
public String execute()
|
||||
throws MalformedURLException, RepositoryIndexException, RepositoryIndexSearchException
|
||||
{
|
||||
String searchTerm;
|
||||
String key;
|
||||
if ( packageName != null && packageName.length() != 0 )
|
||||
{
|
||||
searchTerm = packageName;
|
||||
key = RepositoryIndex.FLD_PACKAGES;
|
||||
}
|
||||
else if ( md5 != null && md5.length() != 0 )
|
||||
{
|
||||
searchTerm = md5;
|
||||
key = "md5";
|
||||
}
|
||||
else
|
||||
{
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
// TODO: better config - share with general [!]
|
||||
Configuration configuration = new Configuration();
|
||||
File indexPath = new File( configuration.getIndexPath() );
|
||||
|
||||
ArtifactRepository repository = repositoryFactory.createRepository( configuration );
|
||||
|
||||
ArtifactRepositoryIndex index = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
|
||||
searchResult = searchLayer.searchAdvanced( new SinglePhraseQuery( key, searchTerm ), index );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
public void setPackageName( String packageName )
|
||||
{
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
public void setMd5( String md5 )
|
||||
{
|
||||
this.md5 = md5;
|
||||
}
|
||||
|
||||
public List getSearchResult()
|
||||
{
|
||||
return searchResult;
|
||||
}
|
||||
}
|
|
@ -27,6 +27,7 @@ import org.apache.maven.repository.indexing.RepositoryIndexException;
|
|||
import org.apache.maven.repository.indexing.RepositoryIndexSearchException;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexSearchLayer;
|
||||
import org.apache.maven.repository.indexing.RepositoryIndexingFactory;
|
||||
import org.apache.maven.repository.indexing.query.SinglePhraseQuery;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
|
@ -36,9 +37,9 @@ import java.util.Map;
|
|||
/**
|
||||
* Searches for searchString in all indexed fields.
|
||||
*
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="quickSearchAction"
|
||||
* @plexus.component role="com.opensymphony.xwork.Action" role-hint="searchAction"
|
||||
*/
|
||||
public class QuickSearchAction
|
||||
public class SearchAction
|
||||
extends ActionSupport
|
||||
{
|
||||
/**
|
||||
|
@ -46,6 +47,11 @@ public class QuickSearchAction
|
|||
*/
|
||||
private String q;
|
||||
|
||||
/**
|
||||
* The MD5 to search by.
|
||||
*/
|
||||
private String md5;
|
||||
|
||||
/**
|
||||
* Search results.
|
||||
*/
|
||||
|
@ -76,7 +82,7 @@ public class QuickSearchAction
|
|||
*/
|
||||
private ConfigurationStore configurationStore;
|
||||
|
||||
public String execute()
|
||||
public String quickSearch()
|
||||
throws MalformedURLException, RepositoryIndexException, RepositoryIndexSearchException,
|
||||
ConfigurationStoreException
|
||||
{
|
||||
|
@ -84,12 +90,7 @@ public class QuickSearchAction
|
|||
|
||||
assert q != null && q.length() != 0;
|
||||
|
||||
Configuration configuration = configurationStore.getConfigurationFromStore();
|
||||
File indexPath = new File( configuration.getIndexPath() );
|
||||
|
||||
ArtifactRepository repository = repositoryFactory.createRepository( configuration );
|
||||
|
||||
ArtifactRepositoryIndex index = factory.createArtifactRepositoryIndex( indexPath, repository );
|
||||
ArtifactRepositoryIndex index = getIndex();
|
||||
|
||||
if ( !index.indexExists() )
|
||||
{
|
||||
|
@ -102,6 +103,37 @@ public class QuickSearchAction
|
|||
return SUCCESS;
|
||||
}
|
||||
|
||||
public String findArtifact()
|
||||
throws ConfigurationStoreException, RepositoryIndexException, RepositoryIndexSearchException
|
||||
{
|
||||
// TODO: give action message if indexing is in progress
|
||||
|
||||
assert md5 != null && md5.length() != 0;
|
||||
|
||||
ArtifactRepositoryIndex index = getIndex();
|
||||
|
||||
if ( !index.indexExists() )
|
||||
{
|
||||
addActionError( "The repository is not yet indexed. Please wait, and then try again." );
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
searchResults = searchLayer.searchAdvanced( new SinglePhraseQuery( "md5", md5 ), index );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
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 String doInput()
|
||||
{
|
||||
return INPUT;
|
||||
|
@ -117,6 +149,16 @@ public class QuickSearchAction
|
|||
this.q = q;
|
||||
}
|
||||
|
||||
public String getMd5()
|
||||
{
|
||||
return md5;
|
||||
}
|
||||
|
||||
public void setMd5( String md5 )
|
||||
{
|
||||
this.md5 = md5;
|
||||
}
|
||||
|
||||
public List getSearchResults()
|
||||
{
|
||||
return searchResults;
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
|
||||
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
|
||||
|
||||
<validators>
|
||||
<field name="md5">
|
||||
<field-validator type="requiredstring">
|
||||
<message>
|
||||
You must select a file, or enter the checksum. If the file was given and you receive this message,
|
||||
there may have been an error generating the checksum.
|
||||
</message>
|
||||
</field-validator>
|
||||
</field>
|
||||
</validators>
|
|
@ -41,16 +41,26 @@
|
|||
<result name="config-needed" type="redirect">/admin/configure.action</result>
|
||||
</global-results>
|
||||
|
||||
<action name="index" class="quickSearchAction" method="input">
|
||||
<action name="index" class="searchAction" method="input">
|
||||
<result name="input">/WEB-INF/jsp/quickSearch.jsp</result>
|
||||
</action>
|
||||
|
||||
<action name="quickSearch" class="quickSearchAction">
|
||||
<action name="quickSearch" class="searchAction" method="quickSearch">
|
||||
<result name="input">/WEB-INF/jsp/quickSearch.jsp</result>
|
||||
<result>/WEB-INF/jsp/results.jsp</result>
|
||||
<result name="error">/WEB-INF/jsp/quickSearch.jsp</result>
|
||||
</action>
|
||||
|
||||
<action name="findArtifact" class="searchAction" method="input">
|
||||
<result name="input">/WEB-INF/jsp/findArtifact.jsp</result>
|
||||
</action>
|
||||
|
||||
<action name="checksumSearch" class="searchAction" method="findArtifact">
|
||||
<result name="input">/WEB-INF/jsp/findArtifact.jsp</result>
|
||||
<result>/WEB-INF/jsp/results.jsp</result>
|
||||
<result name="error">/WEB-INF/jsp/findArtifact.jsp</result>
|
||||
</action>
|
||||
|
||||
<!-- TODO! old actions
|
||||
<action name="proxy" class="org.apache.maven.repository.proxy.web.action.RepositoryProxyAction">
|
||||
<result name="success" type="stream">
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
||||
</head>
|
||||
|
||||
<body class="composite">
|
||||
<body onload="<decorator:getProperty property="body.onload" />" class="composite">
|
||||
<div id="banner">
|
||||
<span id="bannerLeft">
|
||||
<img src="http://www.apache.org/images/asf_logo_wide.gif" alt="" width="537" height="51" />
|
||||
|
@ -71,11 +71,11 @@
|
|||
<my:currentWWUrl action="index" namespace="/">Search</my:currentWWUrl>
|
||||
</li>
|
||||
|
||||
<%-- TODO
|
||||
<li class="none">
|
||||
<a href="#">Find Artifact</a>
|
||||
<my:currentWWUrl action="findArtifact" namespace="/">Find Artifact</my:currentWWUrl>
|
||||
</li>
|
||||
|
||||
<%-- TODO
|
||||
<li class="none">
|
||||
<a href="#">Browse</a>
|
||||
</li>
|
||||
|
|
|
@ -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" %>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Find Artifact</title>
|
||||
<ww:head />
|
||||
</head>
|
||||
|
||||
<body onload="document.checksumSearch.file.disabled = false">
|
||||
|
||||
<h1>Find Artifact</h1>
|
||||
|
||||
<div id="contentArea">
|
||||
<div id="searchBox">
|
||||
<script type="text/javascript">
|
||||
function generateMd5( file, defVal )
|
||||
{
|
||||
if ( file )
|
||||
{
|
||||
var s = document.ChecksumApplet.generateMd5(file);
|
||||
// If there is a space, it's an error message, not a checksum
|
||||
if ( s.indexOf(" ") >= 0 )
|
||||
{
|
||||
alert(s);
|
||||
return "";
|
||||
}
|
||||
else
|
||||
return s;
|
||||
}
|
||||
return defVal;
|
||||
}
|
||||
</script>
|
||||
|
||||
<noscript>
|
||||
<span class="errorMessage">JavaScript is disabled: using the file browser will not work.</span>
|
||||
</noscript>
|
||||
|
||||
<ww:form method="POST" action="checksumSearch" namespace="/"
|
||||
onsubmit="this.md5.value = generateMd5(this.file.value,this.md5.value); this.file.disabled = true">
|
||||
<tr>
|
||||
<td class="tdLabel"><label for="checksumSearch_file" class="label">Search for:</label></td>
|
||||
<td>
|
||||
<input type="file" name="file" size="50" value="" id="checksumSearch_file" />
|
||||
</td>
|
||||
</tr>
|
||||
<ww:textfield label="Checksum" size="50" name="md5" />
|
||||
<ww:submit value="Go!" />
|
||||
</ww:form>
|
||||
|
||||
<p>
|
||||
Select the file you would like to locate in the remote repository.
|
||||
The entire file will
|
||||
<b>not</b>
|
||||
be uploaded to the server. See the progress bar below for progress of
|
||||
locally creating a checksum that is uploaded to the server after you hit "Go!".
|
||||
<ww:actionerror />
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<applet code="org/apache/maven/repository/applet/ChecksumApplet.class"
|
||||
archive="maven-repository-artifact-applet.jar"
|
||||
width="400" height="20" name="ChecksumApplet">
|
||||
</applet>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,4 +1,3 @@
|
|||
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||
<%--
|
||||
~ Copyright 2005-2006 The Apache Software Foundation.
|
||||
~
|
||||
|
@ -15,6 +14,7 @@
|
|||
~ limitations under the License.
|
||||
--%>
|
||||
|
||||
<%@ taglib prefix="ww" uri="/webwork" %>
|
||||
<html>
|
||||
<head>
|
||||
<title>Quick Search</title>
|
||||
|
|
Loading…
Reference in New Issue