You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ah...@apache.org on 2007/05/10 23:39:57 UTC

svn commit: r537005 - in /maven/archiva/branches/archiva-0.9: archiva-configuration/src/main/mdo/ archiva-core/src/main/java/org/apache/maven/archiva/configuration/ archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ archiva-proxy/src/test/java...

Author: aheritier
Date: Thu May 10 14:39:56 2007
New Revision: 537005

URL: http://svn.apache.org/viewvc?view=rev&rev=537005
Log:
MRM-212 : configure checksum policy for proxied repository

Modified:
    maven/archiva/branches/archiva-0.9/archiva-configuration/src/main/mdo/configuration.mdo
    maven/archiva/branches/archiva-0.9/archiva-core/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java
    maven/archiva/branches/archiva-0.9/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultProxyRequestHandler.java
    maven/archiva/branches/archiva-0.9/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java
    maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxiedRepositoryForm.jspf
    maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp

Modified: maven/archiva/branches/archiva-0.9/archiva-configuration/src/main/mdo/configuration.mdo
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-configuration/src/main/mdo/configuration.mdo?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-configuration/src/main/mdo/configuration.mdo (original)
+++ maven/archiva/branches/archiva-0.9/archiva-configuration/src/main/mdo/configuration.mdo Thu May 10 14:39:56 2007
@@ -1,537 +1,548 @@
-<!--
-  ~ 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.
-  -->
-
-<model>
-  <id>configuration</id>
-  <name>Configuration</name>
-  <description>
-    Configuration for the Maven Repository Manager.
-  </description>
-  <defaults>
-    <default>
-      <key>package</key>
-      <value>org.apache.maven.archiva.configuration</value>
-    </default>
-  </defaults>
-  <classes>
-    <class rootElement="true" xml.tagName="configuration">
-      <name>Configuration</name>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>repositories</name>
-          <version>1.0.0</version>
-          <association>
-            <type>RepositoryConfiguration</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-        <field>
-          <name>proxiedRepositories</name>
-          <version>1.0.0</version>
-          <association>
-            <type>ProxiedRepositoryConfiguration</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-        <field>
-          <name>syncedRepositories</name>
-          <version>1.0.0</version>
-          <association>
-            <type>SyncedRepositoryConfiguration</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-        <field>
-          <name>localRepository</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>
-            The location of the local repository.
-          </description>
-        </field>
-        <field>
-          <name>indexPath</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>
-            The location of the Lucene index to use for the repository. The default is the .index subdirectory of
-            the repository.
-          </description>
-        </field>
-        <field>
-          <name>minimalIndexPath</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>
-            The location of the reduced Lucene index to use for the repository. The default is the .small-index
-            subdirectory of the repository.
-          </description>
-        </field>
-        <field>
-          <name>dataRefreshCronExpression</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>When to run the data refresh task. Default is every 30 mins (translated as every 0 and 30 minute reading of every hour)</description>
-          <defaultValue>0 0,30 * * * ?</defaultValue>
+<!--
+  ~ 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.
+  -->
+
+<model>
+  <id>configuration</id>
+  <name>Configuration</name>
+  <description>
+    Configuration for the Maven Repository Manager.
+  </description>
+  <defaults>
+    <default>
+      <key>package</key>
+      <value>org.apache.maven.archiva.configuration</value>
+    </default>
+  </defaults>
+  <classes>
+    <class rootElement="true" xml.tagName="configuration">
+      <name>Configuration</name>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>repositories</name>
+          <version>1.0.0</version>
+          <association>
+            <type>RepositoryConfiguration</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>proxiedRepositories</name>
+          <version>1.0.0</version>
+          <association>
+            <type>ProxiedRepositoryConfiguration</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>syncedRepositories</name>
+          <version>1.0.0</version>
+          <association>
+            <type>SyncedRepositoryConfiguration</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>localRepository</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>
+            The location of the local repository.
+          </description>
+        </field>
+        <field>
+          <name>indexPath</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>
+            The location of the Lucene index to use for the repository. The default is the .index subdirectory of
+            the repository.
+          </description>
+        </field>
+        <field>
+          <name>minimalIndexPath</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>
+            The location of the reduced Lucene index to use for the repository. The default is the .small-index
+            subdirectory of the repository.
+          </description>
+        </field>
+        <field>
+          <name>dataRefreshCronExpression</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>When to run the data refresh task. Default is every 30 mins (translated as every 0 and 30 minute reading of every hour)</description>
+          <defaultValue>0 0,30 * * * ?</defaultValue>
         </field>
         <!-- 
