1 17 package org.alfresco.filesys.server.filesys; 18 19 import org.alfresco.filesys.server.SrvSession; 20 import org.alfresco.filesys.server.core.DeviceContext; 21 import org.alfresco.filesys.server.core.DeviceInterface; 22 import org.alfresco.filesys.server.core.InvalidDeviceInterfaceException; 23 import org.alfresco.filesys.server.core.SharedDevice; 24 25 29 public class TreeConnection 30 { 31 32 34 public static final int MAXFILES = 8192; 35 36 39 public static final int INITIALFILES = 32; 40 41 43 private SharedDevice m_shareDev; 44 45 47 private NetworkFile[] m_files; 48 private int m_fileCount; 49 50 52 private int m_permission; 53 54 59 public TreeConnection(SharedDevice shrDev) 60 { 61 m_shareDev = shrDev; 62 m_shareDev.incrementConnectionCount(); 63 } 64 65 72 public final int addFile(NetworkFile file, SrvSession sess) throws TooManyFilesException 73 { 74 75 77 if (m_files == null) 78 m_files = new NetworkFile[INITIALFILES]; 79 80 82 int idx = 0; 83 84 while (idx < m_files.length && m_files[idx] != null) 85 idx++; 86 87 89 if (idx == m_files.length) 90 { 91 92 94 if (m_files.length >= MAXFILES) 95 throw new TooManyFilesException(); 96 97 99 NetworkFile[] newFiles = new NetworkFile[m_files.length * 2]; 100 System.arraycopy(m_files, 0, newFiles, 0, m_files.length); 101 m_files = newFiles; 102 } 103 104 106 m_files[idx] = file; 107 m_fileCount++; 108 return idx; 109 } 110 111 116 public final void closeConnection(SrvSession sess) 117 { 118 119 121 if (openFileCount() > 0) 122 { 123 124 126 for (int idx = 0; idx < m_files.length; idx++) 127 { 128 129 131 if (m_files[idx] != null) 132 removeFile(idx, sess); 133 } 134 } 135 136 138 m_shareDev.decrementConnectionCount(); 139 } 140 141 146 public final NetworkFile findFile(int fid) 147 { 148 149 151 if (m_files == null || fid >= m_files.length) 152 return null; 153 154 156 return m_files[fid]; 157 } 158 159 164 public final int getFileTableLength() 165 { 166 if (m_files == null) 167 return 0; 168 return m_files.length; 169 } 170 171 176 public final boolean hasContext() 177 { 178 if (m_shareDev != null) 179 return m_shareDev.getContext() != null ? true : false; 180 return false; 181 } 182 183 188 public final DeviceContext getContext() 189 { 190 if (m_shareDev == null) 191 return null; 192 return m_shareDev.getContext(); 193 } 194 195 200 public final int getPermission() 201 { 202 return m_permission; 203 } 204 205 210 public final boolean hasReadAccess() 211 { 212 if (m_permission == FileAccess.ReadOnly || m_permission == FileAccess.Writeable) 213 return true; 214 return false; 215 } 216 217 222 public final boolean hasWriteAccess() 223 { 224 if (m_permission == FileAccess.Writeable) 225 return true; 226 return false; 227 } 228 229 234 public final SharedDevice getSharedDevice() 235 { 236 return m_shareDev; 237 } 238 239 244 public final DeviceInterface getInterface() 245 { 246 if (m_shareDev == null) 247 return null; 248 try 249 { 250 return m_shareDev.getInterface(); 251 } 252 catch (InvalidDeviceInterfaceException ex) 253 { 254 } 255 return null; 256 } 257 258 264 public final boolean hasPermission(int perm) 265 { 266 if (m_permission >= perm) 267 return true; 268 return false; 269 } 270 271 276 public final int openFileCount() 277 { 278 return m_fileCount; 279 } 280 281 284 public final void removeAllFiles() 285 { 286 287 289 if (m_files == null) 290 return; 291 292 294 for (int idx = 0; idx < m_files.length; m_files[idx++] = null) 295 ; 296 m_fileCount = 0; 297 } 298 299 305 public final void removeFile(int idx, SrvSession sess) 306 { 307 308 310 if (m_files == null || idx >= m_files.length) 311 return; 312 313 315 if (m_files[idx] != null && m_files[idx].isClosed() == false) 316 { 317 318 320 try 321 { 322 323 325 DiskInterface disk = (DiskInterface) m_shareDev.getInterface(); 326 disk.closeFile(sess, this, m_files[idx]); 327 m_files[idx].setClosed(true); 328 } 329 catch (Exception ex) 330 { 331 } 332 } 333 334 336 m_files[idx] = null; 337 m_fileCount--; 338 } 339 340 345 public final void setPermission(int perm) 346 { 347 m_permission = perm; 348 } 349 350 355 public String toString() 356 { 357 StringBuffer str = new StringBuffer (); 358 str.append("["); 359 str.append(m_shareDev.toString()); 360 str.append(","); 361 str.append(m_fileCount); 362 str.append(":"); 363 str.append(FileAccess.asString(m_permission)); 364 str.append("]"); 365 return str.toString(); 366 } 367 } | Popular Tags |