/* * 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. * */ package org.apache.ivy.plugins.repository.vfs; import org.apache.ivy.Ivy; public class VfsURI { private String host; private String passwd; private String path; private String scheme; private String user; // VFS Schemes public static final String SCHEME_CIFS = "smb"; public static final String SCHEME_FILE = "file"; public static final String SCHEME_FTP = "ftp"; public static final String SCHEME_HTTP = "http"; public static final String SCHEME_HTTPS = "https"; public static final String SCHEME_SFTP = "sftp"; public static final String SCHEME_WEBDAV = "webdav"; public static final String[] SUPPORTED_SCHEMES = new String[] { // add other schemes here if other can be tested on your machine SCHEME_FILE}; /** * Create a set of valid VFS URIs for the file access protocol * * @param resourcePath * relative path (from the base repo) to the resource to be accessed * @return */ public static VfsURI vfsURIFactory(String scheme, String resource, Ivy ivy) { VfsURI vfsURI = null; if (scheme.equals(SCHEME_CIFS)) { vfsURI = new VfsURI(SCHEME_CIFS, ivy.getVariable(VfsTestHelper.PROP_VFS_USER_ID), ivy.getVariable(VfsTestHelper.PROP_VFS_USER_PASSWD), ivy.getVariable(VfsTestHelper.PROP_VFS_HOST), ivy.getVariable(VfsTestHelper.PROP_VFS_SAMBA_REPO) + "/" + resource); } else if (scheme.equals(SCHEME_FILE)) { vfsURI = new VfsURI(SCHEME_FILE, null, null, null, VfsTestHelper.CWD + "/" + VfsTestHelper.TEST_REPO_DIR + "/" + resource); } else if (scheme.equals(SCHEME_FTP)) { vfsURI = new VfsURI(SCHEME_FTP, ivy.getVariable(VfsTestHelper.PROP_VFS_USER_ID), ivy.getVariable(VfsTestHelper.PROP_VFS_USER_PASSWD), ivy.getVariable(VfsTestHelper.PROP_VFS_HOST), VfsTestHelper.CWD + "/" + VfsTestHelper.TEST_REPO_DIR + "/" + resource); } else if (scheme.equals(SCHEME_SFTP)) { vfsURI = new VfsURI(SCHEME_SFTP, ivy.getVariable(VfsTestHelper.PROP_VFS_USER_ID), ivy.getVariable(VfsTestHelper.PROP_VFS_USER_PASSWD), ivy.getVariable(VfsTestHelper.PROP_VFS_HOST), VfsTestHelper.CWD + "/" + VfsTestHelper.TEST_REPO_DIR + "/" + resource); } return vfsURI; } /** * Create a wellformed VFS resource identifier * * @param scheme * the name of the scheme used to acces the resource * @param user * a user name. May be <code>null</code> * @param passwd * a passwd. May be <code>null</code> * @param host * a host identifier. May be <code>null</code> * @param path * a scheme spacific path to a resource */ public VfsURI(String scheme, String user, String passwd, String host, String path) { this.scheme = scheme.trim(); if (user != null) { this.user = user.trim(); } else { this.user = null; } if (passwd != null) { this.passwd = passwd.trim(); } else { this.passwd = null; } if (host != null) { this.host = host.trim(); } else { this.host = null; } this.path = normalizePath(path); } /** * Return a well-formed VFS Resource identifier * * @return <code>String<code> representing a well formed VFS resource identifier */ public String getVfsURI() { StringBuffer uri = new StringBuffer(); uri.append(this.scheme + "://"); // not all resource identifiers include user/passwd specifiers if (user != null && user.trim().length() > 0) { uri.append(this.user + ":"); if (passwd != null && passwd.trim().length() > 0) { this.passwd = passwd.trim(); } else { this.passwd = ""; } uri.append(this.passwd + "@"); } // not all resource identifiers include a host specifier if (host != null && host.trim().length() > 0) { this.host = host.trim(); uri.append(this.host); } uri.append(this.path); return uri.toString(); } /** * Convert a resource path to the format required for a VFS resource identifier * * @param path * <code>String</code> path to the resource * @return <code>String</code> representing a normalized resource path */ private String normalizePath(String path) { // all backslashes replaced with forward slashes String normalizedPath = path.replaceAll("\\\\", "/"); // collapse multiple instance of forward slashes to single slashes normalizedPath = normalizedPath.replaceAll("//+", "/"); // ensure that our path starts with a forward slash if (!normalizedPath.startsWith("/")) { normalizedPath = "/" + normalizedPath; } return normalizedPath.trim(); } public String toString() { return getVfsURI(); } public String getScheme() { return scheme; } }