MRM-541 - convenient way to take Archiva proxies "offline"

* 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@686984 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James William Dumay 2008-08-19 08:45:45 +00:00
parent cec63bb250
commit 6368368aeb
10 changed files with 368 additions and 0 deletions

View File

@ -725,6 +725,15 @@
<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>

View File

@ -151,6 +151,11 @@ public File fetchFromProxies( ManagedRepositoryContent repository, ArtifactRefer
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 File fetchFromProxies( ManagedRepositoryContent repository, String path )
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 File fetchMetatadaFromProxies(ManagedRepositoryContent repository, String
List<ProxyConnector> connectors = getProxyConnectors( repository );
for ( ProxyConnector connector : connectors )
{
if (connector.isDisabled())
{
continue;
}
RemoteRepositoryContent targetRepository = connector.getTargetRepository();
File localRepoFile = toLocalRepoFile( repository, targetRepository, logicalPath );

View 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 void setProxyId( String proxyId )
this.proxyId = proxyId;
}
@Override
public String toString()
{
StringBuffer sb = new StringBuffer();

View File

@ -39,4 +39,8 @@ public interface RepositoryConnector
public List<String> getBlacklist();
public List<String> getWhitelist();
public boolean isDisabled();
public void setDisabled(boolean disabled);
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -377,6 +377,19 @@
<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 \._________________________________________ -->

View File

@ -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>

View File

@ -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>

View File

@ -105,6 +105,24 @@
<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}"/>