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/05/05 02:05:26 UTC

svn commit: r535418 [2/2] - in /maven/archiva/trunk: archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/util/ archiva-base/archiva-configuration/src/main/mdo/ archiva-base/archiva-policies/src/main/java/org/apache/m...

Copied: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java (from r534213, maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java)
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java?view=diff&rev=535418&p1=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java&r1=534213&p2=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/ConfigureRepositoryAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/ConfigureRepositoryAction.java Fri May  4 17:05:23 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.web.action.admin;
+package org.apache.maven.archiva.web.action.admin.repositories;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,21 +19,25 @@
  * under the License.
  */
 
-import com.opensymphony.xwork.ModelDriven;
+import com.opensymphony.xwork.ActionContext;
 import com.opensymphony.xwork.Preparable;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.common.utils.PathUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.InvalidConfigurationException;
 import org.apache.maven.archiva.configuration.RepositoryConfiguration;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
-import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
 import org.codehaus.plexus.rbac.profile.RoleProfileException;
 import org.codehaus.plexus.rbac.profile.RoleProfileManager;
 import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.security.authorization.AuthorizationException;
+import org.codehaus.plexus.security.authorization.AuthorizationResult;
 import org.codehaus.plexus.security.rbac.RbacManagerException;
 import org.codehaus.plexus.security.rbac.Resource;
+import org.codehaus.plexus.security.system.SecuritySession;
+import org.codehaus.plexus.security.system.SecuritySystem;
 import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
 import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
 import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
@@ -49,89 +53,137 @@
  */
 public class ConfigureRepositoryAction
     extends PlexusActionSupport
-    implements ModelDriven, Preparable, SecureAction
+    implements Preparable, SecureAction
 {
     /**
-     * @plexus.requirement
-     */
-    private ArchivaConfiguration archivaConfiguration;
-
-    /**
      * @plexus.requirement role-hint="archiva"
      */
     private RoleProfileManager roleProfileManager;
 
     /**
-     * The repository.
+     * @plexus.requirement
      */
-    private AdminRepositoryConfiguration repository;
+    private SecuritySystem securitySystem;
 
     /**
-     * The repository ID to lookup when editing a repository.
+     * @plexus.requirement
      */
-    private String repoId;
+    private ArchivaConfiguration archivaConfiguration;
+
+    private String repoid;
+
+    private String mode;
 
     /**
-     * The previously read configuration.
+     * The model for this action.
      */
-    private Configuration configuration;
+    private AdminRepositoryConfiguration repository;
 
     public String add()
-        throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
-        RegistryException
     {
-        // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
         getLogger().info( ".add()" );
+        this.mode = "add";
 
-        AdminRepositoryConfiguration existingRepository = getRepository( repository.getId() );
-        if ( existingRepository != null )
+        return INPUT;
+    }
+
+    public String confirm()
+    {
+        getLogger().info( ".confirm()" );
+
+        if ( operationAllowed( ArchivaRoleConstants.OPERATION_DELETE_REPOSITORY, getRepoid() ) )
         {
-            addFieldError( "id", "A repository with that id already exists" );
-            return INPUT;
+            addActionError( "You do not have the appropriate permissions to delete the " + getRepoid() + " repository." );
+            return ERROR;
         }
 
-        return saveConfiguration();
+        return INPUT;
     }
 
-    public String edit()
-        throws IOException, InvalidConfigurationException, RbacManagerException, RoleProfileException,
-        RegistryException
+    public String delete()
     {
-        // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
-        getLogger().info( ".edit()" );
+        getLogger().info( ".delete()" );
 
-        if ( StringUtils.isBlank( repository.getId() ) )
+        if ( operationAllowed( ArchivaRoleConstants.OPERATION_DELETE_REPOSITORY, getRepoid() ) )
         {
-            addFieldError( "id", "A repository with a blank id cannot be editted." );
-            return INPUT;
+            addActionError( "You do not have the appropriate permissions to delete the " + getRepoid() + " repository." );
+            return ERROR;
         }
 
-        removeRepository( getRepository() );
+        if ( StringUtils.equals( mode, "delete-entry" ) || StringUtils.equals( mode, "delete-contents" ) )
+        {
+            AdminRepositoryConfiguration existingRepository = getRepository();
+            if ( existingRepository == null )
+            {
+                addActionError( "A repository with that id does not exist" );
+                return ERROR;
+            }
 
-        addRepository();
+            // TODO: remove from index too!
 
-        return saveConfiguration();
-    }
+            try
+            {
+                removeRepository( getRepoid() );
+                removeRepositoryRoles( existingRepository );
+                saveConfiguration();
+
+                if ( StringUtils.equals( mode, "delete-contents" ) )
+                {
+                    removeContents( existingRepository );
+                }
+            }
+            catch ( IOException e )
+            {
+                addActionError( "Unable to delete repository: " + e.getMessage() );
+            }
+            catch ( RoleProfileException e )
+            {
+                addActionError( "Unable to delete repository: " + e.getMessage() );
+            }
+            catch ( InvalidConfigurationException e )
+            {
+                addActionError( "Unable to delete repository: " + e.getMessage() );
+            }
+            catch ( RbacManagerException e )
+            {
+                addActionError( "Unable to delete repository: " + e.getMessage() );
+            }
+            catch ( RegistryException e )
+            {
+                addActionError( "Unable to delete repository: " + e.getMessage() );
+            }
+        }
 
-    public Configuration getConfiguration()
-    {
-        return configuration;
+        return SUCCESS;
     }
 
-    public Object getModel()
+    public String edit()
     {
-        getLogger().info( ".getModel()" );
-        if( repository == null )
+        getLogger().info( ".edit()" );
+        this.mode = "edit";
+
+        if ( operationAllowed( ArchivaRoleConstants.OPERATION_EDIT_REPOSITORY, getRepoid() ) )
         {
-            repository = createRepository();
+            addActionError( "You do not have the appropriate permissions to edit the " + getRepoid() + " repository." );
+            return ERROR;
         }
-        
-        return repository;
+
+        return INPUT;
     }
 
-    public String getRepoId()
+    public String getMode()
     {
-        return repoId;
+        return this.mode;
+    }
+
+    public String getRepoid()
+    {
+        return repoid;
+    }
+
+    public AdminRepositoryConfiguration getRepository()
+    {
+        return repository;
     }
 
     public SecureActionBundle getSecureActionBundle()
@@ -140,80 +192,98 @@
         SecureActionBundle bundle = new SecureActionBundle();
 
         bundle.setRequiresAuthentication( true );
-
-        if ( getRepoId() != null )
-        {
-            // TODO: this is not right. It needs to change based on method. But is this really the right way to restrict this area?
-            // TODO: not right. We only care about this permission on managed repositories. Otherwise, it's configuration
-            bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_EDIT_REPOSITORY, getRepoId() );
-        }
-        else
-        {
-            bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-        }
+        bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
 
         return bundle;
     }
 