-        <field>
-          <name>globalBlackListPatterns</name>
-          <version>1.0.0</version>
-          <description>Blacklisted patterns in the discovery process</description>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-           -->
-        <field>
-          <name>proxy</name>
-          <version>1.0.0</version>
-          <association>
-            <type>Proxy</type>
-          </association>
-          <description>The network proxy to use for outgoing requests.</description>
-        </field>
-      </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code><![CDATA[
-    public Configuration()
-    {
-        localRepository = new java.io.File( System.getProperty( "user.home" ), ".m2/repository" ).getAbsolutePath();
-    }
-
-    public boolean isValid()
-    {
-        boolean valid = true;
-
-        if ( indexPath == null )
-        {
-            valid = false;
-        }
-        else if ( getRepositories().isEmpty() )
-        {
-            valid = false;
-        }
-        return valid;
-    }
-
-    /**
-     * Perform any Upgrades and Adjustments needed to bring configuration up to the
-     * current configuration format.
-     */
-    public void sanitize()
-    {
-        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
-        {
-            RepositoryConfiguration repo = (RepositoryConfiguration) i.next();
-
-            // Ensure that the repo.urlName is set.
-            if ( org.codehaus.plexus.util.StringUtils.isEmpty( repo.getUrlName() ) )
-            {
-                repo.setUrlName( repo.getId() );
-            }
-        }
-    }
-
-    public RepositoryConfiguration getRepositoryByUrlName( String urlName )
-    {
-        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
-        {
-            RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
-            if ( urlName != null ? urlName.equals( repository.getUrlName() ) : repository.getUrlName() == null )
-            {
-                return repository;
-            }
-        }
-        return null;
-    }
-    
-    public RepositoryConfiguration getRepositoryById( String id )
-    {
-        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
-        {
-            RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
-            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
-            {
-                return repository;
-            }
-        }
-        return null;
-    }
-
-    public SyncedRepositoryConfiguration getSyncedRepositoryById( String id )
-    {
-        for ( java.util.Iterator i = getSyncedRepositories().iterator(); i.hasNext(); )
-        {
-            SyncedRepositoryConfiguration repository = (SyncedRepositoryConfiguration) i.next();
-            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
-            {
-                return repository;
-            }
-        }
-        return null;
-    }
-
-    public ProxiedRepositoryConfiguration getProxiedRepositoryById( String id )
-    {
-        for ( java.util.Iterator i = getProxiedRepositories().iterator(); i.hasNext(); )
-        {
-            ProxiedRepositoryConfiguration repository = (ProxiedRepositoryConfiguration) i.next();
-            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
-            {
-                return repository;
-            }
-        }
-        return null;
-    }
-
-    private java.util.Map repositoriesMap;
-
-    public java.util.Map getRepositoriesMap()
-    {
-        if ( repositoriesMap == null )
-        {
-            repositoriesMap = new java.util.HashMap();
-            for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
-            {
-                RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
-                repositoriesMap.put( repository.getId(), repository );
-            }
-        }
-        return repositoriesMap;
-    }
-
-    private java.util.Map proxiedRepositoriesMap;
-
-    public java.util.Map getProxiedRepositoriesMap()
-    {
-        if ( proxiedRepositoriesMap == null )
-        {
-            proxiedRepositoriesMap = new java.util.HashMap();
-            for ( java.util.Iterator i = getProxiedRepositories().iterator(); i.hasNext(); )
-            {
-                ProxiedRepositoryConfiguration repository = (ProxiedRepositoryConfiguration) i.next();
-                proxiedRepositoriesMap.put( repository.getId(), repository );
-            }
-        }
-        return proxiedRepositoriesMap;
-    }
-
-    private java.util.Map syncedRepositoriesMap;
-
-    public java.util.Map getSyncedRepositoriesMap()
-    {
-        if ( syncedRepositoriesMap == null )
-        {
-            syncedRepositoriesMap = new java.util.HashMap();
-            for ( java.util.Iterator i = getSyncedRepositories().iterator(); i.hasNext(); )
-            {
-                SyncedRepositoryConfiguration repository = (SyncedRepositoryConfiguration) i.next();
-                syncedRepositoriesMap.put( repository.getId(), repository );
-            }
-        }
-        return syncedRepositoriesMap;
-    }
-          ]]></code>
-        </codeSegment>
-      </codeSegments>
-    </class>
-    <class>
-      <name>AbstractRepositoryConfiguration</name>
-      <abstract>true</abstract>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>id</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The repository identifier.
-          </description>
-        </field>
-        <field>
-          <name>name</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The descriptive name of the repository.
-          </description>
-        </field>
-        <field>
-          <name>layout</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The layout of the repository. Valid values are "default" and "legacy".
-          </description>
-          <!-- TODO: should be able to detect this from the repository (perhaps by metadata at the root) -->
-          <defaultValue>default</defaultValue>
-        </field>
-      </fields>
-      <codeSegments>
-        <codeSegment>
-          <version>1.0.0</version>
-          <code><![CDATA[
-    public String toString()
-    {
-        return name + " (" + id + ")";
-    }
-          ]]></code>
-        </codeSegment>
-      </codeSegments>
-    </class>
-    <class>
-      <superClass>AbstractRepositoryConfiguration</superClass>
-      <name>RepositoryConfiguration</name>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>urlName</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The URL name for this repository.
-            Used to create the WebDAV URL for the repository such like - http://hostname.com/repository/${urlName}/
-          </description>
-        </field>
-        <field>
-          <name>directory</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The location of the repository to monitor.
-          </description>
-        </field>
-        <field>
-          <name>includeSnapshots</name>
-          <version>1.0.0</version>
-          <type>boolean</type>
-          <description>Whether to include snapshot versions in the discovery process</description>
-          <defaultValue>false</defaultValue>
-        </field>
-        <field>
-          <name>indexed</name>
-          <version>1.0.0</version>
-          <type>boolean</type>
-          <description>Whether to index the artifacts in this repository.</description>
-          <defaultValue>true</defaultValue>
-        </field>
-        <field>
-          <name>blackListPatterns</name>
-          <version>1.0.0</version>
-          <description>Blacklisted patterns in the discovery process</description>
-          <association>
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-      </fields>
-    </class>
-    <class>
-      <superClass>AbstractRepositoryConfiguration</superClass>
-      <name>ProxiedRepositoryConfiguration</name>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>url</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <required>true</required>
-          <description>
-            The URL of the remote repository to proxy.
-          </description>
-        </field>
-        <!-- TODO: would be much easier to have an association here, as long as it could be specified as a reference -->
-        <field>
-          <name>managedRepository</name>
-          <version>1.0.0</version>
-          <required>true</required>
-          <type>String</type>
-          <description>
-            The ID of the managed repository to use as the local storage for proxied artifacts.
-          </description>
-        </field>
-        <field>
-          <name>snapshotsPolicy</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <defaultValue>disabled</defaultValue>
-          <description>
-            The policy for snapshots: one of disabled, daily, hourly, interval, never
-            (allow snapshots, but never update once retrieved).
-          </description>
-        </field>
-        <field>
-          <name>snapshotsInterval</name>
-          <version>1.0.0</version>
-          <type>int</type>
-          <description>
-            The interval in minutes before updating snapshots if the policy is set to 'interval'.
-          </description>
-        </field>
-        <field>
-          <name>releasesPolicy</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <defaultValue>daily</defaultValue>
-          <description>
-            The policy for releases: one of disabled, daily, hourly, interval, never
-            (allow releases, but never update once retrieved).
-          </description>
-        </field>
-        <field>
-          <name>releasesInterval</name>
-          <version>1.0.0</version>
-          <type>int</type>
-          <description>
-            The interval in minutes before updating releases if the policy is set to 'interval'.
-          </description>
-        </field>
-        <field>
-          <name>useNetworkProxy</name>
-          <version>1.0.0</version>
-          <type>boolean</type>
-          <defaultValue>false</defaultValue>
-          <description>
-            Whether to use the network proxy, if one is configured for the protocol of this repository.
-          </description>
-        </field>
-        <field>
-          <name>cacheFailures</name>
-          <version>1.0.0</version>
-          <type>boolean</type>
-          <defaultValue>false</defaultValue>
-          <description>
-            Whether to cache failures to avoid re-attempting them over the network. The cache will last for the duration
-            of the intervals specified above depending on whether it a release or snapshot.
-          </description>
-        </field>
-        <field>
-          <name>hardFail</name>
-          <version>1.0.0</version>
-          <type>boolean</type>
-          <defaultValue>false</defaultValue>
-          <description>
-            Whether to cause the entire request to fail if attempts to retrieve from this proxy fail.
-          </description>
-        </field>
-      </fields>
-    </class>
-    <class>
-      <superClass>AbstractRepositoryConfiguration</superClass>
-      <name>SyncedRepositoryConfiguration</name>
-      <abstract>true</abstract>
-      <version>1.0.0</version>
-      <fields>
-        <!-- TODO: would be much easier to have an association here, as long as it could be specified as a reference -->
-        <field>
-          <name>managedRepository</name>
-          <version>1.0.0</version>
-          <required>true</required>
-          <type>String</type>
-          <description>
-            The ID of the managed repository to use as the local storage for proxied artifacts.
-          </description>
-        </field>
-        <field>
-          <name>cronExpression</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>When to run the sync mechanism. Default is every hour on the hour.</description>
-          <defaultValue>0 0 * * * ?</defaultValue>
-        </field>
-        <field>
-          <name>method</name>
-          <version>1.0.0</version>
-          <type>String</type>
-          <description>The type of synchronization to use.</description>
-          <defaultValue>rsync</defaultValue>
-        </field>
-        <field>
-          <name>properties</name>
-          <version>1.0.0</version>
-          <type>Properties</type>
-          <description>Configuration for the repository synchronization.</description>
-          <association xml.mapStyle="inline">
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-      </fields>
-    </class>
-    <class>
-      <name>Proxy</name>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>protocol</name>
-          <version>1.0.0</version>
-          <description><![CDATA[The proxy protocol.]]></description>
-          <type>String</type>
-          <defaultValue>http</defaultValue>
-        </field>
-        <field>
-          <name>username</name>
-          <version>1.0.0</version>
-          <description><![CDATA[The proxy user.]]></description>
-          <type>String</type>
-        </field>
-        <field>
-          <name>password</name>
-          <version>1.0.0</version>
-          <description><![CDATA[The proxy password.]]></description>
-          <type>String</type>
-        </field>
-        <field>
-          <name>port</name>
-          <version>1.0.0</version>
-          <description><![CDATA[The proxy port.]]></description>
-          <type>int</type>
-          <defaultValue>8080</defaultValue>
-        </field>
-        <field>
-          <name>host</name>
-          <version>1.0.0</version>
-          <description><![CDATA[The proxy host.]]></description>
-          <type>String</type>
-          <required>true</required>
-        </field>
-        <field>
-          <name>nonProxyHosts</name>
-          <version>1.0.0</version>
-          <description><![CDATA[
-                The list of non-proxied hosts (delimited by |).
-          ]]></description>
-          <type>String</type>
-        </field>
-      </fields>
-    </class>
-  </classes>
-</model>
-
-
+        <field>
+          <name>globalBlackListPatterns</name>
+          <version>1.0.0</version>
+          <description>Blacklisted patterns in the discovery process</description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+           -->
+        <field>
+          <name>proxy</name>
+          <version>1.0.0</version>
+          <association>
+            <type>Proxy</type>
+          </association>
+          <description>The network proxy to use for outgoing requests.</description>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>1.0.0</version>
+          <code><![CDATA[
+    public Configuration()
+    {
+        localRepository = new java.io.File( System.getProperty( "user.home" ), ".m2/repository" ).getAbsolutePath();
+    }
+
+    public boolean isValid()
+    {
+        boolean valid = true;
+
+        if ( indexPath == null )
+        {
+            valid = false;
+        }
+        else if ( getRepositories().isEmpty() )
+        {
+            valid = false;
+        }
+        return valid;
+    }
+
+    /**
+     * Perform any Upgrades and Adjustments needed to bring configuration up to the
+     * current configuration format.
+     */
+    public void sanitize()
+    {
+        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
+        {
+            RepositoryConfiguration repo = (RepositoryConfiguration) i.next();
+
+            // Ensure that the repo.urlName is set.
+            if ( org.codehaus.plexus.util.StringUtils.isEmpty( repo.getUrlName() ) )
+            {
+                repo.setUrlName( repo.getId() );
+            }
+        }
+    }
+
+    public RepositoryConfiguration getRepositoryByUrlName( String urlName )
+    {
+        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
+        {
+            RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
+            if ( urlName != null ? urlName.equals( repository.getUrlName() ) : repository.getUrlName() == null )
+            {
+                return repository;
+            }
+        }
+        return null;
+    }
+    
+    public RepositoryConfiguration getRepositoryById( String id )
+    {
+        for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
+        {
+            RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
+            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
+            {
+                return repository;
+            }
+        }
+        return null;
+    }
+
+    public SyncedRepositoryConfiguration getSyncedRepositoryById( String id )
+    {
+        for ( java.util.Iterator i = getSyncedRepositories().iterator(); i.hasNext(); )
+        {
+            SyncedRepositoryConfiguration repository = (SyncedRepositoryConfiguration) i.next();
+            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
+            {
+                return repository;
+            }
+        }
+        return null;
+    }
+
+    public ProxiedRepositoryConfiguration getProxiedRepositoryById( String id )
+    {
+        for ( java.util.Iterator i = getProxiedRepositories().iterator(); i.hasNext(); )
+        {
+            ProxiedRepositoryConfiguration repository = (ProxiedRepositoryConfiguration) i.next();
+            if ( id != null ? id.equals( repository.getId() ) : repository.getId() == null )
+            {
+                return repository;
+            }
+        }
+        return null;
+    }
+
+    private java.util.Map repositoriesMap;
+
+    public java.util.Map getRepositoriesMap()
+    {
+        if ( repositoriesMap == null )
+        {
+            repositoriesMap = new java.util.HashMap();
+            for ( java.util.Iterator i = getRepositories().iterator(); i.hasNext(); )
+            {
+                RepositoryConfiguration repository = (RepositoryConfiguration) i.next();
+                repositoriesMap.put( repository.getId(), repository );
+            }
+        }
+        return repositoriesMap;
+    }
+
+    private java.util.Map proxiedRepositoriesMap;
+
+    public java.util.Map getProxiedRepositoriesMap()
+    {
+        if ( proxiedRepositoriesMap == null )
+        {
+            proxiedRepositoriesMap = new java.util.HashMap();
+            for ( java.util.Iterator i = getProxiedRepositories().iterator(); i.hasNext(); )
+            {
+                ProxiedRepositoryConfiguration repository = (ProxiedRepositoryConfiguration) i.next();
+                proxiedRepositoriesMap.put( repository.getId(), repository );
+            }
+        }
+        return proxiedRepositoriesMap;
+    }
+
+    private java.util.Map syncedRepositoriesMap;
+
+    public java.util.Map getSyncedRepositoriesMap()
+    {
+        if ( syncedRepositoriesMap == null )
+        {
+            syncedRepositoriesMap = new java.util.HashMap();
+            for ( java.util.Iterator i = getSyncedRepositories().iterator(); i.hasNext(); )
+            {
+                SyncedRepositoryConfiguration repository = (SyncedRepositoryConfiguration) i.next();
+                syncedRepositoriesMap.put( repository.getId(), repository );
+            }
+        }
+        return syncedRepositoriesMap;
+    }
+          ]]></code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+    <class>
+      <name>AbstractRepositoryConfiguration</name>
+      <abstract>true</abstract>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>id</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The repository identifier.
+          </description>
+        </field>
+        <field>
+          <name>name</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The descriptive name of the repository.
+          </description>
+        </field>
+        <field>
+          <name>layout</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The layout of the repository. Valid values are "default" and "legacy".
+          </description>
+          <!-- TODO: should be able to detect this from the repository (perhaps by metadata at the root) -->
+          <defaultValue>default</defaultValue>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>1.0.0</version>
+          <code><![CDATA[
+    public String toString()
+    {
+        return name + " (" + id + ")";
+    }
+          ]]></code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+    <class>
+      <superClass>AbstractRepositoryConfiguration</superClass>
+      <name>RepositoryConfiguration</name>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>urlName</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The URL name for this repository.
+            Used to create the WebDAV URL for the repository such like - http://hostname.com/repository/${urlName}/
+          </description>
+        </field>
+        <field>
+          <name>directory</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The location of the repository to monitor.
+          </description>
+        </field>
+        <field>
+          <name>includeSnapshots</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <description>Whether to include snapshot versions in the discovery process</description>
+          <defaultValue>false</defaultValue>
+        </field>
+        <field>
+          <name>indexed</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <description>Whether to index the artifacts in this repository.</description>
+          <defaultValue>true</defaultValue>
+        </field>
+        <field>
+          <name>blackListPatterns</name>
+          <version>1.0.0</version>
+          <description>Blacklisted patterns in the discovery process</description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <superClass>AbstractRepositoryConfiguration</superClass>
+      <name>ProxiedRepositoryConfiguration</name>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>url</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <required>true</required>
+          <description>
+            The URL of the remote repository to proxy.
+          </description>
+        </field>
+        <!-- TODO: would be much easier to have an association here, as long as it could be specified as a reference -->
+        <field>
+          <name>managedRepository</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+          <description>
+            The ID of the managed repository to use as the local storage for proxied artifacts.
+          </description>
+        </field>
+        <field>
+          <name>snapshotsPolicy</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>disabled</defaultValue>
+          <description>
+            The policy for snapshots: one of disabled, daily, hourly, interval, never
+            (allow snapshots, but never update once retrieved).
+          </description>
+        </field>
+        <field>
+          <name>snapshotsInterval</name>
+          <version>1.0.0</version>
+          <type>int</type>
+          <description>
+            The interval in minutes before updating snapshots if the policy is set to 'interval'.
+          </description>
+        </field>
+        <field>
+          <name>releasesPolicy</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>daily</defaultValue>
+          <description>
+            The policy for releases: one of disabled, daily, hourly, interval, never
+            (allow releases, but never update once retrieved).
+          </description>
+        </field>
+        <field>
+          <name>checksumPolicy</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <defaultValue>fail</defaultValue>
+          <description>
+            The policy for checksum: one of fail, warn, ignore.
+          </description>
+        </field>
+        <field>
+          <name>releasesInterval</name>
+          <version>1.0.0</version>
+          <type>int</type>
+          <description>
+            The interval in minutes before updating releases if the policy is set to 'interval'.
+          </description>
+        </field>
+        <field>
+          <name>useNetworkProxy</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+            Whether to use the network proxy, if one is configured for the protocol of this repository.
+          </description>
+        </field>
+        <field>
+          <name>cacheFailures</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+            Whether to cache failures to avoid re-attempting them over the network. The cache will last for the duration
+            of the intervals specified above depending on whether it a release or snapshot.
+          </description>
+        </field>
+        <field>
+          <name>hardFail</name>
+          <version>1.0.0</version>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+          <description>
+            Whether to cause the entire request to fail if attempts to retrieve from this proxy fail.
+          </description>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <superClass>AbstractRepositoryConfiguration</superClass>
+      <name>SyncedRepositoryConfiguration</name>
+      <abstract>true</abstract>
+      <version>1.0.0</version>
+      <fields>
+        <!-- TODO: would be much easier to have an association here, as long as it could be specified as a reference -->
+        <field>
+          <name>managedRepository</name>
+          <version>1.0.0</version>
+          <required>true</required>
+          <type>String</type>
+          <description>
+            The ID of the managed repository to use as the local storage for proxied artifacts.
+          </description>
+        </field>
+        <field>
+          <name>cronExpression</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>When to run the sync mechanism. Default is every hour on the hour.</description>
+          <defaultValue>0 0 * * * ?</defaultValue>
+        </field>
+        <field>
+          <name>method</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>The type of synchronization to use.</description>
+          <defaultValue>rsync</defaultValue>
+        </field>
+        <field>
+          <name>properties</name>
+          <version>1.0.0</version>
+          <type>Properties</type>
+          <description>Configuration for the repository synchronization.</description>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Proxy</name>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>protocol</name>
+          <version>1.0.0</version>
+          <description><![CDATA[The proxy protocol.]]></description>
+          <type>String</type>
+          <defaultValue>http</defaultValue>
+        </field>
+        <field>
+          <name>username</name>
+          <version>1.0.0</version>
+          <description><![CDATA[The proxy user.]]></description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>password</name>
+          <version>1.0.0</version>
+          <description><![CDATA[The proxy password.]]></description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>port</name>
+          <version>1.0.0</version>
+          <description><![CDATA[The proxy port.]]></description>
+          <type>int</type>
+          <defaultValue>8080</defaultValue>
+        </field>
+        <field>
+          <name>host</name>
+          <version>1.0.0</version>
+          <description><![CDATA[The proxy host.]]></description>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>nonProxyHosts</name>
+          <version>1.0.0</version>
+          <description><![CDATA[
+                The list of non-proxied hosts (delimited by |).
+          ]]></description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+  </classes>
+</model>
+
+
+
+

