]> source.dussan.org Git - archiva.git/commitdiff
MRM-541 - convenient way to take Archiva proxies "offline"
authorJames William Dumay <jdumay@apache.org>
Tue, 19 Aug 2008 08:45:45 +0000 (08:45 +0000)
committerJames William Dumay <jdumay@apache.org>
Tue, 19 Aug 2008 08:45:45 +0000 (08:45 +0000)
* Implemented UI for enabling/disabling proxy connectors
* changes to RepositoryProxyConnectors to skip offline connectors

git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-541@686984 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
archiva-modules/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java
archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java [new file with mode: 0644]
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java [new file with mode: 0644]
archiva-modules/archiva-web/archiva-webapp/src/main/resources/xwork.xml
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp [new file with mode: 0644]
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp [new file with mode: 0644]
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/proxyConnectors.jsp

index b7523ef1329b9cab662751d961947562643a4a2b..1af52dd637affb04a268b46cdafca0ee13fb85b4 100644 (file)
             <multiplicity>*</multiplicity>
           </association>
         </field>
+        <field>
+          <name>disabled</name>
+          <version>1.2+</version>
+          <description>
+            If the the repository proxy connector is disabled or not
+          </description>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+        </field>
       </fields>
       <codeSegments>
         <codeSegment>
index 2c5da3ebfb73c7dc91667fea9a5c888fda6e3759..9c81b53ed0009a51b140f2e752243466d9ef51dd 100644 (file)
@@ -151,6 +151,11 @@ public class DefaultRepositoryProxyConnectors
             Map<String, Exception> previousExceptions = new LinkedHashMap<String, Exception>();
             for ( ProxyConnector connector : connectors )
             {
+                if (connector.isDisabled())
+                {
+                    continue;
+                }
+                
                 RemoteRepositoryContent targetRepository = connector.getTargetRepository();
                 requestProperties.setProperty( "remoteRepositoryId", targetRepository.getId() );
 
@@ -221,6 +226,11 @@ public class DefaultRepositoryProxyConnectors
             List<ProxyConnector> connectors = getProxyConnectors( repository );
             for ( ProxyConnector connector : connectors )
             {
+                if (connector.isDisabled())
+                {
+                    continue;
+                }
+                
                 RemoteRepositoryContent targetRepository = connector.getTargetRepository();
                 requestProperties.setProperty( "remoteRepositoryId", targetRepository.getId() );
 
@@ -280,6 +290,11 @@ public class DefaultRepositoryProxyConnectors
             List<ProxyConnector> connectors = getProxyConnectors( repository );
             for ( ProxyConnector connector : connectors )
             {
+                if (connector.isDisabled())
+                {
+                    continue;
+                }
+                
                 RemoteRepositoryContent targetRepository = connector.getTargetRepository();
 
                 File localRepoFile = toLocalRepoFile( repository, targetRepository, logicalPath );
index 8d59d7d6b90a1440b89f43978de286ed23a0d633..8bf9d45480404c7c5f35d52e606b97f7d0f38152 100644 (file)
@@ -49,6 +49,18 @@ public class ProxyConnector
     private int order;
 
     private Map<String, String> policies;
+    
+    private boolean disabled;
+
+    public boolean isDisabled()
+    {
+        return disabled;
+    }
+
+    public void setDisabled(boolean disabled) 
+    {
+        this.disabled = disabled;
+    }
 
     public List<String> getBlacklist()
     {
@@ -110,6 +122,7 @@ public class ProxyConnector
         this.proxyId = proxyId;
     }
 
+    @Override
     public String toString()
     {
         StringBuffer sb = new StringBuffer();
index 5aee6b2cca2ea6c76c0d522e00edaaf91a7780de..92f944710eedf162975d68fc23d2bac49881a2d0 100644 (file)
@@ -39,4 +39,8 @@ public interface RepositoryConnector
     public List<String> getBlacklist();
     
     public List<String> getWhitelist();
+    
+    public boolean isDisabled();
+    
+    public void setDisabled(boolean disabled);
 }
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/DisableProxyConnectorAction.java
new file mode 100644 (file)
index 0000000..5ae3a4d
--- /dev/null
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.web.action.admin.connectors.proxy;
+
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+
+/*
+ * 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.
+ */
+
+/**
+ * DisableProxyConnectorAction 
+ * 
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="disableProxyConnectorAction"
+ */
+public class DisableProxyConnectorAction extends AbstractProxyConnectorAction
+{
+    private String source;
+    
+    private String target;
+    
+    private ProxyConnectorConfiguration proxyConfig;
+    
+    public String confirmDisable()
+    {
+        this.proxyConfig = findProxyConnector( source, target );
+
+        // Not set? Then there is nothing to delete.
+        if ( this.proxyConfig == null )
+        {
+            addActionError( "Unable to disable proxy configuration, configuration with source [" + source
+                + "], and target [" + target + "] does not exist." );
+            return ERROR;
+        }
+
+        return INPUT;
+    }
+    
+    public String disable()
+    {   
+        this.proxyConfig = findProxyConnector( source, target );
+
+        // Not set? Then there is nothing to delete.
+        if ( this.proxyConfig == null )
+        {
+            addActionError( "Unable to disable proxy configuration, configuration with source [" + source
+                + "], and target [" + target + "] does not exist." );
+            return ERROR;
+        }
+
+        if ( hasActionErrors() )
+        {
+            return ERROR;
+        }
+        
+        proxyConfig.setDisabled(true);
+        
+        addActionMessage( "Successfully disabled proxy connector [" + source + " , " + target + " ]" );
+
+        setSource( null );
+        setTarget( null );
+        
+        return saveConfiguration();
+    }
+
+    public String getSource()
+    {
+        return source;
+    }
+
+    public void setSource(String source) 
+    {
+        this.source = source;
+    }
+
+    public String getTarget() 
+    {
+        return target;
+    }
+
+    public void setTarget(String target)
+    {
+        this.target = target;
+    }
+}
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/connectors/proxy/EnableProxyConnectorAction.java
new file mode 100644 (file)
index 0000000..0b7bee4
--- /dev/null
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.web.action.admin.connectors.proxy;
+
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+
+/*
+ * 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.
+ */
+
+/**
+ * EnableProxyConnectorAction 
+ * 
+ * @plexus.component role="com.opensymphony.xwork.Action" role-hint="enableProxyConnectorAction"
+ */
+public class EnableProxyConnectorAction extends AbstractProxyConnectorAction
+{
+    private String source;
+    
+    private String target;
+    
+    private ProxyConnectorConfiguration proxyConfig;
+    
+    public String confirmEnable()
+    {
+        this.proxyConfig = findProxyConnector( source, target );
+
+        // Not set? Then there is nothing to delete.
+        if ( this.proxyConfig == null )
+        {
+            addActionError( "Unable to enable proxy configuration, configuration with source [" + source
+                + "], and target [" + target + "] does not exist." );
+            return ERROR;
+        }
+
+        return INPUT;
+    }
+    
+    public String enable()
+    {
+        this.proxyConfig = findProxyConnector( source, target );
+
+        // Not set? Then there is nothing to delete.
+        if ( this.proxyConfig == null )
+        {
+            addActionError( "Unable to enabled proxy configuration, configuration with source [" + source
+                + "], and target [" + target + "] does not exist." );
+            return ERROR;
+        }
+
+        if ( hasActionErrors() )
+        {
+            return ERROR;
+        }
+        
+        proxyConfig.setDisabled(true);
+        
+        addActionMessage( "Successfully enabled proxy connector [" + source + " , " + target + " ]" );
+
+        setSource( null );
+        setTarget( null );
+        
+        return saveConfiguration();
+    }
+
+    public String getSource()
+    {
+        return source;
+    }
+
+    public void setSource(String source) 
+    {
+        this.source = source;
+    }
+
+    public String getTarget() 
+    {
+        return target;
+    }
+
+    public void setTarget(String target)
+    {
+        this.target = target;
+    }
+}
index 21d0363f665d6be196f37e531652c2aa02d174a8..88297d58abb577b8d677ae954ac59c1a1a213e13 100644 (file)
       <result name="success" type="redirect-action">proxyConnectors</result>
       <interceptor-ref name="configuredPrepareParamsStack"/>
     </action>
+    
+    <action name="enableProxyConnector" class="enableProxyConnectorAction" method="confirm">
+      <result name="input">/WEB-INF/jsp/admin/enableProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+
+    <action name="disableProxyConnector" class="disableProxyConnectorAction" method="confirm">
+      <result name="input">/WEB-INF/jsp/admin/disableProxyConnector.jsp</result>
+      <result name="success" type="redirect-action">proxyConnectors</result>
+      <interceptor-ref name="configuredPrepareParamsStack"/>
+    </action>
+
 
     <!-- .\ NETWORK PROXIES \._________________________________________ -->
 
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/disableProxyConnector.jsp
new file mode 100644 (file)
index 0000000..0906be5
--- /dev/null
@@ -0,0 +1,50 @@
+<%--
+  ~ 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: Disable Proxy Connector</title>
+  <ww:head/>
+</head>
+
+<body>
+
+<h1>Admin: Disable Proxy Connector</h1>
+
+<ww:actionerror/>
+
+<div id="contentArea">
+
+  <h2>Disable Proxy Connector</h2>
+  
+  <p>
+    Are you sure you want to disable proxy connector <code>[ ${source} , ${target} ]</code> ?
+  </p>
+
+  <ww:form method="post" action="disableProxyConnector!disable" namespace="/admin" validate="true">
+    <ww:hidden name="target"/>
+    <ww:hidden name="source"/>
+    <ww:submit value="Disable"/>
+  </ww:form>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/enableProxyConnector.jsp
new file mode 100644 (file)
index 0000000..5675008
--- /dev/null
@@ -0,0 +1,50 @@
+<%--
+  ~ 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: Enable Proxy Connector</title>
+  <ww:head/>
+</head>
+
+<body>
+
+<h1>Admin: Enable Proxy Connector</h1>
+
+<ww:actionerror/>
+
+<div id="contentArea">
+
+  <h2>Enable Proxy Connector</h2>
+
+  <p>
+    Are you sure you want to enable proxy connector <code>[ ${source} , ${target} ]</code> ?
+  </p>
+
+  <ww:form method="post" action="enableProxyConnector!enable" namespace="/admin" validate="true">
+    <ww:hidden name="target"/>
+    <ww:hidden name="source"/>
+    <ww:submit value="Enable"/>
+  </ww:form>
+</div>
+
+</body>
+</html>
\ No newline at end of file
index 78963a1fa49db3995f730788f5789556844b567b..cbd96026e5cc181dc3b8eb69e22ef8a94191a212 100644 (file)
           <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
           <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
         </ww:url>
+        <ww:url id="enableProxyConnectorUrl" action="enableProxyConnector" method="confirmEnable">
+          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
+          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
+        </ww:url>
+        <ww:url id="disableProxyConnectorUrl" action="disableProxyConnector" method="confirmDisable">
+          <ww:param name="source" value="%{'${connector.sourceRepoId}'}"/>
+          <ww:param name="target" value="%{'${connector.targetRepoId}'}"/>
+        </ww:url>
+        <c:if test="${connector.disabled}">
+            <ww:a href="%{enableProxyConnectorUrl}" label="Enable Proxy Connector">
+                Enable
+            </ww:a>
+        </c:if>
+        <c:if test="${connector.disabled == false}">
+            <ww:a href="%{disableProxyConnectorUrl}" title="Disable Proxy Connector">
+                Disable
+            </ww:a>
+        </c:if>
         <c:if test="${pc.count > 1}">
           <ww:a href="%{sortUpProxyConnectorUrl}" cssClass="up" title="Move Proxy Connector Up">
             <img src="${iconUpUrl}"/>