package org.apache.maven.wagon.repository;

/*
 * 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.maven.wagon.PathUtils;
import org.apache.maven.wagon.WagonConstants;
import org.codehaus.plexus.util.StringUtils;

import java.io.Serializable;
import java.util.Properties;

This class is an abstraction of the location from/to resources can be transfered.
Author:Michal Maczka
@todo[BP] some things are specific to certain wagons (eg key stuff in authInfo, permissions)
/** * This class is an abstraction of the location from/to resources * can be transfered. * * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a> * * @todo [BP] some things are specific to certain wagons (eg key stuff in authInfo, permissions) */
public class Repository implements Serializable { private static final long serialVersionUID = 1312227676322136247L; private String id; private String name; private String host; private int port = WagonConstants.UNKNOWN_PORT; private String basedir; private String protocol; private String url; private RepositoryPermissions permissions;
Properties influencing wagon behaviour which are very specific to particular wagon.
/** * Properties influencing wagon behaviour * which are very specific to particular wagon. */
private Properties parameters = new Properties(); // Username/password are sometimes encoded in the URL private String username = null; private String password = null;
Deprecated:use Repository(String, String)
/** * @deprecated use {@link #Repository(String, String)} */
public Repository() { } public Repository( String id, String url ) { if ( id == null ) { throw new NullPointerException( "id cannot be null" ); } setId( id ); if ( url == null ) { throw new NullPointerException( "url cannot be null" ); } setUrl( url ); } public String getId() { return id; } public void setId( String id ) { this.id = id; }
Retrieve the base directory of the repository. This is derived from the full repository URL, and contains the entire path component.
Returns:the base directory
/** * Retrieve the base directory of the repository. This is derived from the full repository URL, and * contains the entire path component. * * @return the base directory */
public String getBasedir() { return basedir; } public void setBasedir( String basedir ) { this.basedir = basedir; } public void setName( String name ) { this.name = name; } public int getPort() { return port; } public void setPort( int port ) { this.port = port; } public void setUrl( String url ) { this.url = url; // TODO [BP]: refactor out the PathUtils URL stuff into a class like java.net.URL, so you only parse once // can't use URL class as is because it won't recognise our protocols, though perhaps we could attempt to // register handlers for scp, etc? this.protocol = PathUtils.protocol( url ); this.host = PathUtils.host( url ); this.port = PathUtils.port( url ); this.basedir = PathUtils.basedir( url ); String username = PathUtils.user( url ); this.username = username; if ( username != null ) { String password = PathUtils.password( url ); if ( password != null ) { this.password = password; username += ":" + password; } username += "@"; int index = url.indexOf( username ); this.url = url.substring( 0, index ) + url.substring( index + username.length() ); } } public String getUrl() { if ( url != null ) { return url; } StringBuilder sb = new StringBuilder(); sb.append( protocol ); sb.append( "://" ); if ( isIPv6Address() ) { // If this is IPv6 then we have to surround it // with brackets '[' and ']' sb.append( "[" ).append( getHost() ).append( "]" ); } else { sb.append( getHost() ); } if ( port != WagonConstants.UNKNOWN_PORT ) { sb.append( ":" ); sb.append( port ); } sb.append( basedir ); return sb.toString(); }
Checks whtther provided url contains IPv6 format in host portion
Returns:true if provide host part is of IPv6 format
/** * Checks whtther provided url contains IPv6 format in host portion * * @return true if provide host part is of IPv6 format */
private boolean isIPv6Address() { return getHost().contains( ":" ); } public String getHost() { if ( host == null ) { return "localhost"; } return host; } public String getName() { if ( name == null ) { return getId(); } return name; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append( "Repository[" ); if ( StringUtils.isNotEmpty( getName() ) ) { sb.append( getName() ).append( "|" ); } sb.append( getUrl() ); sb.append( "]" ); return sb.toString(); } public String getProtocol() { return protocol; } public RepositoryPermissions getPermissions() { return permissions; } public void setPermissions( RepositoryPermissions permissions ) { this.permissions = permissions; } public String getParameter( String key ) { return parameters.getProperty( key ); } public void setParameters( Properties parameters ) { this.parameters = parameters; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ( ( id == null ) ? 0 : id.hashCode() ); return result; } public boolean equals( Object obj ) { if ( this == obj ) { return true; } if ( obj == null ) { return false; } if ( getClass() != obj.getClass() ) { return false; } final Repository other = (Repository) obj; if ( id == null ) { if ( other.id != null ) { return false; } } else if ( !id.equals( other.id ) ) { return false; } return true; } public String getUsername() { return username; } public String getPassword() { return password; } public void setProtocol( String protocol ) { this.protocol = protocol; } }