package org.apache.archiva.admin.model.beans;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.commons.lang.StringUtils;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Olivier Lamy
* @since 1.4-M1
*/
@XmlRootElement (name = "remoteRepository")
public class RemoteRepository
extends AbstractRepository
implements Serializable
{
private String url;
private String userName;
private String password;
private int timeout = 60;
/**
* @since 2.2.3
* The path to use for checking availability of the remote repository
*/
private String checkPath;
/**
* Activate download of remote index if remoteIndexUrl is set too.
*/
private boolean downloadRemoteIndex = false;
/**
* Remote Index Url : if not starting with http will be relative to the remote repository url.
*/
private String remoteIndexUrl = ".index";
private String remoteDownloadNetworkProxyId;
/**
* default model value daily : every sunday at 8H00
*/
private String cronExpression = "0 0 08 ? * SUN";
private int remoteDownloadTimeout = 300;
/**
* @since 1.4-M2
*/
private boolean downloadRemoteIndexOnStartup = false;
/**
* extraParameters.
*
* @since 1.4-M4
*/
private Map<String, String> extraParameters;
/**
* field to ease json mapping wrapper on <code>extraParameters</code> field
*
* @since 1.4-M4
*/
private List<PropertyEntry> extraParametersEntries;
/**
* extraHeaders.
*
* @since 1.4-M4
*/
private Map<String, String> extraHeaders;
/**
* field to ease json mapping wrapper on <code>extraHeaders</code> field
*
* @since 1.4-M4
*/
private List<PropertyEntry> extraHeadersEntries;
public RemoteRepository()
{
// no op
}
public RemoteRepository( String id, String name, String url, String layout )
{
super( id, name, layout );
this.url = url;
}
public RemoteRepository( String id, String name, String url, String layout, String userName, String password,
int timeout )
{
super( id, name, layout );
this.url = StringUtils.stripEnd(url,"/");
this.userName = userName;
this.password = password;
this.timeout = timeout;
}
/**
* @since 1.4-M3
*/
public RemoteRepository( String id, String name, String url, String layout, String userName, String password,
int timeout, String description )
{
this( id, name, url, layout, userName, password, timeout );
setDescription( description );
}
public String getUrl()
{
return url;
}
public void setUrl( String url )
{
this.url = StringUtils.stripEnd(url,"/");
}
public String getUserName()
{
return userName;
}
public void setUserName( String userName )
{
this.userName = userName;
}
public String getPassword()
{
return password;
}
public void setPassword( String password )
{
this.password = password;
}
public int getTimeout()
{
return timeout;
}
public void setTimeout( int timeout )
{
this.timeout = timeout;
}
public boolean isDownloadRemoteIndex()
{
return downloadRemoteIndex;
}
public void setDownloadRemoteIndex( boolean downloadRemoteIndex )
{
this.downloadRemoteIndex = downloadRemoteIndex;
}
public String getRemoteIndexUrl()
{
return remoteIndexUrl;
}
public void setRemoteIndexUrl( String remoteIndexUrl )
{
this.remoteIndexUrl = remoteIndexUrl;
}
public String getRemoteDownloadNetworkProxyId()
{
return remoteDownloadNetworkProxyId;
}
public void setRemoteDownloadNetworkProxyId( String remoteDownloadNetworkProxyId )
{
this.remoteDownloadNetworkProxyId = remoteDownloadNetworkProxyId;
}
public String getCronExpression()
{
return cronExpression;
}
public void setCronExpression( String cronExpression )
{
this.cronExpression = cronExpression;
}
public int getRemoteDownloadTimeout()
{
return remoteDownloadTimeout;
}
public void setRemoteDownloadTimeout( int remoteDownloadTimeout )
{
this.remoteDownloadTimeout = remoteDownloadTimeout;
}
public boolean isDownloadRemoteIndexOnStartup()
{
return downloadRemoteIndexOnStartup;
}
public void setDownloadRemoteIndexOnStartup( boolean downloadRemoteIndexOnStartup )
{
this.downloadRemoteIndexOnStartup = downloadRemoteIndexOnStartup;
}
public Map<String, String> getExtraParameters()
{
if ( this.extraParameters == null )
{
this.extraParameters = new HashMap<>();
}
return extraParameters;
}
public void setExtraParameters( Map<String, String> extraParameters )
{
this.extraParameters = extraParameters;
}
public void addExtraParameter( String key, String value )
{
getExtraParameters().put( key, value );
}
public List<PropertyEntry> getExtraParametersEntries()
{
this.extraParametersEntries = new ArrayList<>();
for ( Map.Entry<String, String> entry : getExtraParameters().entrySet() )
{
this.extraParametersEntries.add( new PropertyEntry( entry.getKey(), entry.getValue() ) );
}
return this.extraParametersEntries;
}
public void setExtraParametersEntries( List<PropertyEntry> extraParametersEntries )
{
if ( extraParametersEntries == null )
{
return;
}
this.extraParametersEntries = extraParametersEntries;
for ( PropertyEntry propertyEntry : extraParametersEntries )
{
this.addExtraParameter( propertyEntry.getKey(), propertyEntry.getValue() );
}
}
public Map<String, String> getExtraHeaders()
{
if ( this.extraHeaders == null )
{
this.extraHeaders = new HashMap<>();
}
return extraHeaders;
}
public void setExtraHeaders( Map<String, String> extraHeaders )
{
this.extraHeaders = extraHeaders;
}
public void addExtraHeader( String key, String value )
{
getExtraHeaders().put( key, value );
}
public List<PropertyEntry> getExtraHeadersEntries()
{
this.extraHeadersEntries = new ArrayList<>();
for ( Map.Entry<String, String> entry : getExtraHeaders().entrySet() )
{
this.extraHeadersEntries.add( new PropertyEntry( entry.getKey(), entry.getValue() ) );
}
return this.extraHeadersEntries;
}
public void setExtraHeadersEntries( List<PropertyEntry> extraHeadersEntries )
{
if ( extraHeadersEntries == null )
{
return;
}
this.extraHeadersEntries = extraHeadersEntries;
for ( PropertyEntry propertyEntry : extraHeadersEntries )
{
this.addExtraHeader( propertyEntry.getKey(), propertyEntry.getValue() );
}
}
public void setCheckPath(String checkPath) {
if (checkPath==null) {
this.checkPath="";
} else if (checkPath.startsWith("/")) {
this.checkPath = StringUtils.removeStart(checkPath, "/");
while(this.checkPath.startsWith("/")) {
this.checkPath = StringUtils.removeStart(checkPath, "/");
}
} else {
this.checkPath = checkPath;
}
}
public String getCheckPath() {
return checkPath;
}
@Override
public String toString()
{
final StringBuilder sb = new StringBuilder();
sb.append( super.toString() );
sb.append( "RemoteRepository" );
sb.append( "{url='" ).append( url ).append( '\'' );
sb.append( ", userName='" ).append( userName ).append( '\'' );
sb.append( ", password='" ).append( password ).append( '\'' );
sb.append( ", timeout=" ).append( timeout );
sb.append( ", downloadRemoteIndex=" ).append( downloadRemoteIndex );
sb.append( ", remoteIndexUrl='" ).append( remoteIndexUrl ).append( '\'' );
sb.append( ", remoteDownloadNetworkProxyId='" ).append( remoteDownloadNetworkProxyId ).append( '\'' );
sb.append( ", cronExpression='" ).append( cronExpression ).append( '\'' );
sb.append( ", remoteDownloadTimeout=" ).append( remoteDownloadTimeout );
sb.append( ", downloadRemoteIndexOnStartup=" ).append( downloadRemoteIndexOnStartup );
sb.append( ", extraParameters=" ).append( extraParameters );
sb.append( ", extraHeaders=" ).append( extraHeaders );
sb.append( ", checkPath=").append(checkPath);
sb.append( '}' );
return sb.toString();
}
}