Modified: maven/archiva/branches/archiva-0.9/archiva-core/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-core/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-core/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java (original)
+++ maven/archiva/branches/archiva-0.9/archiva-core/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java Thu May 10 14:39:56 2007
@@ -62,12 +62,12 @@
         String updatePolicy =
             getUpdatePolicy( configuration.getSnapshotsPolicy(), configuration.getSnapshotsInterval() );
         ArtifactRepositoryPolicy snapshotsPolicy =
-            new ArtifactRepositoryPolicy( enabled, updatePolicy, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+            new ArtifactRepositoryPolicy( enabled, updatePolicy, configuration.getChecksumPolicy() );
 
         enabled = isEnabled( configuration.getReleasesPolicy() );
         updatePolicy = getUpdatePolicy( configuration.getReleasesPolicy(), configuration.getReleasesInterval() );
         ArtifactRepositoryPolicy releasesPolicy =
-            new ArtifactRepositoryPolicy( enabled, updatePolicy, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+            new ArtifactRepositoryPolicy( enabled, updatePolicy, configuration.getChecksumPolicy() );
 
         ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) repositoryLayouts.get( configuration.getLayout() );
 

Modified: maven/archiva/branches/archiva-0.9/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultProxyRequestHandler.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultProxyRequestHandler.java?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultProxyRequestHandler.java (original)
+++ maven/archiva/branches/archiva-0.9/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultProxyRequestHandler.java Thu May 10 14:39:56 2007
@@ -545,7 +545,7 @@
 
                     if ( downloaded )
                     {
-                        success = checkChecksum( checksums, path, wagon, repositoryCachePath );
+                        success = checkChecksum( checksums, path, wagon, repositoryCachePath, policy );
 
                         if ( tries > 1 && !success )
                         {
@@ -671,11 +671,15 @@
         return connected;
     }
 
-    private boolean checkChecksum( Map checksumMap, String path, Wagon wagon, String repositoryCachePath )
+    private boolean checkChecksum( Map checksumMap, String path, Wagon wagon, String repositoryCachePath, ArtifactRepositoryPolicy policy )
         throws ProxyException
     {
         releaseChecksumListeners( wagon, checksumMap );
-
+        
+        // Ignore checksum errors. Returns always true.
+        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy.getChecksumPolicy() ) )
+            return true;
+        
         boolean correctChecksum = false;
 
         boolean allNotFound = true;
@@ -713,7 +717,8 @@
                 else
                 {
                     getLogger().warn(
-                        "The checksum '" + actualChecksum + "' did not match the remote value: " + remoteChecksum );
+                                      "The checksum '" + actualChecksum + "' did not match the remote value: "
+                                          + remoteChecksum );
                 }
             }
             catch ( TransferFailedException e )
