001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.component.file.remote; 018 019 import java.net.URI; 020 021 import org.apache.camel.Expression; 022 import org.apache.camel.RuntimeCamelException; 023 import org.apache.camel.language.simple.FileLanguage; 024 import org.apache.commons.net.ftp.FTPClientConfig; 025 026 public class RemoteFileConfiguration implements Cloneable { 027 private String protocol; 028 private String username; 029 private String host; 030 private int port; 031 private String password; 032 private String file; 033 private boolean binary; 034 private boolean directory = true; 035 private FTPClientConfig ftpClientConfig; 036 private Expression expression; 037 private boolean passiveMode; 038 private String knownHosts; 039 private String privateKeyFile; 040 private String privateKeyFilePassphrase; 041 042 public RemoteFileConfiguration() { 043 } 044 045 public RemoteFileConfiguration(URI uri) { 046 configure(uri); 047 } 048 049 public RemoteFileConfiguration copy() { 050 try { 051 return (RemoteFileConfiguration)clone(); 052 } catch (CloneNotSupportedException e) { 053 throw new RuntimeCamelException(e); 054 } 055 } 056 057 public String toString() { 058 return remoteServerInformation() + "/" + file; 059 } 060 061 /** 062 * Returns human readable server information for logging purpose 063 */ 064 public String remoteServerInformation() { 065 return protocol + "://" + (username != null ? username : "anonymous") + "@" + host + ":" + port; 066 } 067 068 public void configure(URI uri) { 069 setProtocol(uri.getScheme()); 070 setDefaultPort(); 071 setUsername(uri.getUserInfo()); 072 setHost(uri.getHost()); 073 setPort(uri.getPort()); 074 setFile(uri.getPath()); 075 } 076 077 protected void setDefaultPort() { 078 if ("ftp".equalsIgnoreCase(protocol)) { 079 setPort(21); 080 } else if ("sftp".equalsIgnoreCase(protocol)) { 081 setPort(22); 082 } 083 } 084 085 public String getFile() { 086 return file; 087 } 088 089 public void setFile(String file) { 090 // Avoid accidentally putting everything in root on 091 // servers that expose the full filesystem 092 if (file.startsWith("/")) { 093 file = file.substring(1); 094 } 095 this.file = file; 096 } 097 098 public String getKnownHosts() { 099 return knownHosts; 100 } 101 102 public void setKnownHosts(String knownHosts) { 103 this.knownHosts = knownHosts; 104 } 105 106 public String getHost() { 107 return host; 108 } 109 110 public void setHost(String host) { 111 this.host = host; 112 } 113 114 public int getPort() { 115 return port; 116 } 117 118 public void setPort(int port) { 119 if (port != -1) { // use default 120 this.port = port; 121 } 122 } 123 124 public String getPassword() { 125 return password; 126 } 127 128 public void setPassword(String password) { 129 this.password = password; 130 } 131 132 public String getProtocol() { 133 return protocol; 134 } 135 136 public void setProtocol(String protocol) { 137 this.protocol = protocol; 138 } 139 140 public String getUsername() { 141 return username; 142 } 143 144 public void setUsername(String username) { 145 this.username = username; 146 } 147 148 public boolean isBinary() { 149 return binary; 150 } 151 152 public void setBinary(boolean binary) { 153 this.binary = binary; 154 } 155 156 public boolean isDirectory() { 157 return directory; 158 } 159 160 public void setDirectory(boolean directory) { 161 this.directory = directory; 162 } 163 164 public FTPClientConfig getFtpClientConfig() { 165 return ftpClientConfig; 166 } 167 168 public void setFtpClientConfig(FTPClientConfig ftpClientConfig) { 169 this.ftpClientConfig = ftpClientConfig; 170 } 171 172 173 public Expression getExpression() { 174 return expression; 175 } 176 177 public void setExpression(Expression expression) { 178 this.expression = expression; 179 } 180 181 /** 182 * Sets the expression based on {@link org.apache.camel.language.simple.FileLanguage} 183 */ 184 public void setExpression(String fileLanguageExpression) { 185 this.expression = FileLanguage.file(fileLanguageExpression); 186 } 187 188 public boolean isPassiveMode() { 189 return passiveMode; 190 } 191 192 /** 193 * Sets passive mode connections. 194 * <br/> 195 * Default is active mode connections. 196 */ 197 public void setPassiveMode(boolean passiveMode) { 198 this.passiveMode = passiveMode; 199 } 200 201 public String getPrivateKeyFile() { 202 return privateKeyFile; 203 } 204 205 public void setPrivateKeyFile(String privateKeyFile) { 206 this.privateKeyFile = privateKeyFile; 207 } 208 209 public String getPrivateKeyFilePassphrase() { 210 return privateKeyFilePassphrase; 211 } 212 213 public void setPrivateKeyFilePassphrase(String privateKeyFilePassphrase) { 214 this.privateKeyFilePassphrase = privateKeyFilePassphrase; 215 } 216 217 }