1 /* 2 * This file is part of Waarp Project (named also Waarp or GG). 3 * 4 * Copyright (c) 2019, Waarp SAS, and individual contributors by the @author 5 * tags. See the COPYRIGHT.txt in the distribution for a full listing of 6 * individual contributors. 7 * 8 * All Waarp Project is free software: you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or (at your 11 * option) any later version. 12 * 13 * Waarp is distributed in the hope that it will be useful, but WITHOUT ANY 14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License along with 18 * Waarp . If not, see <http://www.gnu.org/licenses/>. 19 */ 20 package org.waarp.common.file; 21 22 import org.waarp.common.command.exception.CommandAbstractException; 23 import org.waarp.common.command.exception.Reply530Exception; 24 import org.waarp.common.exception.FileEndOfTransferException; 25 import org.waarp.common.exception.FileTransferException; 26 27 import java.io.IOException; 28 29 /** 30 * Interface for File support 31 */ 32 public interface FileInterface { 33 /** 34 * Set empty this FtpFile, mark it unReady. 35 * 36 * @throws CommandAbstractException 37 */ 38 void clear() throws CommandAbstractException; 39 40 /** 41 * Check if the authentication is correct 42 * 43 * @throws Reply530Exception 44 */ 45 void checkIdentify() throws Reply530Exception; 46 47 /** 48 * @return the FtpSession 49 */ 50 SessionInterface getSession(); 51 52 // **************** Directory part ************************** 53 54 /** 55 * @return the FtpDir associated at creation with this file 56 */ 57 DirInterface getDir(); 58 59 /** 60 * Is the current FileInterface a directory and exists 61 * 62 * @return True if it is a directory and it exists 63 * 64 * @throws CommandAbstractException 65 */ 66 boolean isDirectory() throws CommandAbstractException; 67 68 /** 69 * Is the current FileInterface a file and exists 70 * 71 * @return True if it is a file and it exists 72 * 73 * @throws CommandAbstractException 74 */ 75 boolean isFile() throws CommandAbstractException; 76 77 // **************** Unique FileInterface part ************************** 78 79 /** 80 * @return the path of the current FileInterface (without mount point if 81 * any) 82 * 83 * @throws CommandAbstractException 84 */ 85 String getFile() throws CommandAbstractException; 86 87 /** 88 * Close the current FileInterface 89 * 90 * @return True if correctly closed 91 * 92 * @throws CommandAbstractException 93 */ 94 boolean closeFile() throws CommandAbstractException; 95 96 /** 97 * @return the length of the current FileInterface 98 * 99 * @throws CommandAbstractException 100 */ 101 long length() throws CommandAbstractException; 102 103 /** 104 * @return True if the current FileInterface is in Writing process 105 * 106 * @throws CommandAbstractException 107 */ 108 boolean isInWriting() throws CommandAbstractException; 109 110 /** 111 * @return True if the current FileInterface is in Reading process 112 * 113 * @throws CommandAbstractException 114 */ 115 boolean isInReading() throws CommandAbstractException; 116 117 /** 118 * @return True if the current FileInterface is ready for reading 119 * 120 * @throws CommandAbstractException 121 */ 122 boolean canRead() throws CommandAbstractException; 123 124 /** 125 * @return True if the current FileInterface is ready for writing 126 * 127 * @throws CommandAbstractException 128 */ 129 boolean canWrite() throws CommandAbstractException; 130 131 /** 132 * @return True if the current FileInterface exists 133 * 134 * @throws CommandAbstractException 135 */ 136 boolean exists() throws CommandAbstractException; 137 138 /** 139 * Try to abort the current transfer if any 140 * 141 * @return True if everything is ok 142 * 143 * @throws CommandAbstractException 144 */ 145 boolean abortFile() throws CommandAbstractException; 146 147 /** 148 * Ask to store the current FileInterface. This command returns quickly 149 * since 150 * it does not store really. It 151 * prepares the object. 152 * 153 * @return True if everything is ready 154 * 155 * @throws CommandAbstractException 156 */ 157 boolean store() throws CommandAbstractException; 158 159 /** 160 * Ask to retrieve the current FileInterface. This command returns quickly 161 * since it does not retrieve really. 162 * It prepares the object. 163 * 164 * @return True if everything is ready 165 * 166 * @throws CommandAbstractException 167 */ 168 boolean retrieve() throws CommandAbstractException; 169 170 /** 171 * Rename the current FileInterface into a new filename from argument 172 * 173 * @param path the new filename (path could be relative or absolute 174 * - 175 * without mount point) 176 * 177 * @return True if the operation is done successfully 178 * 179 * @throws CommandAbstractException 180 */ 181 boolean renameTo(String path) throws CommandAbstractException; 182 183 /** 184 * Restart from a Marker for the current FileInterface if any. This function 185 * is to be called at the beginning 186 * of every transfer so in store and retrieve method. 187 * 188 * @param restart 189 * 190 * @return True if the Marker is OK 191 * 192 * @throws CommandAbstractException 193 */ 194 boolean restartMarker(Restart restart) throws CommandAbstractException; 195 196 /** 197 * Create a restart from context for the current FileInterface 198 * 199 * @return the dataBlock to send to the client 200 * 201 * @throws CommandAbstractException 202 */ 203 DataBlock getMarker() throws CommandAbstractException; 204 205 /** 206 * Delete the current FileInterface. 207 * 208 * @return True if OK, else False if not (or if the file never exists). 209 * 210 * @throws CommandAbstractException 211 */ 212 boolean delete() throws CommandAbstractException; 213 214 /** 215 * Change the position in the file. 216 * 217 * @param position the position to set 218 * 219 * @throws IOException 220 */ 221 void setPosition(long position) throws IOException; 222 223 /** 224 * Function called by the DataNetworkHandler when it receives one DataBlock 225 * (Store like command) 226 * 227 * @param dataBlock 228 * 229 * @throws FileTransferException 230 * @throws FileEndOfTransferException 231 */ 232 void writeDataBlock(DataBlock dataBlock) throws FileTransferException; 233 234 /** 235 * Read a new block for FileInterface 236 * 237 * @return dataBlock 238 * 239 * @throws FileEndOfTransferException 240 * @throws FileTransferException 241 */ 242 DataBlock readDataBlock() 243 throws FileEndOfTransferException, FileTransferException; 244 245 /** 246 * Read a new block for FileInterface 247 * 248 * @param buffer use the given buffer to read 249 * 250 * @return dataBlock 251 * 252 * @throws FileEndOfTransferException 253 * @throws FileTransferException 254 */ 255 DataBlock readDataBlock(byte[] buffer) 256 throws FileEndOfTransferException, FileTransferException; 257 }