@@ -759,7 +764,15 @@
                 tempChecksumFile.delete();
             }
         }
-        return correctChecksum || allNotFound;
+        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN.equals( policy.getChecksumPolicy() ) )
+        {
+            // We are only interested to the warnings. The result is always true.
+            return true;
+        }
+        else
+        {
+            return correctChecksum || allNotFound;
+        }
     }
 
     /**

Modified: maven/archiva/branches/archiva-0.9/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java (original)
+++ maven/archiva/branches/archiva-0.9/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java Thu May 10 14:39:56 2007
@@ -100,7 +100,8 @@
         requestHandler = (ProxyRequestHandler) lookup( ProxyRequestHandler.ROLE );
 
         factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
+        factory.setGlobalChecksumPolicy( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+        
         File repoLocation = getTestFile( "target/test-repository/managed" );
         // faster only to delete this one before copying, the others are done case by case
         FileUtils.deleteDirectory( new File( repoLocation, "org/apache/maven/test/get-merged-metadata" ) );

Modified: maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxiedRepositoryForm.jspf
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxiedRepositoryForm.jspf?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxiedRepositoryForm.jspf (original)
+++ maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxiedRepositoryForm.jspf Thu May 10 14:39:56 2007
@@ -34,9 +34,10 @@
         'daily' : 'Enabled, updated daily',
         'hourly' : 'Enabled, updated hourly',
         'never' : 'Enabled, never updated',
-        'interval' : 'Enabled, updated on given interval'}"/>
-<ww:textfield label="Release update interval" name="releasesInterval" size="4"/>
-<ww:select list="configuration.repositoriesMap" name="managedRepository" label="Proxied through"/>
-<ww:checkbox name="useNetworkProxy" fieldValue="true" label="Use HTTP Proxy"/>
-<ww:checkbox name="cacheFailures" fieldValue="true" label="Cache Failures"/>
-<ww:checkbox name="hardFail" fieldValue="true" label="Fail Whole Group"/>
+        'interval' : 'Enabled, updated on given interval'}" />
+<ww:textfield label="Release update interval" name="releasesInterval" size="4" />
+<ww:select list="configuration.repositoriesMap" name="managedRepository" label="Proxied through" />
+<ww:radio list="#@java.util.LinkedHashMap@{'fail' : 'Failure', 'warn' : 'Warning', 'ignore' : 'Ignore'}" name="checksumPolicy" label="Checksum Policy"/>
+<ww:checkbox name="useNetworkProxy" fieldValue="true" label="Use HTTP Proxy" />
+<ww:checkbox name="cacheFailures" fieldValue="true" label="Cache Failures" />
+<ww:checkbox name="hardFail" fieldValue="true" label="Fail Whole Group" />

Modified: maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp?view=diff&rev=537005&r1=537004&r2=537005
==============================================================================
--- maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp (original)
+++ maven/archiva/branches/archiva-0.9/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxiedRepositories.jsp Thu May 10 14:39:56 2007
@@ -107,6 +107,16 @@
           </td>
         </tr>
         <tr>
+          <th>Checksum policy</th>
+          <td>
+            <c:choose>
+              <c:when test="${repository.checksumPolicy == 'fail'}">Failure</c:when>
+              <c:when test="${repository.checksumPolicy == 'warn'}">Warning</c:when>
+              <c:otherwise>Ignore</c:otherwise>
+            </c:choose>
+          </td>
+        </tr>
+        <tr>
           <th>Use HTTP Proxy</th>
           <td class="${repository.useNetworkProxy ? 'donemark' : 'errormark'} booleanIcon"></td>
         </tr>
@@ -124,4 +134,4 @@
 </div>
 
 </body>
-</html>
\ No newline at end of file
+</html>