-    public String input()
-    {
-        getLogger().info( ".input()" );
-        return INPUT;
-    }
-    
-    public String doDefault()
-        throws Exception
-    {
-        getLogger().info( ".doDefault()" );
-        return super.doDefault();
-    }
-    
-    public String doInput()
-        throws Exception
-    {
-        getLogger().info( ".doInput()" );
-        return super.doInput();
-    }
-    
-    public void validate()
-    {
-        getLogger().info( ".validate()" );
-        // super.validate();
-    }
-    
-    public String execute()
+    public void prepare()
         throws Exception
     {
-        getLogger().info( ".execute()" );
-        return super.execute();
+        String id = getRepoid();
+        if ( id == null )
+        {
+            this.repository = new AdminRepositoryConfiguration();
+        }
+
+        RepositoryConfiguration repoconfig = archivaConfiguration.getConfiguration().findRepositoryById( id );
+        if ( repoconfig != null )
+        {
+            this.repository = new AdminRepositoryConfiguration( repoconfig );
+        }
     }
 
-    public void prepare()
+    public String save()
     {
-        getLogger().info( ".prepare()" );
-        configuration = archivaConfiguration.getConfiguration();
+        String mode = getMode();
+        String repoId = getRepository().getId();
 
-        if ( repository == null )
+        getLogger().info( ".save(" + mode + ":" + repoId + ")" );
+
+        if ( StringUtils.isBlank( repository.getId() ) )
+        {
+            addFieldError( "id", "A repository with a blank id cannot be saved." );
+            return SUCCESS;
+        }
+
+        if ( StringUtils.equalsIgnoreCase( "edit", mode ) )
+        {
+            removeRepository( repoId );
+        }
+
+        try
+        {
+            addRepository( getRepository() );
+            saveConfiguration();
+        }
+        catch ( IOException e )
+        {
+            addActionError( "I/O Exception: " + e.getMessage() );
+        }
+        catch ( RoleProfileException e )
+        {
+            addActionError( "Role Profile Exception: " + e.getMessage() );
+        }
+        catch ( InvalidConfigurationException e )
+        {
+            addActionError( "Invalid Configuration Exception: " + e.getMessage() );
+        }
+        catch ( RbacManagerException e )
         {
-            repository = getRepository( repoId );
+            addActionError( "RBAC Manager Exception: " + e.getMessage() );
         }
-        if ( repository == null )
+        catch ( RegistryException e )
         {
-            repository = createRepository();
+            addActionError( "Configuration Registry Exception: " + e.getMessage() );
         }
+
+        return SUCCESS;
     }
 
-    public void setRepoId( String repoId )
+    public void setMode( String mode )
     {
-        this.repoId = repoId;
+        this.mode = mode;
     }
-    
-    private void addRepository()
+
+    public void setRepoid( String repoid )
+    {
+        this.repoid = repoid;
+    }
+
+    public void setRepository( AdminRepositoryConfiguration repository )
+    {
+        this.repository = repository;
+    }
+
+    private void addRepository( AdminRepositoryConfiguration repository )
         throws IOException, RoleProfileException
     {
-        getLogger().info( ".addRepository()" );
-        AdminRepositoryConfiguration repository = (AdminRepositoryConfiguration) getRepository();
+        getLogger().info( ".addRepository(" + repository + ")" );
 
+        // Fix the URL entry (could possibly be a filesystem path)
+        String rawUrlEntry = repository.getUrl();
+        repository.setUrl( PathUtil.toUrl( rawUrlEntry ) );
+        
         if ( repository.isManaged() )
         {
             // Normalize the path
@@ -226,7 +296,7 @@
             }
         }
 
-        configuration.addRepository( repository );
+        archivaConfiguration.getConfiguration().addRepository( repository );
 
         // TODO: double check these are configured on start up
         roleProfileManager.getDynamicRole( "archiva-repository-manager", repository.getId() );
@@ -234,43 +304,55 @@
         roleProfileManager.getDynamicRole( "archiva-repository-observer", repository.getId() );
     }
 
-    private AdminRepositoryConfiguration createRepository()
+    private boolean operationAllowed( String permission, String repoid )
     {
-        getLogger().info( ".createRepository()" );
-        AdminRepositoryConfiguration repository = new AdminRepositoryConfiguration();
-        repository.setIndexed( false );
-        return repository;
-    }
+        ActionContext context = ActionContext.getContext();
+        SecuritySession securitySession = (SecuritySession) context.get( SecuritySession.ROLE );
 
-    private AdminRepositoryConfiguration getRepository()
-    {
-        return repository;
+        AuthorizationResult authzResult;
+        try
+        {
+            authzResult = securitySystem.authorize( securitySession, permission, repoid );
+
+            return authzResult.isAuthorized();
+        }
+        catch ( AuthorizationException e )
+        {
+            getLogger().info(
+                              "Unable to authorize permission: " + permission + " against repo: " + repoid
+                                  + " due to: " + e.getMessage() );
+            return false;
+        }
     }
 
-    private AdminRepositoryConfiguration getRepository( String id )
+    private void removeContents( AdminRepositoryConfiguration existingRepository )
+        throws IOException
     {
-        getLogger().info( ".getRepository(" + id + ")" );
-
-        RepositoryConfiguration repoconfig = configuration.findRepositoryById( id );
-        if ( repoconfig == null )
+        if ( existingRepository.isManaged() )
         {
-            return createRepository();
+            getLogger().info( "Removing " + existingRepository.getDirectory() );
+            FileUtils.deleteDirectory( new File( existingRepository.getDirectory() ) );
         }
-        return new AdminRepositoryConfiguration( repoconfig );
     }
 
-    private boolean removeRepository( RepositoryConfiguration existingRepository )
+    private void removeRepository( String repoId )
     {
         getLogger().info( ".removeRepository()" );
 
-        RepositoryConfiguration toremove = configuration.findRepositoryById( existingRepository.getId() );
+        RepositoryConfiguration toremove = archivaConfiguration.getConfiguration().findRepositoryById( repoId );
         if ( toremove != null )
         {
-            configuration.removeRepository( toremove );
-            return true;
+            archivaConfiguration.getConfiguration().removeRepository( toremove );
         }
-        
-        return false;
+    }
+
+    private void removeRepositoryRoles( RepositoryConfiguration existingRepository )
+        throws RoleProfileException
+    {
+        roleProfileManager.deleteDynamicRole( "archiva-repository-manager", existingRepository.getId() );
+        roleProfileManager.deleteDynamicRole( "archiva-repository-observer", existingRepository.getId() );
+
+        getLogger().info( "removed user roles associated with repository " + existingRepository.getId() );
     }
 
     private String saveConfiguration()
