You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/10/05 00:29:50 UTC
svn commit: r582020 [1/3] - in /maven/archiva/trunk:
archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/
archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/
archiva-base...
Author: joakime
Date: Thu Oct 4 15:29:43 2007
New Revision: 582020
URL: http://svn.apache.org/viewvc?rev=582020&view=rev
Log:
[MRM-482] Saving a proxy connector after adding a new property results to HTTP 500 error
[MRM-477] Missing ability to manage proxy order.
[MRM-437] admin editing of proxy connectors fails in multiple instances
* Split giant ball of mud ConfigureProxyConnectorAction into seperate Add/Edit/Delete/Sort/List actions
* Added ability to maintain sort order.
* Added unit testing.
* Cleaned up Proxy Connector admin UI to allow for extra long Location / URL paths.
* Slideout Hide of the Advanced configuration options on the Proxy Connector list screen.
Added:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java (with props)
maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java (with props)
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsAction.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/down.gif (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/up.gif (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AbstractWebworkTestCase.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DeleteProxyConnectorActionTest.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsActionTest.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SortProxyConnectorsActionTest.java (with props)
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorActionTest.xml
- copied, changed from r581314, maven/archiva/trunk/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorActionTest.xml
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/connectors/proxy/EditProxyConnectorActionTest.xml (with props)
Removed:
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorAction.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/SingleSelectTransformer.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorActionTest.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/admin/connectors/proxy/ConfigureProxyConnectorActionTest.xml
Modified:
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java
maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/ProxyConnectorsAction.java
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/site.css
maven/archiva/trunk/archiva-web/archiva-webapp/src/test/resources/log4j.xml
Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java Thu Oct 4 15:29:43 2007
@@ -20,6 +20,7 @@
*/
import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.configuration.functors.ProxyConnectorConfigurationOrderComparator;
import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryReader;
import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryWriter;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -33,9 +34,11 @@
import java.io.File;
import java.io.IOException;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
/**
* Implementation of configuration holder that retrieves it from the registry.
@@ -145,7 +148,28 @@
}
}
}
-
+
+ // Normalize the order fields in the proxy connectors.
+ if ( !config.getProxyConnectors().isEmpty() )
+ {
+ Map<String, java.util.List<ProxyConnectorConfiguration>> proxyConnectorMap = config
+ .getProxyConnectorAsMap();
+
+ for ( String key : proxyConnectorMap.keySet() )
+ {
+ List<ProxyConnectorConfiguration> connectors = proxyConnectorMap.get( key );
+ // Sort connectors by order field.
+ Collections.sort( connectors, ProxyConnectorConfigurationOrderComparator.getInstance() );
+
+ // Normalize the order field values.
+ int order = 1;
+ for ( ProxyConnectorConfiguration connector : connectors )
+ {
+ connector.setOrder( order++ );
+ }
+ }
+ }
+
return config;
}
@@ -161,7 +185,8 @@
catch ( RegistryException e )
{
throw new ConfigurationRuntimeException(
- "Fatal error: Unable to find the built-in default configuration and load it into the registry", e );
+ "Fatal error: Unable to find the built-in default configuration and load it into the registry",
+ e );
}
return registry.getSubset( KEY );
}
@@ -189,10 +214,10 @@
// a little aggressive with the repositoryScanning and databaseScanning - should be no need to split
// that configuration
- if ( key.startsWith( "repositories" ) || key.startsWith( "proxyConnectors" ) ||
- key.startsWith( "networkProxies" ) || key.startsWith( "repositoryScanning" ) ||
- key.startsWith( "databaseScanning" ) || key.startsWith( "remoteRepositories" ) ||
- key.startsWith( "managedRepositories" ) )
+ if ( key.startsWith( "repositories" ) || key.startsWith( "proxyConnectors" )
+ || key.startsWith( "networkProxies" ) || key.startsWith( "repositoryScanning" )
+ || key.startsWith( "databaseScanning" ) || key.startsWith( "remoteRepositories" )
+ || key.startsWith( "managedRepositories" ) )
{
foundList = true;
}
@@ -203,12 +228,13 @@
this.configuration = null;
throw new IndeterminateConfigurationException(
- "Configuration can not be saved when it is loaded from two sources" );
+ "Configuration can not be saved when it is loaded from two sources" );
}
}
// escape all cron expressions to handle ','
- for ( Iterator<ManagedRepositoryConfiguration> i = configuration.getManagedRepositories().iterator(); i.hasNext(); )
+ for ( Iterator<ManagedRepositoryConfiguration> i = configuration.getManagedRepositories().iterator(); i
+ .hasNext(); )
{
ManagedRepositoryConfiguration c = i.next();
c.setRefreshCronExpression( escapeCronExpression( c.getRefreshCronExpression() ) );
@@ -217,7 +243,8 @@
if ( configuration.getDatabaseScanning() != null )
{
configuration.getDatabaseScanning().setCronExpression(
- escapeCronExpression( configuration.getDatabaseScanning().getCronExpression() ) );
+ escapeCronExpression( configuration
+ .getDatabaseScanning().getCronExpression() ) );
}
new ConfigurationRegistryWriter().write( configuration, section );
@@ -299,10 +326,10 @@
private String removeExpressions( String directory )
{
- String value = StringUtils.replace( directory, "${appserver.base}",
- registry.getString( "appserver.base", "${appserver.base}" ) );
- value = StringUtils.replace( value, "${appserver.home}",
- registry.getString( "appserver.home", "${appserver.home}" ) );
+ String value = StringUtils.replace( directory, "${appserver.base}", registry.getString( "appserver.base",
+ "${appserver.base}" ) );
+ value = StringUtils.replace( value, "${appserver.home}", registry.getString( "appserver.home",
+ "${appserver.home}" ) );
return value;
}
Added: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.configuration.functors;
+
+/*
+ * 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.maven.archiva.configuration.ProxyConnectorConfiguration;
+
+import java.util.Comparator;
+
+/**
+ * ProxyConnectorConfigurationOrderComparator
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProxyConnectorConfigurationOrderComparator
+ implements Comparator<ProxyConnectorConfiguration>
+{
+ private static ProxyConnectorConfigurationOrderComparator INSTANCE = new ProxyConnectorConfigurationOrderComparator();
+
+ public int compare( ProxyConnectorConfiguration o1, ProxyConnectorConfiguration o2 )
+ {
+ if ( o1 == null && o2 == null )
+ {
+ return 0;
+ }
+
+ // Ensure null goes to end of list.
+ if ( o1 == null && o2 != null )
+ {
+ return 1;
+ }
+
+ if ( o1 != null && o2 == null )
+ {
+ return -1;
+ }
+
+ // Ensure 0 (unordered) goes to end of list.
+ if ( o1.getOrder() == 0 && o2.getOrder() != 0 )
+ {
+ return 1;
+ }
+
+ if ( o1.getOrder() != 0 && o2.getOrder() == 0 )
+ {
+ return -1;
+ }
+
+ return o1.getOrder() - o2.getOrder();
+ }
+
+ public static ProxyConnectorConfigurationOrderComparator getInstance()
+ {
+ return INSTANCE;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo Thu Oct 4 15:29:43 2007
@@ -141,23 +141,49 @@
java.util.Map<String, NetworkProxyConfiguration> map = new java.util.HashMap<String, NetworkProxyConfiguration>();
if ( networkProxies != null )
{
- for ( java.util.Iterator i = networkProxies.iterator(); i.hasNext(); )
+ for ( java.util.Iterator<NetworkProxyConfiguration> i = networkProxies.iterator(); i.hasNext(); )
{
- NetworkProxyConfiguration proxy = (NetworkProxyConfiguration) i.next();
+ NetworkProxyConfiguration proxy = i.next();
map.put( proxy.getId(), proxy );
}
}
return map;
- }
+ }
+
+ public java.util.Map<String, java.util.List<ProxyConnectorConfiguration>> getProxyConnectorAsMap()
+ {
+ java.util.Map<String, java.util.List<ProxyConnectorConfiguration>> proxyConnectorMap =
+ new java.util.HashMap<String, java.util.List<ProxyConnectorConfiguration>>();
+
+ java.util.Iterator<ProxyConnectorConfiguration> it = proxyConnectors.iterator();
+ while ( it.hasNext() )
+ {
+ ProxyConnectorConfiguration proxyConfig = it.next();
+ String key = proxyConfig.getSourceRepoId();
+
+ java.util.List<ProxyConnectorConfiguration> connectors = proxyConnectorMap.get( key );
+ if ( connectors == null )
+ {
+ connectors = new java.util.ArrayList<ProxyConnectorConfiguration>();
+ proxyConnectorMap.put( key, connectors );
+ }
+
+ connectors.add( proxyConfig );
+ java.util.Collections.sort( connectors,
+ org.apache.maven.archiva.configuration.functors.ProxyConnectorConfigurationOrderComparator.getInstance() );
+ }
+
+ return proxyConnectorMap;
+ }
public java.util.Map<String, RemoteRepositoryConfiguration> getRemoteRepositoriesAsMap()
{
java.util.Map<String, RemoteRepositoryConfiguration> map = new java.util.HashMap<String, RemoteRepositoryConfiguration>();
if ( remoteRepositories != null )
{
- for ( java.util.Iterator i = remoteRepositories.iterator(); i.hasNext(); )
+ for ( java.util.Iterator<RemoteRepositoryConfiguration> i = remoteRepositories.iterator(); i.hasNext(); )
{
- RemoteRepositoryConfiguration repo = (RemoteRepositoryConfiguration) i.next();
+ RemoteRepositoryConfiguration repo = i.next();
map.put( repo.getId(), repo );
}
}
@@ -168,9 +194,9 @@
{
if ( remoteRepositories != null )
{
- for ( java.util.Iterator i = remoteRepositories.iterator(); i.hasNext(); )
+ for ( java.util.Iterator<RemoteRepositoryConfiguration> i = remoteRepositories.iterator(); i.hasNext(); )
{
- RemoteRepositoryConfiguration repo = (RemoteRepositoryConfiguration) i.next();
+ RemoteRepositoryConfiguration repo = i.next();
if ( repo.getId().equals( id ) )
{
return repo;
@@ -185,9 +211,9 @@
java.util.Map<String, ManagedRepositoryConfiguration> map = new java.util.HashMap<String, ManagedRepositoryConfiguration>();
if ( managedRepositories != null )
{
- for ( java.util.Iterator i = managedRepositories.iterator(); i.hasNext(); )
+ for ( java.util.Iterator<ManagedRepositoryConfiguration> i = managedRepositories.iterator(); i.hasNext(); )
{
- ManagedRepositoryConfiguration repo = (ManagedRepositoryConfiguration) i.next();
+ ManagedRepositoryConfiguration repo = i.next();
map.put( repo.getId(), repo );
}
}
@@ -198,9 +224,9 @@
{
if ( managedRepositories != null )
{
- for ( java.util.Iterator i = managedRepositories.iterator(); i.hasNext(); )
+ for ( java.util.Iterator<ManagedRepositoryConfiguration> i = managedRepositories.iterator(); i.hasNext(); )
{
- ManagedRepositoryConfiguration repo = (ManagedRepositoryConfiguration) i.next();
+ ManagedRepositoryConfiguration repo = i.next();
if ( repo.getId().equals( id ) )
{
return repo;
@@ -517,11 +543,25 @@
<name>ProxyConnectorConfiguration</name>
<version>1.0.0+</version>
<fields>
+ <field>
+ <name>order</name>
+ <version>1.0.0+</version>
+ <description>
+ The order of the proxy connectors. (0 means no order specified)
+ </description>
+ <type>int</type>
+ <defaultValue>0</defaultValue>
+ </field>
</fields>
<codeSegments>
<codeSegment>
<version>1.0.0+</version>
<code><![CDATA[
+ /**
+ * The order id for UNORDERED
+ */
+ public static final int UNORDERED = 0;
+
/**
* The policy key {@link #getPolicies()} for snapshot handling.
* See {@link org.apache.maven.archiva.policies.SnapshotsPolicy}
Added: maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,131 @@
+package org.apache.maven.archiva.configuration.functors;
+
+/*
+ * 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.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * ProxyConnectorConfigurationOrderComparatorTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProxyConnectorConfigurationOrderComparatorTest
+ extends TestCase
+{
+ public void testSortOfAllZeros()
+ {
+ List<ProxyConnectorConfiguration> proxies = new ArrayList<ProxyConnectorConfiguration>();
+
+ proxies.add( createConnector( "corporate", 0 ) );
+ proxies.add( createConnector( "snapshots", 0 ) );
+ proxies.add( createConnector( "3rdparty", 0 ) );
+ proxies.add( createConnector( "sandbox", 0 ) );
+
+ Collections.sort( proxies, ProxyConnectorConfigurationOrderComparator.getInstance() );
+
+ assertProxyOrder( new String[] { "corporate", "snapshots", "3rdparty", "sandbox" }, proxies );
+ }
+
+ public void testSortNormal()
+ {
+ List<ProxyConnectorConfiguration> proxies = new ArrayList<ProxyConnectorConfiguration>();
+
+ proxies.add( createConnector( "corporate", 3 ) );
+ proxies.add( createConnector( "snapshots", 1 ) );
+ proxies.add( createConnector( "3rdparty", 2 ) );
+ proxies.add( createConnector( "sandbox", 4 ) );
+
+ Collections.sort( proxies, new ProxyConnectorConfigurationOrderComparator() );
+
+ assertProxyOrder( new String[] { "snapshots", "3rdparty", "corporate", "sandbox" }, proxies );
+ }
+
+ public void testSortPartial()
+ {
+ List<ProxyConnectorConfiguration> proxies = new ArrayList<ProxyConnectorConfiguration>();
+
+ proxies.add( createConnector( "corporate", 3 ) );
+ proxies.add( createConnector( "snapshots", 0 ) );
+ proxies.add( createConnector( "3rdparty", 2 ) );
+ proxies.add( createConnector( "sandbox", 0 ) );
+
+ Collections.sort( proxies, new ProxyConnectorConfigurationOrderComparator() );
+
+ assertProxyOrder( new String[] { "3rdparty", "corporate", "snapshots", "sandbox" }, proxies );
+ }
+
+ private void assertProxyOrder( String[] ids, List<ProxyConnectorConfiguration> proxies )
+ {
+ assertEquals( "Proxies.size() == ids.length", ids.length, proxies.size() );
+
+ int orderFailedAt = -1;
+
+ for ( int i = 0; i < ids.length; i++ )
+ {
+ if ( !StringUtils.equals( ids[i], proxies.get( i ).getProxyId() ) )
+ {
+ orderFailedAt = i;
+ break;
+ }
+ }
+
+ if ( orderFailedAt >= 0 )
+ {
+ StringBuffer msg = new StringBuffer();
+
+ msg.append( "Failed expected order of the proxies <" );
+ msg.append( StringUtils.join( ids, ", " ) );
+ msg.append( ">, actual <" );
+
+ boolean needsComma = false;
+ for ( ProxyConnectorConfiguration proxy : proxies )
+ {
+ if ( needsComma )
+ {
+ msg.append( ", " );
+ }
+ msg.append( proxy.getProxyId() );
+ needsComma = true;
+ }
+ msg.append( "> failure at index <" ).append( orderFailedAt ).append( ">." );
+
+ fail( msg.toString() );
+ }
+ }
+
+ private ProxyConnectorConfiguration createConnector( String id, int order )
+ {
+ ProxyConnectorConfiguration proxy = new ProxyConnectorConfiguration();
+ proxy.setProxyId( id );
+ proxy.setOrder( order );
+ proxy.setSourceRepoId( id + "_m" );
+ proxy.setTargetRepoId( id + "_r" );
+
+ return proxy;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/functors/ProxyConnectorConfigurationOrderComparatorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java Thu Oct 4 15:29:43 2007
@@ -44,7 +44,7 @@
*
* @return the list of options for this policy.
*/
- public List getOptions();
+ public List<String> getOptions();
/**
* Get the default option for this policy.
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java Thu Oct 4 15:29:43 2007
@@ -19,6 +19,7 @@
* under the License.
*/
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -32,6 +33,8 @@
import org.apache.maven.archiva.model.ProjectReference;
import org.apache.maven.archiva.model.VersionedReference;
import org.apache.maven.archiva.policies.DownloadPolicy;
+import org.apache.maven.archiva.policies.PostDownloadPolicy;
+import org.apache.maven.archiva.policies.PreDownloadPolicy;
import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
import org.apache.maven.archiva.repository.ArchivaConfigurationAdaptor;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
@@ -58,14 +61,12 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Properties;
+import java.util.Map.Entry;
/**
* DefaultRepositoryProxyConnectors
@@ -86,7 +87,7 @@
/**
* @plexus.requirement role="org.apache.maven.wagon.Wagon"
*/
- private Map/*<String,Wagon>*/wagons;
+ private Map<String, Wagon> wagons;
/**
* @plexus.requirement
@@ -101,21 +102,21 @@
/**
* @plexus.requirement role="org.apache.maven.archiva.policies.PreDownloadPolicy"
*/
- private Map preDownloadPolicies;
+ private Map<String, PreDownloadPolicy> preDownloadPolicies;
/**
* @plexus.requirement role="org.apache.maven.archiva.policies.PostDownloadPolicy"
*/
- private Map postDownloadPolicies;
+ private Map<String, PostDownloadPolicy> postDownloadPolicies;
/**
* @plexus.requirement role-hint="default"
*/
private UrlFailureCache urlFailureCache;
- private Map proxyConnectorMap = new HashMap();
+ private Map<String, List<ProxyConnector>> proxyConnectorMap = new HashMap<String, List<ProxyConnector>>();
- private Map networkProxyMap = new HashMap();
+ private Map<String, ProxyInfo> networkProxyMap = new HashMap<String, ProxyInfo>();
/**
* @plexus.requirement
@@ -139,11 +140,9 @@
Properties requestProperties = new Properties();
requestProperties.setProperty( "version", artifact.getVersion() );
- List connectors = getProxyConnectors( repository );
- Iterator it = connectors.iterator();
- while ( it.hasNext() )
+ List<ProxyConnector> connectors = getProxyConnectors( repository );
+ for( ProxyConnector connector: connectors )
{
- ProxyConnector connector = (ProxyConnector) it.next();
ArchivaRepository targetRepository = connector.getTargetRepository();
String targetPath = getLayout( targetRepository ).toPath( artifact );
@@ -172,17 +171,15 @@
Properties requestProperties = new Properties();
boolean hasFetched = false;
- List connectors = getProxyConnectors( repository );
- Iterator it = connectors.iterator();
- while ( it.hasNext() )
+ List<ProxyConnector> connectors = getProxyConnectors( repository );
+ for( ProxyConnector connector: connectors )
{
- ProxyConnector connector = (ProxyConnector) it.next();
ArchivaRepository targetRepository = connector.getTargetRepository();
String targetPath = metadataTools.toPath( metadata );
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
- File downloadedFile =
- transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );
+ File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile,
+ requestProperties );
if ( fileExists( downloadedFile ) )
{
@@ -237,17 +234,15 @@
Properties requestProperties = new Properties();
boolean hasFetched = false;
- List connectors = getProxyConnectors( repository );
- Iterator it = connectors.iterator();
- while ( it.hasNext() )
+ List<ProxyConnector> connectors = getProxyConnectors( repository );
+ for( ProxyConnector connector: connectors )
{
- ProxyConnector connector = (ProxyConnector) it.next();
ArchivaRepository targetRepository = connector.getTargetRepository();
String targetPath = metadataTools.toPath( metadata );
File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath );
- File downloadedFile =
- transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );
+ File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile,
+ requestProperties );
if ( fileExists( downloadedFile ) )
{
@@ -345,8 +340,8 @@
}
catch ( LayoutException e )
{
- throw new ProxyException( "Unable to proxy due to bad repository layout definition [" + repository.getId() +
- "] had a layout defined as [" + repository.getLayoutType() + "] : " + e.getMessage(), e );
+ throw new ProxyException( "Unable to proxy due to bad repository layout definition [" + repository.getId()
+ + "] had a layout defined as [" + repository.getLayoutType() + "] : " + e.getMessage(), e );
}
}
@@ -395,7 +390,7 @@
requestProperties.setProperty( "url", url );
// Is a whitelist defined?
- if ( !isEmpty( connector.getWhitelist() ) )
+ if ( CollectionUtils.isNotEmpty( connector.getWhitelist() ) )
{
// Path must belong to whitelist.
if ( !matchesPattern( remotePath, connector.getWhitelist() ) )
@@ -442,8 +437,8 @@
transferChecksum( wagon, remoteRepository, remotePath, localFile, ".sha1" );
transferChecksum( wagon, remoteRepository, remotePath, localFile, ".md5" );
-
- }
+
+ }
}
catch ( ResourceDoesNotExistException e )
{
@@ -542,8 +537,7 @@
* @throws ProxyException if there was a problem moving the downloaded file into place.
* @throws WagonException if there was a problem tranfering the file.
*/
- private File transferSimpleFile( Wagon wagon, ArchivaRepository remoteRepository, String remotePath,
- File localFile )
+ private File transferSimpleFile( Wagon wagon, ArchivaRepository remoteRepository, String remotePath, File localFile )
throws ProxyException, WagonException
{
assert ( remotePath != null );
@@ -578,7 +572,8 @@
if ( !success )
{
getLogger().info(
- "Not downloaded, as local file is newer than remote side: " + localFile.getAbsolutePath() );
+ "Not downloaded, as local file is newer than remote side: "
+ + localFile.getAbsolutePath() );
}
else if ( temp.exists() )
{
@@ -617,14 +612,12 @@
* @param localFile the local file (utilized by the {@link DownloadPolicy#applyPolicy(String,Properties,File)})
* @return true if all of the policies passed, false if a policy failed.
*/
- private boolean applyPolicies( Map policies, Map settings, Properties request, File localFile )
+ private boolean applyPolicies( Map<String, ? extends DownloadPolicy> policies, Map<String, String> settings, Properties request, File localFile )
{
- Iterator it = policies.entrySet().iterator();
- while ( it.hasNext() )
+ for( Entry<String, ? extends DownloadPolicy> entry: policies.entrySet() )
{
- Map.Entry entry = (Entry) it.next();
String key = (String) entry.getKey();
- DownloadPolicy policy = (DownloadPolicy) entry.getValue();
+ DownloadPolicy policy = entry.getValue();
String defaultSetting = policy.getDefaultOption();
String setting = StringUtils.defaultString( (String) settings.get( key ), defaultSetting );
@@ -693,24 +686,24 @@
try
{
- AuthenticationInfo authInfo = null;
- String username = remoteRepository.getUsername();
- String password = remoteRepository.getPassword();
- if (username != null && password != null)
- {
- getLogger().info("Using username " + username + " to connect to remote repository "
- + remoteRepository.getUrl());
- authInfo = new AuthenticationInfo();
- authInfo.setUserName(username);
- authInfo.setPassword(password);
- }
- else
- {
- getLogger().info("No authentication for remote repository needed");
- }
+ AuthenticationInfo authInfo = null;
+ String username = remoteRepository.getUsername();
+ String password = remoteRepository.getPassword();
+ if ( username != null && password != null )
+ {
+ getLogger().info(
+ "Using username " + username + " to connect to remote repository "
+ + remoteRepository.getUrl() );
+ authInfo = new AuthenticationInfo();
+ authInfo.setUserName( username );
+ authInfo.setPassword( password );
+ }
+ else
+ {
+ getLogger().info( "No authentication for remote repository needed" );
+ }
- Repository wagonRepository =
- new Repository( remoteRepository.getId(), remoteRepository.getUrl().toString() );
+ Repository wagonRepository = new Repository( remoteRepository.getId(), remoteRepository.getUrl().toString() );
if ( networkProxy != null )
{
wagon.connect( wagonRepository, authInfo, networkProxy );
@@ -742,17 +735,15 @@
* @param patterns the list of patterns to check.
* @return true if the path matches at least 1 pattern in the provided patterns list.
*/
- private boolean matchesPattern( String path, List patterns )
+ private boolean matchesPattern( String path, List<String> patterns )
{
- if ( isEmpty( patterns ) )
+ if ( CollectionUtils.isEmpty( patterns ) )
{
return false;
}
- Iterator it = patterns.iterator();
- while ( it.hasNext() )
+ for( String pattern: patterns )
{
- String pattern = (String) it.next();
if ( SelectorUtils.matchPath( pattern, path, false ) )
{
return true;
@@ -765,11 +756,11 @@
/**
* TODO: Ensure that list is correctly ordered based on configuration. See MRM-477
*/
- public List getProxyConnectors( ArchivaRepository repository )
+ public List<ProxyConnector> getProxyConnectors( ArchivaRepository repository )
{
synchronized ( this.proxyConnectorMap )
{
- List ret = (List) this.proxyConnectorMap.get( repository.getId() );
+ List<ProxyConnector> ret = (List<ProxyConnector>) this.proxyConnectorMap.get( repository.getId() );
if ( ret == null )
{
return Collections.EMPTY_LIST;
@@ -780,10 +771,10 @@
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
{
- if ( ConfigurationNames.isNetworkProxy( propertyName ) ||
- ConfigurationNames.isManagedRepositories( propertyName ) ||
- ConfigurationNames.isRemoteRepositories( propertyName ) ||
- ConfigurationNames.isProxyConnector( propertyName ) )
+ if ( ConfigurationNames.isNetworkProxy( propertyName )
+ || ConfigurationNames.isManagedRepositories( propertyName )
+ || ConfigurationNames.isRemoteRepositories( propertyName )
+ || ConfigurationNames.isProxyConnector( propertyName ) )
{
initConnectorsAndNetworkProxies();
}
@@ -796,17 +787,14 @@
private void initConnectorsAndNetworkProxies()
{
- Iterator it;
-
synchronized ( this.proxyConnectorMap )
{
+ ProxyConnectorOrderComparator proxyOrderSorter = new ProxyConnectorOrderComparator();
this.proxyConnectorMap.clear();
- List proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
- it = proxyConfigs.iterator();
- while ( it.hasNext() )
+ List<ProxyConnectorConfiguration> proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
+ for( ProxyConnectorConfiguration proxyConfig: proxyConfigs )
{
- ProxyConnectorConfiguration proxyConfig = (ProxyConnectorConfiguration) it.next();
String key = proxyConfig.getSourceRepoId();
// Create connector object.
@@ -815,48 +803,52 @@
connector.setTargetRepository( getRemoteRepository( proxyConfig.getTargetRepoId() ) );
connector.setProxyId( proxyConfig.getProxyId() );
connector.setPolicies( proxyConfig.getPolicies() );
+ connector.setOrder( proxyConfig.getOrder() );
// Copy any blacklist patterns.
- List blacklist = new ArrayList();
- if ( !isEmpty( proxyConfig.getBlackListPatterns() ) )
+ List<String> blacklist = new ArrayList<String>();
+ if ( CollectionUtils.isNotEmpty( proxyConfig.getBlackListPatterns() ) )
{
blacklist.addAll( proxyConfig.getBlackListPatterns() );
}
connector.setBlacklist( blacklist );
// Copy any whitelist patterns.
- List whitelist = new ArrayList();
- if ( !isEmpty( proxyConfig.getWhiteListPatterns() ) )
+ List<String> whitelist = new ArrayList<String>();
+ if ( CollectionUtils.isNotEmpty( proxyConfig.getWhiteListPatterns() ) )
{
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
}
connector.setWhitelist( whitelist );
// Get other connectors
- List connectors = (List) this.proxyConnectorMap.get( key );
+ List<ProxyConnector> connectors = this.proxyConnectorMap.get( key );
if ( connectors == null )
{
// Create if we are the first.
- connectors = new ArrayList();
+ connectors = new ArrayList<ProxyConnector>();
}
// Add the connector.
connectors.add( connector );
+
+ // Ensure the list is sorted.
+ Collections.sort( connectors, proxyOrderSorter );
// Set the key to the list of connectors.
this.proxyConnectorMap.put( key, connectors );
}
+
+
}
synchronized ( this.networkProxyMap )
{
this.networkProxyMap.clear();
- List networkProxies = archivaConfiguration.getConfiguration().getNetworkProxies();
- it = networkProxies.iterator();
- while ( it.hasNext() )
+ List<NetworkProxyConfiguration> networkProxies = archivaConfiguration.getConfiguration().getNetworkProxies();
+ for( NetworkProxyConfiguration networkProxyConfig: networkProxies )
{
- NetworkProxyConfiguration networkProxyConfig = (NetworkProxyConfiguration) it.next();
String key = networkProxyConfig.getId();
ProxyInfo proxy = new ProxyInfo();
@@ -872,32 +864,22 @@
}
}
- private boolean isEmpty( Collection collection )
- {
- if ( collection == null )
- {
- return true;
- }
-
- return collection.size() == 0;
- }
-
private ArchivaRepository getRemoteRepository( String repoId )
{
- RemoteRepositoryConfiguration repoConfig =
- archivaConfiguration.getConfiguration().findRemoteRepositoryById( repoId );
+ RemoteRepositoryConfiguration repoConfig = archivaConfiguration.getConfiguration()
+ .findRemoteRepositoryById( repoId );
ArchivaRepository repo = new ArchivaRepository( repoConfig.getId(), repoConfig.getName(), repoConfig.getUrl() );
repo.getModel().setLayoutName( repoConfig.getLayout() );
- repo.setUsername(repoConfig.getUsername());
- repo.setPassword(repoConfig.getPassword());
+ repo.setUsername( repoConfig.getUsername() );
+ repo.setPassword( repoConfig.getPassword() );
return repo;
}
private ArchivaRepository getManagedRepository( String repoId )
{
- ManagedRepositoryConfiguration repoConfig =
- archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
+ ManagedRepositoryConfiguration repoConfig = archivaConfiguration.getConfiguration()
+ .findManagedRepositoryById( repoId );
return ArchivaConfigurationAdaptor.toArchivaRepository( repoConfig );
}
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java Thu Oct 4 15:29:43 2007
@@ -39,20 +39,22 @@
private ArchivaRepository targetRepository;
- private List blacklist;
+ private List<String> blacklist;
- private List whitelist;
+ private List<String> whitelist;
private String proxyId;
+
+ private int order;
- private Map policies;
+ private Map<String, String> policies;
- public List getBlacklist()
+ public List<String> getBlacklist()
{
return blacklist;
}
- public void setBlacklist( List blacklist )
+ public void setBlacklist( List<String> blacklist )
{
this.blacklist = blacklist;
}
@@ -77,22 +79,22 @@
this.targetRepository = targetRepository;
}
- public List getWhitelist()
+ public List<String> getWhitelist()
{
return whitelist;
}
- public void setWhitelist( List whitelist )
+ public void setWhitelist( List<String> whitelist )
{
this.whitelist = whitelist;
}
- public Map getPolicies()
+ public Map<String, String> getPolicies()
{
return policies;
}
- public void setPolicies( Map policies )
+ public void setPolicies( Map<String, String> policies )
{
this.policies = policies;
}
@@ -116,10 +118,10 @@
sb.append( " target:" ).append( this.targetRepository ).append( "\n" );
sb.append( " proxyId:" ).append( this.proxyId ).append( "\n" );
- Iterator keys = this.policies.keySet().iterator();
+ Iterator<String> keys = this.policies.keySet().iterator();
while ( keys.hasNext() )
{
- String name = (String) keys.next();
+ String name = keys.next();
sb.append( " policy[" ).append( name ).append( "]:" );
sb.append( this.policies.get( name ) ).append( "\n" );
}
@@ -132,5 +134,15 @@
public void setPolicy( String policyId, String policySetting )
{
this.policies.put( policyId, policySetting );
+ }
+
+ public int getOrder()
+ {
+ return order;
+ }
+
+ public void setOrder( int order )
+ {
+ this.order = order;
}
}
Added: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,71 @@
+package org.apache.maven.archiva.proxy;
+
+/*
+ * 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 java.util.Comparator;
+
+/**
+ * ProxyConnectorOrderComparator
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProxyConnectorOrderComparator
+ implements Comparator<ProxyConnector>
+{
+ private static ProxyConnectorOrderComparator INSTANCE = new ProxyConnectorOrderComparator();
+
+ public static ProxyConnectorOrderComparator getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public int compare( ProxyConnector o1, ProxyConnector o2 )
+ {
+ if ( o1 == null && o2 == null )
+ {
+ return 0;
+ }
+
+ // Ensure null goes to end of list.
+ if ( o1 == null && o2 != null )
+ {
+ return 1;
+ }
+
+ if ( o1 != null && o2 == null )
+ {
+ return -1;
+ }
+
+ // Ensure 0 (unordered) goes to end of list.
+ if ( o1.getOrder() == 0 && o2.getOrder() != 0 )
+ {
+ return 1;
+ }
+
+ if ( o1.getOrder() != 0 && o2.getOrder() == 0 )
+ {
+ return -1;
+ }
+
+ return o1.getOrder() - o2.getOrder();
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnectorOrderComparator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java Thu Oct 4 15:29:43 2007
@@ -86,7 +86,7 @@
* @param repository the source repository to look for.
* @return the List of {@link ProxyConnector} objects.
*/
- public List getProxyConnectors( ArchivaRepository repository );
+ public List<ProxyConnector> getProxyConnectors( ArchivaRepository repository );
/**
* Tests to see if the provided repository is a source repository for
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java Thu Oct 4 15:29:43 2007
@@ -44,7 +44,6 @@
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
-import java.util.Iterator;
import java.util.Locale;
/**
@@ -162,15 +161,13 @@
return;
}
- Collection tmpFiles = FileUtils.listFiles( workingDir, new String[]{"tmp"}, false );
+ Collection<File> tmpFiles = FileUtils.listFiles( workingDir, new String[]{"tmp"}, false );
if ( !tmpFiles.isEmpty() )
{
StringBuffer emsg = new StringBuffer();
emsg.append( "Found Temp Files in dir: " ).append( workingDir.getPath() );
- Iterator it = tmpFiles.iterator();
- while ( it.hasNext() )
+ for( File tfile: tmpFiles )
{
- File tfile = (File) it.next();
emsg.append( "\n " ).append( tfile.getName() );
}
fail( emsg.toString() );
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java Thu Oct 4 15:29:43 2007
@@ -27,7 +27,6 @@
import org.easymock.MockControl;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
/**
@@ -44,7 +43,7 @@
{
private Configuration configuration = new Configuration();
- private List listeners = new ArrayList();
+ private List<RegistryListener> listeners = new ArrayList<RegistryListener>();
private MockControl registryControl;
@@ -74,10 +73,8 @@
public void triggerChange( String name, String value )
{
- Iterator it = listeners.iterator();
- while ( it.hasNext() )
+ for( RegistryListener listener: listeners )
{
- RegistryListener listener = (RegistryListener) it.next();
try
{
listener.afterConfigurationChange( registryMock, name, value );
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java Thu Oct 4 15:29:43 2007
@@ -86,7 +86,7 @@
return delegate.resourceExists( resourceName );
}
- public List getFileList( String destinationDirectory )
+ public List<String> getFileList( String destinationDirectory )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
return delegate.getFileList( destinationDirectory );
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/pom.xml Thu Oct 4 15:29:43 2007
@@ -317,6 +317,10 @@
</connectors>
<systemProperties>
<systemProperty>
+ <name>plexus.home</name>
+ <value>${project.build.directory}/appserver-base</value>
+ </systemProperty>
+ <systemProperty>
<name>appserver.base</name>
<value>${project.build.directory}/appserver-base</value>
</systemProperty>
Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java?rev=582020&r1=582019&r2=582020&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/appearance/AbstractAppearanceAction.java Thu Oct 4 15:29:43 2007
@@ -40,7 +40,7 @@
/**
* @plexus.requirement role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout"
*/
- private Map repositoryLayouts;
+ private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
/**
* @plexus.requirement
Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,137 @@
+package org.apache.maven.archiva.web.action.admin.connectors.proxy;
+
+/*
+ * 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.commons.collections.CollectionUtils;
+import org.apache.commons.collections.functors.NotPredicate;
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.maven.archiva.configuration.functors.ProxyConnectorSelectionPredicate;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.codehaus.plexus.redback.rbac.Resource;
+import org.codehaus.plexus.redback.xwork.interceptor.SecureAction;
+import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
+import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
+import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * AbstractProxyConnectorAction
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractProxyConnectorAction
+ extends PlexusActionSupport
+ implements SecureAction
+{
+ public static final String DIRECT_CONNECTION = "(direct connection)";
+
+ /**
+ * @plexus.requirement
+ */
+ protected ArchivaConfiguration archivaConfiguration;
+
+ public SecureActionBundle getSecureActionBundle()
+ throws SecureActionException
+ {
+ SecureActionBundle bundle = new SecureActionBundle();
+
+ bundle.setRequiresAuthentication( true );
+ bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
+
+ return bundle;
+ }
+
+ public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
+ {
+ this.archivaConfiguration = archivaConfiguration;
+ }
+
+ protected void addProxyConnector( ProxyConnectorConfiguration proxyConnector )
+ {
+ getConfig().addProxyConnector( proxyConnector );
+ }
+
+ protected ProxyConnectorConfiguration findProxyConnector( String sourceId, String targetId )
+ {
+ if ( StringUtils.isBlank( sourceId ) )
+ {
+ return null;
+ }
+
+ if ( StringUtils.isBlank( targetId ) )
+ {
+ return null;
+ }
+
+ ProxyConnectorSelectionPredicate selectedProxy = new ProxyConnectorSelectionPredicate( sourceId, targetId );
+ return (ProxyConnectorConfiguration) CollectionUtils.find( getConfig().getProxyConnectors(), selectedProxy );
+ }
+
+ protected Configuration getConfig()
+ {
+ return this.archivaConfiguration.getConfiguration();
+ }
+
+ protected Map<String, List<ProxyConnectorConfiguration>> createProxyConnectorMap()
+ {
+ return getConfig().getProxyConnectorAsMap();
+ }
+
+ protected void removeConnector( String sourceId, String targetId )
+ {
+ ProxyConnectorSelectionPredicate selectedProxy = new ProxyConnectorSelectionPredicate( sourceId, targetId );
+ NotPredicate notSelectedProxy = new NotPredicate( selectedProxy );
+ CollectionUtils.filter( getConfig().getProxyConnectors(), notSelectedProxy );
+ }
+
+ protected void removeProxyConnector( ProxyConnectorConfiguration connector )
+ {
+ getConfig().removeProxyConnector( connector );
+ }
+
+ protected String saveConfiguration()
+ {
+ try
+ {
+ archivaConfiguration.save( getConfig() );
+ addActionMessage( "Successfully saved configuration" );
+ }
+ catch ( RegistryException e )
+ {
+ addActionError( "Unable to save configuration: " + e.getMessage() );
+ return INPUT;
+ }
+ catch ( IndeterminateConfigurationException e )
+ {
+ addActionError( e.getMessage() );
+ return INPUT;
+ }
+
+ return SUCCESS;
+ }
+}
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,432 @@
+package org.apache.maven.archiva.web.action.admin.connectors.proxy;
+
+/*
+ * 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 com.opensymphony.xwork.Preparable;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.maven.archiva.policies.DownloadPolicy;
+import org.apache.maven.archiva.policies.PostDownloadPolicy;
+import org.apache.maven.archiva.policies.PreDownloadPolicy;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * AbstractProxyConnectorFormAction - generic fields and methods for either add or edit actions related with the
+ * Proxy Connector.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractProxyConnectorFormAction
+ extends AbstractProxyConnectorAction
+ implements Preparable
+{
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.policies.PreDownloadPolicy"
+ */
+ private Map<String, PreDownloadPolicy> preDownloadPolicyMap;
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.policies.PostDownloadPolicy"
+ */
+ private Map<String, PostDownloadPolicy> postDownloadPolicyMap;
+
+ /**
+ * The list of network proxy ids that are available.
+ */
+ private List<String> proxyIdOptions;
+
+ /**
+ * The list of managed repository ids that are available.
+ */
+ private List<String> managedRepoIdList;
+
+ /**
+ * The list of remove repository ids that are available.
+ */
+ private List<String> remoteRepoIdList;
+
+ /**
+ * The map of policies that are available to be set.
+ */
+ private Map<String, DownloadPolicy> policyMap;
+
+ /**
+ * The property key to add or remove.
+ */
+ private String propertyKey;
+
+ /**
+ * The property value to add.
+ */
+ private String propertyValue;
+
+ /**
+ * The blacklist pattern to add.
+ */
+ private String blackListPattern;
+
+ /**
+ * The whitelist pattern to add.
+ */
+ private String whiteListPattern;
+
+ /**
+ * The pattern to add or remove (black or white).
+ */
+ private String pattern;
+
+ /**
+ * The model for this action.
+ */
+ protected ProxyConnectorConfiguration connector;
+
+ public String addBlackListPattern()
+ {
+ String pattern = getBlackListPattern();
+
+ if ( StringUtils.isBlank( pattern ) )
+ {
+ addActionError( "Cannot add a blank black list pattern." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getBlackListPatterns().add( pattern );
+ setBlackListPattern( null );
+ }
+
+ return INPUT;
+ }
+
+ public String addProperty()
+ {
+ String key = getPropertyKey();
+ String value = getPropertyValue();
+
+ if ( StringUtils.isBlank( key ) )
+ {
+ addActionError( "Unable to add property with blank key." );
+ }
+
+ if ( StringUtils.isBlank( value ) )
+ {
+ addActionError( "Unable to add property with blank value." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getProperties().put( key, value );
+ setPropertyKey( null );
+ setPropertyValue( null );
+ }
+
+ return INPUT;
+ }
+
+ public String addWhiteListPattern()
+ {
+ String pattern = getWhiteListPattern();
+
+ if ( StringUtils.isBlank( pattern ) )
+ {
+ addActionError( "Cannot add a blank white list pattern." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getWhiteListPatterns().add( pattern );
+ setWhiteListPattern( null );
+ }
+
+ return INPUT;
+ }
+
+ public String getBlackListPattern()
+ {
+ return blackListPattern;
+ }
+
+ public ProxyConnectorConfiguration getConnector()
+ {
+ return connector;
+ }
+
+ public List<String> getManagedRepoIdList()
+ {
+ return managedRepoIdList;
+ }
+
+ public String getPattern()
+ {
+ return pattern;
+ }
+
+ public Map<String, DownloadPolicy> getPolicyMap()
+ {
+ return policyMap;
+ }
+
+ public String getPropertyKey()
+ {
+ return propertyKey;
+ }
+
+ public String getPropertyValue()
+ {
+ return propertyValue;
+ }
+
+ public List<String> getProxyIdOptions()
+ {
+ return proxyIdOptions;
+ }
+
+ public List<String> getRemoteRepoIdList()
+ {
+ return remoteRepoIdList;
+ }
+
+ public String getWhiteListPattern()
+ {
+ return whiteListPattern;
+ }
+
+ public void prepare()
+ {
+ proxyIdOptions = createNetworkProxyOptions();
+ managedRepoIdList = createManagedRepoOptions();
+ remoteRepoIdList = createRemoteRepoOptions();
+ policyMap = createPolicyMap();
+ }
+
+ public String removeBlackListPattern()
+ {
+ String pattern = getPattern();
+
+ if ( StringUtils.isBlank( pattern ) )
+ {
+ addActionError( "Cannot remove a blank black list pattern." );
+ }
+
+ if ( !getConnector().getBlackListPatterns().contains( pattern ) )
+ {
+ addActionError( "Non-existant black list pattern [" + pattern + "], no black list pattern removed." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getBlackListPatterns().remove( pattern );
+ }
+
+ setBlackListPattern( null );
+ setPattern( null );
+
+ return INPUT;
+ }
+
+ public String removeProperty()
+ {
+ String key = getPropertyKey();
+
+ if ( StringUtils.isBlank( key ) )
+ {
+ addActionError( "Unable to remove property with blank key." );
+ }
+
+ if ( !getConnector().getProperties().containsKey( key ) )
+ {
+ addActionError( "Non-existant property key [" + pattern + "], no property was removed." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getProperties().remove( key );
+ }
+
+ setPropertyKey( null );
+ setPropertyValue( null );
+
+ return INPUT;
+ }
+
+ public String removeWhiteListPattern()
+ {
+ String pattern = getPattern();
+
+ if ( StringUtils.isBlank( pattern ) )
+ {
+ addActionError( "Cannot remove a blank white list pattern." );
+ }
+
+ if ( !getConnector().getWhiteListPatterns().contains( pattern ) )
+ {
+ addActionError( "Non-existant white list pattern [" + pattern + "], no white list pattern removed." );
+ }
+
+ if ( !hasActionErrors() )
+ {
+ getConnector().getWhiteListPatterns().remove( pattern );
+ }
+
+ setWhiteListPattern( null );
+ setPattern( null );
+
+ return INPUT;
+ }
+
+ public void setBlackListPattern( String blackListPattern )
+ {
+ this.blackListPattern = blackListPattern;
+ }
+
+ public void setConnector( ProxyConnectorConfiguration connector )
+ {
+ this.connector = connector;
+ }
+
+ public void setManagedRepoIdList( List<String> managedRepoIdList )
+ {
+ this.managedRepoIdList = managedRepoIdList;
+ }
+
+ public void setPattern( String pattern )
+ {
+ this.pattern = pattern;
+ }
+
+ public void setPolicyMap( Map<String, DownloadPolicy> policyMap )
+ {
+ this.policyMap = policyMap;
+ }
+
+ public void setPropertyKey( String propertyKey )
+ {
+ this.propertyKey = propertyKey;
+ }
+
+ public void setPropertyValue( String propertyValue )
+ {
+ this.propertyValue = propertyValue;
+ }
+
+ public void setProxyIdOptions( List<String> proxyIdOptions )
+ {
+ this.proxyIdOptions = proxyIdOptions;
+ }
+
+ public void setRemoteRepoIdList( List<String> remoteRepoIdList )
+ {
+ this.remoteRepoIdList = remoteRepoIdList;
+ }
+
+ public void setWhiteListPattern( String whiteListPattern )
+ {
+ this.whiteListPattern = whiteListPattern;
+ }
+
+ protected List<String> createManagedRepoOptions()
+ {
+ return new ArrayList<String>( getConfig().getManagedRepositoriesAsMap().keySet() );
+ }
+
+ protected List<String> createNetworkProxyOptions()
+ {
+ List<String> options = new ArrayList<String>();
+
+ options.add( DIRECT_CONNECTION );
+ options.addAll( getConfig().getNetworkProxiesAsMap().keySet() );
+
+ return options;
+ }
+
+ protected Map<String, DownloadPolicy> createPolicyMap()
+ {
+ Map<String, DownloadPolicy> policyMap = new HashMap<String, DownloadPolicy>();
+
+ policyMap.putAll( preDownloadPolicyMap );
+ policyMap.putAll( postDownloadPolicyMap );
+
+ return policyMap;
+ }
+
+ protected List<String> createRemoteRepoOptions()
+ {
+ return new ArrayList<String>( getConfig().getRemoteRepositoriesAsMap().keySet() );
+ }
+
+ protected void validateConnector()
+ {
+ if ( connector.getPolicies() == null )
+ {
+ addActionError( "Policies must be set." );
+ }
+ else
+ {
+ // Validate / Fix policy settings arriving from browser.
+ for ( Map.Entry<String, DownloadPolicy> entry : getPolicyMap().entrySet() )
+ {
+ String policyId = (String) entry.getKey();
+ DownloadPolicy policy = (DownloadPolicy) entry.getValue();
+ List<String> options = policy.getOptions();
+
+ if ( !connector.getPolicies().containsKey( policyId ) )
+ {
+ addActionError( "Policy [" + policyId + "] must be set (missing id)." );
+ continue;
+ }
+
+ // Ugly hack to compensate for ugly browsers.
+ Object o = connector.getPolicies().get( policyId );
+ String value;
+ if ( o.getClass().isArray() )
+ {
+ String arr[] = (String[]) o;
+ value = arr[0];
+ }
+ else
+ {
+ value = (String) o;
+ }
+
+ connector.getPolicies().put( policyId, value );
+
+ if ( StringUtils.isBlank( value ) )
+ {
+ addActionError( "Policy [" + policyId + "] must be set (missing value)." );
+ continue;
+ }
+
+ if ( !options.contains( value ) )
+ {
+ addActionError( "Value of [" + value + "] is invalid for policy [" + policyId + "], valid values: "
+ + options );
+ continue;
+ }
+ }
+ }
+ }
+}
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AbstractProxyConnectorFormAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java?rev=582020&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java Thu Oct 4 15:29:43 2007
@@ -0,0 +1,81 @@
+package org.apache.maven.archiva.web.action.admin.connectors.proxy;
+
+/*
+ * 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.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+
+/**
+ * AddProxyConnectorAction
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="addProxyConnectorAction"
+ */
+public class AddProxyConnectorAction
+ extends AbstractProxyConnectorFormAction
+{
+ @Override
+ public void prepare()
+ {
+ super.prepare();
+ connector = new ProxyConnectorConfiguration();
+ }
+
+ public String input()
+ {
+ return INPUT;
+ }
+
+ public String commit()
+ {
+ /* Too complex for webwork's ${Action}-validation.xml techniques.
+ * Not appropriate for use with webwork's implements Validatable, as that validates regardless of
+ * the request method, such as .addProperty() or .addWhiteList().
+ *
+ * This validation is ultimately only useful on this one request method.
+ */
+ String sourceId = connector.getSourceRepoId();
+ String targetId = connector.getTargetRepoId();
+
+ ProxyConnectorConfiguration otherConnector = findProxyConnector( sourceId, targetId );
+ if ( otherConnector != null )
+ {
+ addActionError( "Unable to add proxy connector, as one already exists with source repository id ["
+ + sourceId + "] and target repository id [" + targetId + "]." );
+ }
+
+ validateConnector();
+
+ if ( hasActionErrors() )
+ {
+ return INPUT;
+ }
+
+ if( StringUtils.equals( DIRECT_CONNECTION, connector.getProxyId() ) )
+ {
+ connector.setProxyId( null );
+ }
+
+ addProxyConnector( connector );
+ return saveConfiguration();
+ }
+}
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/AddProxyConnectorAction.java
------------------------------------------------------------------------------
svn:mime-type = text/plain