/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2012 GanttProject Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.document.webdav; import java.io.InputStream; import java.util.List; /** * Interface which provides an abstraction of WebDAV client implementations. * * It is supposed that user credentials are passed in the constructor and are available * to the resource instance during its lifetime. * * @author dbarashev (Dmitry Barashev) */ public interface WebDavResource { class WebDavException extends Exception { public WebDavException(String message) { super(message); } public WebDavException(String message, Throwable cause) { super(message, cause); } } class WebDavRuntimeException extends RuntimeException { public WebDavRuntimeException(String message) { super(message); } public WebDavRuntimeException(String message, Throwable cause) { super(message, cause); } public WebDavRuntimeException(Throwable cause) { super(cause); } } /** * This method will try to connect to a server at least once. Implementation may * decide to cache its result. * * @return {@code true} if resource exists on the server * @throws WebDavException if information is unavailable, e.g. due to network problems */ boolean exists() throws WebDavException; WebDavUri getWebDavUri(); /** * This method should be just a simple getter and should not issue any requests. * @return URL of this resource */ String getUrl(); /** * This method should be just a simple getter and should not issue any requests. * @return short name of this resource */ String getName(); /** * This method may or may not issue a request to a server. Implementation may decide to return * stub which has not yet received full information (and may not even exist on the server) * * @return parent resource */ WebDavResource getParent(); /** * This method may or may not issue a request to a server. Implementation may decide to fetch * all required pieces of information before calling this method or to delay fetching * information about the children until this method is called * * @return {@code true} if this resource is a collection * @throws WebDavException if information is unavailable, e.g. due to network problems */ boolean isCollection() throws WebDavException; /** * This method may or may not issue a request to a server. Implementation may decide to fetch * all required pieces of information before calling this method or to delay fetching * information about the children until this method is called * * @return child resources if it is a collection or empty list otherwise * @throws WebDavException if information is unavailable, e.g. due to network problems */ List<WebDavResource> getChildResources() throws WebDavException; boolean isLockSupported(boolean exclusive); /** * This method may or may not issue a request to a server. Implementation may decide to fetch * all required pieces of information before calling this method or to delay fetching * information until this method is called * * @return list of lock owners * @throws WebDavException if information is unavailable, e.g. due to network problems */ List<String> getLockOwners() throws WebDavException; /** * This method may or may not issue a request to a server. Implementation may decide to fetch * all required pieces of information before calling this method or to delay fetching * information until this method is called * * @return {@code true} if this resource is locked * @throws WebDavException if information is unavailable, e.g. due to network problems */ boolean isLocked() throws WebDavException; /** * This method may or may not issue a request to a server. Implementation may decide to fetch * all required pieces of information before calling this method or to delay fetching * information until this method is called * * @return {@code true} if user can lock this resource * @throws WebDavException if information is unavailable, e.g. due to network problems */ boolean canLock() throws WebDavException; /** * This method issues a request to lock this resource with the given expiration time * * @param expirationTimeSec time in seconds after which lock expires * @throws WebDavException if locking fails, e.g. due to network problems */ void lock(int expirationTimeSec) throws WebDavException; /** * This method issues a request to unlock this resource * * @throws WebDavException if unlocking fails, e.g. due to network problems */ void unlock() throws WebDavException; /** * @return {@code true} if this resource is writable */ boolean isWritable(); /** * Writes data to the resource. * * @param byteArray data to write * @throws WebDavException if writing fails, e.g. due to network problems */ void write(byte[] byteArray) throws WebDavException; /** * Reads data from the resource. * * @throws WebDavException if reading fails, e.g. due to network problems */ InputStream getInputStream() throws WebDavException; void delete() throws WebDavException; }