@@ -278,11 +360,8 @@
         RegistryException
     {
         getLogger().info( ".saveConfiguration()" );
-        addRepository();
-
-        archivaConfiguration.save( configuration );
 
-        // TODO: do we need to check if indexing is needed?
+        archivaConfiguration.save( archivaConfiguration.getConfiguration() );
 
         addActionMessage( "Successfully saved configuration" );
 

Copied: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java (from r534213, maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java)
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java?view=diff&rev=535418&p1=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java&r1=534213&p2=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/RepositoriesAction.java (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoriesAction.java Fri May  4 17:05:23 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.web.action.admin;
+package org.apache.maven.archiva.web.action.admin.repositories;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,17 +20,17 @@
  */
 
 import com.opensymphony.webwork.interceptor.ServletRequestAware;
-import com.opensymphony.xwork.ModelDriven;
 import com.opensymphony.xwork.Preparable;
-import com.opensymphony.xwork.Validateable;
 
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Transformer;
+import org.apache.commons.collections.list.TransformedList;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics;
-import org.apache.maven.archiva.model.RepositoryContentStatistics;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.util.LocalRepositoryPredicate;
+import org.apache.maven.archiva.configuration.util.RemoteRepositoryPredicate;
+import org.apache.maven.archiva.configuration.util.RepositoryConfigurationComparator;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
-import org.apache.maven.archiva.web.action.admin.models.AdminModel;
-import org.apache.maven.archiva.web.action.admin.models.AdminRepositoryConfiguration;
 import org.apache.maven.archiva.web.util.ContextUtils;
 import org.codehaus.plexus.security.rbac.Resource;
 import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
@@ -38,7 +38,8 @@
 import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
-import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -53,44 +54,27 @@
  */
 public class RepositoriesAction
     extends PlexusActionSupport
-    implements ModelDriven, Preparable, Validateable, SecureAction, ServletRequestAware
+    implements SecureAction, ServletRequestAware, Preparable
 {
     /**
-     * @plexus.requirement role-hint="jdo"
+     * @plexus.requirement role-hint="adminrepoconfig"
      */
-    private ArchivaDAO dao;
+    private Transformer repoConfigToAdmin;
 
     /**
      * @plexus.requirement
      */
     private ArchivaConfiguration archivaConfiguration;
 
-    private AdminModel model;
+    private List managedRepositories;
 
-    private String baseUrl;
-
-    public Object getModel()
-    {
-        return getAdminModel();
-    }
-
-    public void prepare()
-        throws Exception
-    {
-        model = null;
-        getModel();
-    }
+    private List remoteRepositories;
 
-    public void validate()
-    {
-        super.validate();
-    }
+    private String baseUrl;
 
-    public String execute()
-        throws Exception
+    public void setServletRequest( HttpServletRequest request )
     {
-        getLogger().info( ".execute()" );
-        return super.execute();
+        this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
     }
 
     public SecureActionBundle getSecureActionBundle()
@@ -104,46 +88,33 @@
         return bundle;
     }
 
-    public void setServletRequest( HttpServletRequest request )
+    public void prepare()
+        throws Exception
     {
-        this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
-    }
+        Configuration config = archivaConfiguration.getConfiguration();
 
-    public AdminModel getAdminModel()
-    {
-        if ( model == null )
-        {
-            model = new AdminModel( archivaConfiguration.getConfiguration() );
-            model.setBaseUrl( baseUrl );
-            updateLastIndexed( model.getManagedRepositories() );
-        }
+        remoteRepositories = TransformedList.decorate( new ArrayList(), repoConfigToAdmin );
+        managedRepositories = TransformedList.decorate( new ArrayList(), repoConfigToAdmin );
 
-        return model;
+        remoteRepositories.addAll( CollectionUtils.select( config.getRepositories(), RemoteRepositoryPredicate.getInstance() ) );
+        managedRepositories.addAll( CollectionUtils.select( config.getRepositories(), LocalRepositoryPredicate.getInstance() ) );
+
+        Collections.sort( managedRepositories, new RepositoryConfigurationComparator() );
+        Collections.sort( remoteRepositories, new RepositoryConfigurationComparator() );
     }
 
-    private void updateLastIndexed( List managedRepositories )
+    public List getManagedRepositories()
     {
-        Iterator it = managedRepositories.iterator();
-        while ( it.hasNext() )
-        {
-            AdminRepositoryConfiguration config = (AdminRepositoryConfiguration) it.next();
-
-            List results = dao.query( new MostRecentRepositoryScanStatistics( config.getId() ) );
-            if ( !results.isEmpty() )
-            {
-                RepositoryContentStatistics stats = (RepositoryContentStatistics) results.get( 0 );
-                config.setStats( stats );
-            }
-        }
+        return managedRepositories;
     }
 
-    public String getBaseUrlB()
+    public List getRemoteRepositories()
     {
-        return baseUrl;
+        return remoteRepositories;
     }
 
-    public void setBaseUrlB( String baseUrl )
+    public String getBaseUrl()
     {
-        this.baseUrl = baseUrl;
+        return baseUrl;
     }
 }

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.java?view=auto&rev=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.java (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.java Fri May  4 17:05:23 2007
@@ -0,0 +1,75 @@
+package org.apache.maven.archiva.web.action.admin.repositories;
+
+/*
+ * 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.Transformer;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.constraints.MostRecentRepositoryScanStatistics;
+import org.apache.maven.archiva.model.RepositoryContentStatistics;
+
+import java.util.List;
+
+/**
+ * RepositoryConfigurationAdminTransformer 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.commons.collections.Transformer"
+ *                   role-hint="adminrepoconfig"
+ */
+public class RepositoryConfigurationAdminTransformer
+    implements Transformer
+{
+    /**
+     * @plexus.requirement role-hint="jdo"
+     */
+    private ArchivaDAO dao;
+
+    public Object transform( Object input )
+    {
+        if ( input instanceof RepositoryConfiguration )
+        {
+            RepositoryConfiguration repoconfig = (RepositoryConfiguration) input;
+            AdminRepositoryConfiguration arepo = new AdminRepositoryConfiguration( repoconfig );
+
+            if ( arepo.isManaged() )
+            {
+                arepo.setStats( getLatestStats( arepo.getId() ) );
+            }
+
+            return arepo;
+        }
+
+        return null;
+    }
+
+    private RepositoryContentStatistics getLatestStats( String repoId )
+    {
+        List results = dao.query( new MostRecentRepositoryScanStatistics( repoId ) );
+        if ( results.isEmpty() )
+        {
+            return null;
+        }
+
+        return (RepositoryContentStatistics) results.get( 0 );
+    }
+}

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/RepositoryConfigurationAdminTransformer.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/repositories/RepositoryConfigurationAdminTransformer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java?view=auto&rev=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java Fri May  4 17:05:23 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.web.action.admin.scanning;
+
+/*
+ * 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.webwork.interceptor.ServletRequestAware;
+import com.opensymphony.xwork.ModelDriven;
+import com.opensymphony.xwork.Preparable;
+import com.opensymphony.xwork.Validateable;
+
+import org.codehaus.plexus.security.ui.web.interceptor.SecureAction;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionBundle;
+import org.codehaus.plexus.security.ui.web.interceptor.SecureActionException;
+import org.codehaus.plexus.xwork.action.PlexusActionSupport;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * RepositoryScanningAction 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoryScanningAction"
+ */
+public class RepositoryScanningAction
+extends PlexusActionSupport
+implements ModelDriven, Preparable, Validateable, SecureAction, ServletRequestAware
+{
+
+    public Object getModel()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void prepare()
+        throws Exception
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public SecureActionBundle getSecureActionBundle()
+        throws SecureActionException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void setServletRequest( HttpServletRequest request )
+    {
+        // TODO Auto-generated method stub
+        
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/scanning/RepositoryScanningAction.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/scanning/RepositoryScanningAction.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml Fri May  4 17:05:23 2007
@@ -36,11 +36,15 @@
       <interceptor name="pssSecureActions" class="pssSecureActionInterceptor"/>
       <interceptor name="pssAutoLogin" class="pssAutoLoginInterceptor"/>
       <interceptor name="pssPolicyEnforcement" class="pssPolicyEnforcementInterceptor"/>
-
+      <interceptor name="paramFilter" class="com.opensymphony.xwork.interceptor.ParameterFilterInterceptor" />
+      
       <interceptor-stack name="configuredArchivaStack">
         <interceptor-ref name="pssForceAdminUser"/>
         <interceptor-ref name="pssAutoLogin"/>
         <interceptor-ref name="defaultStack"/>
+        <interceptor-ref name="paramFilter">
+          <param name="blocked">externalResult</param>
+        </interceptor-ref>
         <interceptor-ref name="pssSecureActions"/>
         <interceptor-ref name="pssPolicyEnforcement"/>
         <interceptor-ref name="configuration"/>
@@ -225,8 +229,11 @@
       <result name="input">/WEB-INF/jsp/admin/repositories.jsp</result>
     </action>
     
+    <!-- .\ REPOSITORIES \.____________________________________________ -->
+    
     <action name="repositories" class="repositoriesAction" method="input">
       <result name="input">/WEB-INF/jsp/admin/repositories.jsp</result>
+      <result name="confirm" type="redirect-action">deleteRepository</result>
     </action>
     
     <action name="indexRepository" class="indexRepositoryAction" method="run">
@@ -235,26 +242,85 @@
 
     <action name="addRepository" class="configureRepositoryAction" method="add">
       <result name="input">/WEB-INF/jsp/admin/addRepository.jsp</result>
-      <result type="redirect-action">repositories</result>
-      <!-- <interceptor-ref name="unconfiguredArchivaStack"/> -->
+      <result name="success" type="redirect-action">repositories</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
     </action>
 
-    <action name="editRepository" class="editRepositoryAction" method="edit">
+    <action name="editRepository" class="configureRepositoryAction" method="edit">
       <result name="input">/WEB-INF/jsp/admin/editRepository.jsp</result>
       <result name="error" type="redirect-action">repositories</result>
       <result name="success" type="redirect-action">repositories</result>
       <interceptor-ref name="configuredPrepareParamsStack"/>
     </action>
     
-    <action name="saveRepository" class="saveRepositoryAction" method="save">
+    <action name="saveRepository" class="configureRepositoryAction" method="save">
       <result name="success" type="redirect-action">repositories</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
     </action>
 
-    <action name="deleteRepository" class="deleteRepositoryAction">
+    <action name="deleteRepository" class="configureRepositoryAction" method="confirm">
       <result name="input">/WEB-INF/jsp/admin/deleteRepository.jsp</result>
-      <result type="redirect-action">repositories</result>
+      <result name="success" type="redirect-action">repositories</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
     </action>
 
+    <!-- .\ PROXY CONNECTORS \.________________________________________ -->
+    
+    <action name="proxyConnectors" class="proxyConnectorsAction" method="input">
+      <result name="input">/WEB-INF/jsp/admin/proxyConnectors.jsp</result>
+    </action>
+    
+    <action name="addProxyConnector" class="configureProxyConnectorAction" method="add">
+      <result name="input">/WEB-INF/jsp/admin/addProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+    
+    <action name="configureProxyConnector" class="configureProxyConnectorAction" method="input">
+      <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+    
+    <action name="editProxyConnector" class="configureProxyConnectorAction" method="edit">
+      <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+    
+    <action name="saveProxyConnector" class="configureProxyConnectorAction" method="save">
+      <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+    
+    <action name="deleteProxyConnector" class="configureProxyConnectorAction" method="confirm">
+      <result name="input">/WEB-INF/jsp/admin/deleteProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+    
+    <!-- .\ NETWORK PROXIES \._________________________________________ -->
+    
+    <action name="networkProxies" class="networkProxiesAction" method="input">
+      <result name="input">/WEB-INF/jsp/admin/networkProxies.jsp</result>
+    </action>
+    
+    <!-- .\ REPOSITORY SCANNING \._____________________________________ -->
+    
+    <action name="repositoryScanning" class="repositoryScanningAction" method="input">
+      <result name="input">/WEB-INF/jsp/admin/repositoryScanning.jsp</result>
+    </action>
+    
+    <!-- .\ DATABASE \.________________________________________________ -->
+    
+    <action name="database" class="databaseAction" method="input">
+      <result name="input">/WEB-INF/jsp/admin/database.jsp</result>
+    </action>
+    
+    <!-- .\ CONFIGURATION \.___________________________________________ -->
+    
+    
     <action name="configure" class="configureAction" method="input">
       <result name="input">/WEB-INF/jsp/admin/configure.jsp</result>
       <interceptor-ref name="unconfiguredArchivaStack"/>

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp?view=auto&rev=535418
==============================================================================
    (empty)

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addProxyConnector.jsp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/addRepository.jsp Fri May  4 17:05:23 2007
@@ -21,27 +21,28 @@
 
 <html>
 <head>
-  <title>Configuration</title>
+  <title>Admin: Add Repository</title>
   <ww:head/>
 </head>
 
 <body>
 
-<h1>Configuration</h1>
+<h1>Admin: Add Repository</h1>
 
 <div id="contentArea">
 
-  <h2>Add Managed Repository</h2>
+  <h2>Add Repository</h2>
 
   <ww:actionmessage/>
-  <ww:form method="post" action="addRepository" namespace="/admin" validate="true">
-    <ww:textfield name="model.id" label="Identifier" size="10" required="true"/>
-    <%@ include file="/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf" %>
+  <ww:form method="post" action="saveRepository" namespace="/admin" validate="true">
+    <ww:hidden name="mode" value="add"/>
+    <ww:textfield name="repository.id" label="Identifier" size="10" required="true"/>
+    <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
     <ww:submit value="Add Repository"/>
   </ww:form>
 
   <script type="text/javascript">
-    document.getElementById("addRepository_id").focus();
+    document.getElementById("saveRepository_id").focus();
   </script>
 
 </div>

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/deleteRepository.jsp Fri May  4 17:05:23 2007
@@ -37,11 +37,11 @@
     <strong><span class="statusFailed">WARNING:</span> This operation can not be undone.</strong>
   </blockquote>
 
-  <ww:form method="post" action="deleteRepository" namespace="/admin" validate="true">
-    <ww:hidden name="repoId"/>
+  <ww:form method="post" action="deleteRepository!delete" namespace="/admin" validate="true">
+    <ww:hidden name="repoid"/>
     <ww:radio list="#@java.util.LinkedHashMap@{'delete-contents' : 'Remove the repository and delete its contents from disk',
     'delete-entry' : 'Remove the repository from the management list, but leave the contents unmodified',
-    'unmodified' : 'Leave the repository unmodified'}" name="operation" theme="archiva"/>
+    'unmodified' : 'Leave the repository unmodified'}" name="mode" theme="archiva"/>
     <ww:submit value="Go"/>
   </ww:form>
 </div>

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp?view=auto&rev=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp Fri May  4 17:05:23 2007
@@ -0,0 +1,52 @@
+<%--
+  ~ 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.
+  --%>
+
+<%@ taglib prefix="ww" uri="/webwork" %>
+
+<html>
+<head>
+  <title>Admin : Edit Proxy Connector</title>
+  <ww:head/>
+</head>
+
+<body>
+
+<h1>Admin : Edit Proxy Connector</h1>
+
+<div id="contentArea">
+
+  <h2>Edit Proxy Connector</h2>
+
+  <ww:actionerror/>
+  <ww:actionmessage/>
+  
+  <ww:form method="post" action="saveProxyConnector" namespace="/admin" validate="false">
+    <ww:hidden name="mode"/>  
+    <%@ include file="/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf" %>
+    <ww:submit value="Save Proxy Connector"/>
+  </ww:form>
+
+  <script type="text/javascript">
+    document.getElementById("saveProxyConnector_proxyId").focus();
+  </script>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editProxyConnector.jsp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/editRepository.jsp Fri May  4 17:05:23 2007
@@ -21,28 +21,28 @@
 
 <html>
 <head>
-  <title>Configuration</title>
+  <title>Admin: Edit Repository</title>
   <ww:head/>
 </head>
 
 <body>
 
-<h1>Configuration</h1>
+<h1>Admin: Edit Repository</h1>
 
 <div id="contentArea">
 
-  <h2>Edit Managed Repository</h2>
+  <h2>Edit Repository</h2>
 
   <ww:actionmessage/>
   <ww:form method="post" action="saveRepository" namespace="/admin" validate="false">
-    <ww:hidden name="mode"/>  
-    <ww:hidden name="id"/>
-    <%@ include file="/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf" %>
+    <ww:hidden name="mode" value="edit"/>  
+    <ww:hidden name="repository.id"/>
+    <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
     <ww:submit value="Update Repository"/>
   </ww:form>
 
   <script type="text/javascript">
-    document.getElementById("editRepository_name").focus();
+    document.getElementById("saveRepository_name").focus();
   </script>
 
 </div>

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf?view=auto&rev=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf Fri May  4 17:05:23 2007
@@ -0,0 +1,196 @@
+<%--
+  ~ 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.
+  --%>
+<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+<c:url var="iconDeleteUrl" value="/images/icons/delete.gif" />
+
+<input type="hidden" name="pattern"/>
+<ww:select name="connector.proxyId" list="proxyIdOptions" label="Network Proxy" required="true"/>
+<ww:select name="connector.sourceRepoId" list="localRepoIdList" label="Local Repository" required="true"/>
+<ww:select name="connector.targetRepoId" list="remoteRepoIdList" label="Remote Repository" required="true" />
+
+<script type="text/javascript">
+<!--
+  function setAndSubmit(id, value, action)
+  {
+     var f = document.forms.saveProxyConnector;
+     
+     f.action = action;
+     f[id].value = value;
+     f.submit();
+  }
+//-->
+</script>
+
+<tr><td valign="top"><label>Policies:</label></td>
+<td>
+  <table>
+    <c:forEach items="${policyMap}" var="policy" varStatus="i">
+      <tr>
+        <td>
+          <ww:label for="policy_${policy.key}" required="true"
+                    theme="simple">${policy.key}:</ww:label>
+        </td>
+        <td>
+        <ww:select name="connector.policies['${policy.key}']"
+                   list="policyMap['${policy.key}'].options"
+                   value="connector.policies['${policy.key}']"
+                   id="policy_${policy.key}"
+                   theme="simple"
+                   cssStyle="width: 10em" />
+        </td>
+      </tr>
+    </c:forEach>
+  </table>
+</td></tr>
+
+<tr class="seperator">
+  <td valign="top">
+    <label for="propertiesEntry">Properties:</label>
+  </td>
+  <td>
+    <ww:textfield name="propertyKey" size="15" id="propertiesEntry" theme="simple" /> :
+    <ww:textfield name="propertyValue" size="15" id="propertiesValue" theme="simple" />
+    <ww:submit name="action:editProxyConnector!addProperty" value="Add Property" theme="simple" />
+  </td>
+</tr>
+<tr>
+  <td>
+  </td>
+  <td>
+    <c:choose>
+      <c:when test="${empty(connector.properties)}">
+        <i>No properties have been set.</i>
+      </c:when>
+      <c:otherwise>
+        <ww:url id="removePropertyUrl" 
+                action="editProxyConnector" 
+                method="removeProperty" />
+        <table>
+          <c:forEach items="${connector.properties}" var="property" varStatus="i">
+            <tr>
+              <td>
+                <ww:label for="property_${property.key}"
+                          theme="simple">${property.key}</ww:label>
+              </td>
+              <td>
+                <ww:textfield name="connector.properties['${property.key}']" 
+                          size="15"
+                          id="property_${property.key}"
+                          theme="simple" />
+              </td>
+              <td>
+                <ww:a href="#" title="Remove [${property.key}] Property"
+                      onclick="setAndSubmit('propertyKey', '${property.key}', '%{removePropertyUrl}')"
+                      theme="simple">
+                <img src="${iconDeleteUrl}" /></ww:a>
+                
+              </td>
+            </tr>
+          </c:forEach>
+        </table>
+      </c:otherwise>
+    </c:choose>
+  </td>
+</tr>
+
+<tr class="seperator">
+  <td valign="top">
+    <label for="blackListEntry">Black List:</label>
+  </td>
+  <td>
+    <ww:textfield name="blackListPattern" size="30" id="blackListEntry" theme="simple" />
+    <ww:submit name="action:editProxyConnector!addBlackListPattern" value="Add Pattern" theme="simple" />
+  </td>
+</tr>
+<tr>
+  <td>
+  </td>
+  <td>
+    <ww:url id="removeBlackListPatternUrl" 
+            action="editProxyConnector" 
+            method="removeBlackListPattern" />
+    <c:choose>
+      <c:when test="${empty(connector.blackListPatterns)}">
+        <i>No black list patterns have been set.</i>
+      </c:when>
+      <c:otherwise>
+        <table>
+        <c:forEach items="${connector.blackListPatterns}" var="pattern" varStatus="i">
+          <tr>
+            <td>
+              <ww:hidden name="connector.blackListPatterns" value="${pattern}"/>
+              <code>"${pattern}"</code>
+            </td>
+            <td>
+              <ww:a href="#" title="Remove [${pattern}] Pattern"
+                    onclick="setAndSubmit('pattern', '${pattern}', '%{removeBlackListPatternUrl}')"
+                    theme="simple">
+              <img src="${iconDeleteUrl}" /></ww:a>
+            </td>
+          </tr>
+        </c:forEach>
+        </table>
+      </c:otherwise>
+    </c:choose>
+  </td>
+</tr>
+
+<tr class="seperator">
+  <td valign="top">
+    <label for="whiteListEntry">White List:</label>
+  </td>
+  <td>
+    <ww:textfield name="whiteListPattern" size="30" id="whiteListEntry" theme="simple" />
+    <ww:submit name="action:editProxyConnector!addWhiteListPattern" value="Add Pattern" theme="simple" />
+  </td>
+</tr>
+<tr>
+  <td>
+  </td>
+  <td>
+    <ww:url id="removeWhiteListPatternUrl" 
+            action="editProxyConnector" 
+            method="removeWhiteListPattern" />
+    <c:choose>
+      <c:when test="${empty(connector.whiteListPatterns)}">
+        <i>No white list patterns have been set.</i>
+      </c:when>
+      <c:otherwise>
+        <table>
+        <c:forEach items="${connector.whiteListPatterns}" var="pattern" varStatus="i">
+          <tr>
+            <td>
+              <ww:hidden name="connector.whiteListPatterns" value="${pattern}"/>
+              <code>"${pattern}"</code>
+            </td>
+            <td>
+              <ww:a href="#" title="Remove [${pattern}] Pattern"
+                    onclick="setAndSubmit('pattern', '${pattern}', '%{removeWhiteListPatternUrl}')"
+                    theme="simple">
+              <img src="${iconDeleteUrl}" /></ww:a>
+            </td>
+          </tr>
+        </c:forEach>
+        </table>
+      </c:otherwise>
+    </c:choose>
+  </td>
+</tr>

Copied: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf (from r534213, maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf)
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf?view=diff&rev=535418&p1=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf&r1=534213&p2=maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/managedRepositoryForm.jspf (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/repositoryForm.jspf Fri May  4 17:05:23 2007
@@ -19,11 +19,11 @@
 <%@ taglib prefix="ww" uri="/webwork" %>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
-<ww:textfield name="name" label="Name" size="50" required="true"/>
-<ww:textfield name="directory" label="Directory" size="100" required="true"/>
+<ww:textfield name="repository.name" label="Name" size="50" required="true"/>
+<ww:textfield name="repository.url" label="Directory or URL" size="100" required="true"/>  
 <ww:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
-           name="layout" label="Type"/>
-<ww:textfield name="refreshCronExpression" label="Cron" size="100" required="true" />
-<ww:checkbox name="releases" fieldValue="true" label="Releases Included"/>
-<ww:checkbox name="snapshots" fieldValue="false" label="Snapshots Included"/>
-<ww:checkbox name="indexed" fieldValue="true" label="Indexed"/>
+           name="repository.layout" label="Type"/>
+<ww:textfield name="repository.refreshCronExpression" label="Cron" size="100" required="true" />
+<ww:checkbox name="repository.releases" fieldValue="true" label="Releases Included"/>
+<ww:checkbox name="repository.snapshots" fieldValue="false" label="Snapshots Included"/>
+<ww:checkbox name="repository.indexed" fieldValue="true" label="Indexed"/>

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp?view=auto&rev=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp (added)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp Fri May  4 17:05:23 2007
@@ -0,0 +1,170 @@
+<%--
+  ~ 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.
+  --%>
+
+<%@ taglib prefix="ww" uri="/webwork" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
+<%@ taglib prefix="pss" uri="/plexusSecuritySystem" %>
+<%@ taglib prefix="archiva" uri="http://maven.apache.org/archiva" %>
+
+<html>
+<head>
+  <title>Administration - Proxy Connectors</title>
+  <ww:head/>
+</head>
+
+<body>
+
+<h1>Administration - Proxy Connectors</h1>
+
+<div id="contentArea">
+
+  <ww:actionerror />
+  <ww:actionmessage />
+  
+  <div style="float:right">
+    <pss:ifAnyAuthorized permissions="archiva-manage-configuration">
+      <ww:url id="addProxyConnectorUrl" action="addProxyConnector" />
+      <ww:a href="%{addProxyConnectorUrl}" cssClass="create">
+        <img src="<c:url value="/images/icons/create.png" />" />
+        Add Proxy Connector
+      </ww:a>
+    </pss:ifAnyAuthorized>
+  </div>
+  
+  <h2>Repository Proxy Connectors</h2>
+  
+  <c:choose>
+    <c:when test="${empty(proxyConnectorMap)}">
+      <strong>No Repository Proxy Connectors Defined.</strong>
+    </c:when>
+    <c:otherwise>
+      <table width="100%">
+      <c:forEach items="${proxyConnectorMap}" var="repository" varStatus="i">
+              
+        <c:forEach items="${repository.value}" var="connector" varStatus="pc">
+          <tr class="proxyConnector">
+            <c:if test="${pc.first}">
+              <td class="managedRepo" rowspan="${fn:length(repository.value)}">
+                <div>
+                  <img src="<c:url value="/images/archiva-splat-32.gif"/>" />
+                  <p class="id">${repository.key}</p>
+                  <p class="name">${repoMap[repository.key].name}</p>
+                </div>
+              </td>
+            </c:if>
+            <td class="connector">
+              <div class="wrap">
+                <div class="controls">
+                  <pss:ifAnyAuthorized permissions="archiva-manage-configuration">
+                    <ww:url id="editProxyConnectorUrl" action="editProxyConnector">
+                      <ww:param name="target" value="%{'${connector.targetRepoId}'}" />
+                      <ww:param name="source" value="%{'${connector.sourceRepoId}'}" />
+                    </ww:url>
+                    <ww:url id="deleteProxyConnectorUrl" action="deleteProxyConnector" method="confirm">
+                      <ww:param name="source" value="%{'${connector.sourceRepoId}'}" />
+                      <ww:param name="target" value="%{'${connector.targetRepoId}'}" />
+                    </ww:url>
+                    <ww:a href="%{editProxyConnectorUrl}" cssClass="edit" title="Edit Proxy Connector">
+                      <img src="<c:url value="/images/icons/edit.png" />" />
+                    </ww:a>
+                    <ww:a href="%{deleteProxyConnectorUrl}" cssClass="delete" title="Delete Proxy Connector">
+                      <img src="<c:url value="/images/icons/delete.gif" />" />
+                    </ww:a>
+                  </pss:ifAnyAuthorized>
+                </div>
+                
+                <h4>Proxy Connector</h4>
+                <table>
+                  <tr>
+                    <th nowrap="nowrap">Network Proxy:</th>
+                    <td>
+                      <c:choose>
+                        <c:when test="${empty(connector.proxyId)}">
+                          <i>(Direct Connection)</i>
+                        </c:when>
+                        <c:otherwise>
+                          ${connector.proxyId}
+                        </c:otherwise>
+                      </c:choose>
+                    </td>
+                  </tr>
+                  <tr>
+                    <th>Policies:</th>
+                    <td nowrap="nowrap">
+                      <c:forEach items="${connector.policies}" var="policies">
+                         <p><em>${policies.key}</em>: ${policies.value}</p>
+                      </c:forEach>
+                    </td>
+                  </tr>
+                  
+                  <c:if test="${not(empty(connector.whiteListPatterns))}">
+                    <tr>
+                      <th nowrap="nowrap">White List:</th>
+                      <td nowrap="nowrap">
+                        <c:forEach items="${connector.whiteListPatterns}" var="pattern">
+                           <p><code>"${pattern}"</code></p>
+                        </c:forEach>
+                      </td>
+                    </tr>
+                  </c:if>
+                  
+                  <c:if test="${not(empty(connector.blackListPatterns))}">
+                    <tr>
+                      <th nowrap="nowrap">Black List:</th>
+                      <td>
+                        <c:forEach items="${connector.blackListPatterns}" var="pattern">
+                           <p><code>"${pattern}"</code></p>
+                        </c:forEach>
+                      </td>
+                    </tr>
+                  </c:if>
+                  
+                  <c:if test="${not(empty(connector.properties))}">
+                    <tr>
+                      <th>Properties:</th>
+                      <td>
+                        <c:forEach items="${connector.properties}" var="prop">
+                           <p><em>${prop.key}</em>: ${prop.value}</p>
+                        </c:forEach>
+                      </td>
+                    </tr>
+                  </c:if>
+                </table>
+              </div>
+            </td>
+            <td class="remoteRepo">
+              <div>
+                <img src="<c:url value="/images/archiva-world.png"/>" />
+                <p class="id">${connector.targetRepoId}</p>
+                <p class="name">${repoMap[connector.targetRepoId].name}</p>
+                <p class="url">${repoMap[connector.targetRepoId].url}</p>
+              </div>
+            </td>
+          </tr>
+        </c:forEach>
+      </c:forEach>
+      </table>
+    </c:otherwise>
+  </c:choose>
+
+</div>
+
+</body>
+</html>

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/repositories.jsp Fri May  4 17:05:23 2007
@@ -37,28 +37,30 @@
 <ww:actionerror />
 <ww:actionmessage />
 
-<div>
-  <div style="float: right">
-    <%-- TODO replace with icons --%>
-    <pss:ifAuthorized permission="archiva-manage-configuration">
-      <ww:url id="addRepositoryUrl" action="addRepository"/>
-      <ww:a href="%{addRepositoryUrl}">Add Repository</ww:a>
-    </pss:ifAuthorized>
+  <div>
+    <div style="float: right">
+      <%-- TODO replace with icons --%>
+      <pss:ifAuthorized permission="archiva-manage-configuration">
+        <ww:url id="addRepositoryUrl" action="addRepository"/>
+        <ww:a href="%{addRepositoryUrl}">
+        <img src="<c:url value="/images/icons/create.png" />" />
+        Add Repository</ww:a>
+      </pss:ifAuthorized>
+    </div>
+    <h2>Local Repositories</h2>
   </div>
-  <h2>Managed Repositories</h2>
-</div>
 
 <c:choose>
-  <c:when test="${empty(model.managedRepositories)}">
-    <%-- No Managed Repositories. --%>
-    <strong>There are no managed repositories configured yet.</strong>
+  <c:when test="${empty(managedRepositories)}">
+    <%-- No Local Repositories. --%>
+    <strong>There are no local repositories configured yet.</strong>
   </c:when>
   <c:otherwise>
     <%-- Display the repositories. --%>
     
-	<c:forEach items="${model.managedRepositories}" var="repository" varStatus="i">
+	<c:forEach items="${managedRepositories}" var="repository" varStatus="i">
   
-      <div>
+      <div class="repository">
 
         <div style="float: right">
           <%-- TODO: make some icons --%>
@@ -69,12 +71,20 @@
             <ww:url id="deleteRepositoryUrl" action="deleteRepository" method="confirm">
               <ww:param name="repoid" value="%{'${repository.id}'}" />
             </ww:url>
-            <ww:a href="%{editRepositoryUrl}">Edit Repository</ww:a>
-            <ww:a href="%{deleteRepositoryUrl}">Delete Repository</ww:a>
+            <ww:a href="%{editRepositoryUrl}">
+            <img src="<c:url value="/images/icons/edit.png" />" />
+            Edit Repository</ww:a>
+            <ww:a href="%{deleteRepositoryUrl}">
+            <img src="<c:url value="/images/icons/delete.gif" />" />
+            Delete Repository</ww:a>
           </pss:ifAnyAuthorized>
         </div>
         
-        <h3>${repository.name}</h3>
+        <div style="float: left">
+          <img src="<c:url value="/images/archiva-splat-32.gif"/>" />
+        </div>
+        
+        <h3 class="repository">${repository.name}</h3>
         
         <table class="infoTable">
           <tr>
@@ -93,7 +103,7 @@
           </tr>
           <tr>
             <th>WebDAV URL</th>
-            <td><a href="${model.baseUrl}/${repository.id}/">${model.baseUrl}/${repository.id}/</a></td>
+            <td><a href="${baseUrl}/${repository.id}/">${baseUrl}/${repository.id}/</a></td>
           </tr>
           <tr>
             <th>Type</th>
@@ -176,6 +186,83 @@
       </div>
 	</c:forEach>
 	
+  </c:otherwise>
+</c:choose>
+
+  <h2>Remote Repositories</h2>
+
+<c:choose>
+  <c:when test="${empty(remoteRepositories)}">
+    <%-- No Remote Repositories. --%>
+    <strong>There are no remote repositories configured yet.</strong>
+  </c:when>
+  <c:otherwise>
+    <%-- Display the repositories. --%>
+    
+    <c:forEach items="${remoteRepositories}" var="repository" varStatus="i">
+      <div class="repository">
+
+        <div style="float: right">
+          <%-- TODO: make some icons --%>
+          <pss:ifAnyAuthorized permissions="archiva-manage-configuration">
+            <ww:url id="editRepositoryUrl" action="editRepository">
+              <ww:param name="repoid" value="%{'${repository.id}'}" />
+            </ww:url>
+            <ww:url id="deleteRepositoryUrl" action="deleteRepository" method="confirm">
+              <ww:param name="repoid" value="%{'${repository.id}'}" />
+            </ww:url>
+            <ww:a href="%{editRepositoryUrl}">
+            <img src="<c:url value="/images/icons/edit.png" />" />
+            Edit Repository</ww:a>
+            <ww:a href="%{deleteRepositoryUrl}">
+            <img src="<c:url value="/images/icons/delete.gif" />" />
+            Delete Repository</ww:a>
+          </pss:ifAnyAuthorized>
+        </div>
+        
+        <div style="float: left">
+          <img src="<c:url value="/images/archiva-world.png"/>" />
+        </div>
+        
+        <h3 class="repository">${repository.name}</h3>
+        
+        <table class="infoTable">
+          <tr>
+            <th>Identifier</th>
+            <td>
+              <code>${repository.id}</code>
+            </td>
+          </tr>
+          <tr>
+            <th>URL</th>
+            <td>${repository.url}</td>
+          </tr>
+          <tr>
+            <th>Type</th>
+              <%-- TODO: can probably just use layout appended to a key prefix in i18n to simplify this --%>
+            <td>
+              <c:choose>
+                <c:when test="${repository.layout == 'default'}">
+                  Maven 2.x Repository
+                </c:when>
+                <c:otherwise>
+                  Maven 1.x Repository
+                </c:otherwise>
+              </c:choose>
+            </td>
+          </tr>
+          <tr>
+            <th>Releases Included</th>
+            <td class="${repository.releases ? 'donemark' : 'errormark'} booleanIcon"> ${repository.releases}</td>
+          </tr>
+          <tr>
+            <th>Snapshots Included</th>
+            <td class="${repository.snapshots ? 'donemark' : 'errormark'} booleanIcon"> ${repository.snapshots}</td>
+          </tr>
+        </table>
+      
+      </div>
+    </c:forEach>
   </c:otherwise>
 </c:choose>
 

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/decorators/default.jsp Fri May  4 17:05:23 2007
@@ -116,6 +116,10 @@
             <my:currentWWUrl action="configureAppearance" namespace="/admin">Appearance</my:currentWWUrl>
           </li>
         </pss:ifAuthorized>
+        <%-- TODO: future options here.
+             * Repository Statistics.
+             * Web Services Statistics.
+          --%>
       </ul>
     </pss:ifAnyAuthorized>
 
@@ -123,22 +127,24 @@
       <h5>Administration</h5>
       <ul>
           <li class="none">
-            <my:currentWWUrl action="index" namespace="/admin">Settings</my:currentWWUrl>
+            <my:currentWWUrl action="repositories" namespace="/admin">Repositories</my:currentWWUrl>
           </li>
           <li class="none">
-            <my:currentWWUrl action="repositories" namespace="/admin">Repositories</my:currentWWUrl>
+            <my:currentWWUrl action="proxyConnectors" namespace="/admin">Proxy Connectors</my:currentWWUrl>
           </li>
-          <%-- 
           <li class="none">
-            <my:currentWWUrl action="proxiedRepositories" namespace="/admin">Proxied Repositories</my:currentWWUrl>
+            <my:currentWWUrl action="networkProxies" namespace="/admin">Network Proxies</my:currentWWUrl>
           </li>
-          --%>
-
-                <%-- TODO: add back after synced repos are implemented
-                          <li class="none">
-                            <my:currentWWUrl action="syncedRepositories" namespace="/admin">Synced Repositories</my:currentWWUrl>
-                          </li>
-                --%>
+          <li class="none">
+            <my:currentWWUrl action="repositoryScanning" namespace="/admin">Repository Scanning</my:currentWWUrl>
+          </li>
+          <li class="none">
+            <my:currentWWUrl action="database" namespace="/admin">Database</my:currentWWUrl>
+          </li>
+          <%-- TODO: future options here.
+               * Repository Syncing Connectors. (rsync, ftp, scp, etc...)
+               * Web Services (enable / disable), role based?
+            --%>
       </ul>
     </pss:ifAuthorized>
 

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/maven-base.css Fri May  4 17:05:23 2007
@@ -84,7 +84,6 @@
 }
 
 #leftColumn {
-	height: 315px;
 	width: 170px;
     float: left;
     overflow: auto;

Modified: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/site.css
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/site.css?view=diff&rev=535418&r1=535417&r2=535418
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/site.css (original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/css/site.css Fri May  4 17:05:23 2007
@@ -211,3 +211,77 @@
 	background-color: #F3B455 !important;
 }
 
+div.repository h3 {
+	border-bottom: 0px !important;
+	padding-left: 15px !important;
+}
+
+div.repository {
+	border-bottom: 1px solid #DFDEDE;
+}
+
+tr.proxyConnector {
+	border-bottom: 1px solid #DFDEDE;
+}
+
+tr.proxyConnector td.managedRepo div,
+tr.proxyConnector td.remoteRepo div {
+    border: 1px dotted gray;
+	padding: 5px;
+	background-color: white;
+}
+
+tr.proxyConnector td.managedRepo img,
+tr.proxyConnector td.remoteRepo img {
+	float: left;
+	border: 0px;
+}
+
+tr.proxyConnector td.managedRepo div p,
+tr.proxyConnector td.remoteRepo div p {
+	margin: 0px;
+	margin-left: 40px;
+	padding: 0px;
+}
+
+tr.proxyConnector td.managedRepo div p.id,
+tr.proxyConnector td.remoteRepo div p.id {
+	font-family: monospace;
+}
+
+tr.proxyConnector td.connector {
+	padding-left: 10px;
+	padding-right: 10px;	
+}
+
+tr.proxyConnector td.connector div.wrap {
+	margin-left: 10px;
+	margin-right: 10px;
+	padding: 5px;
+	border: 1px solid gray;
+	background-color: #eeeeee;
+}
+
+tr.proxyConnector td.connector div.controls {
+	float: right;
+}
+
+tr.proxyConnector td.connector div h4 {
+	font-size: 1.0em;
+	margin: 0px;
+}
+
+tr.proxyConnector td.connector table {
+	border: 0px;
+	background-color: transparent;
+	font-size: 0.8em;
+}
+
+tr.proxyConnector td.connector table p {
+	margin: 0px;
+	padding: 0px;
+}
+
+tr.seperator td {
+	border-top: 1px dashed #dddddd !important;
+}
\ No newline at end of file

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-splat-32.gif
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-splat-32.gif?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-splat-32.gif
------------------------------------------------------------------------------
    svn:mime-type = image/gif

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-world.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-world.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/archiva-world.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-down.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-down.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-down.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-left.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-left.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-left.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-right.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-right.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-right.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-up.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-up.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/arrow-up.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/box.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/box.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/box.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/create.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/create.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/create.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/delete.gif
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/delete.gif?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/delete.gif
------------------------------------------------------------------------------
    svn:mime-type = image/gif

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/edit.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/edit.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/edit.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-key.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-key.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-key.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-lock.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-lock.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/security-lock.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/user.png
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/user.png?view=auto&rev=535418
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-web/archiva-webapp/src/main/webapp/images/icons/user.png
------------------------------------------------------------------------------
    svn:mime-type = image/png