1 /* 2 * Copyright (c) 2006-2007 Creative Sphere Limited. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * 10 * Creative Sphere - initial API and implementation 11 * 12 */ 13 package org.abstracthorizon.danube.webdav.java; 14 15 import org.abstracthorizon.danube.http.util.IOUtils; 16 17 import java.io.InputStream; 18 import java.io.OutputStream; 19 20 /** 21 * This class adds several methods to the bean (path) object. Adapter is, then, 22 * using these methods to obtain various attributes of the object. 23 * 24 * @author Daniel Sendula 25 */ 26 public abstract class Delegate extends Bean { 27 28 /** Parent object path - parent portion of the supplied path */ 29 protected String objectPath; 30 31 /** 32 * Constructor 33 * @param path path to the object 34 */ 35 public Delegate(String path) { 36 super(path); 37 objectPath = IOUtils.parentPath(path); 38 } 39 40 /** 41 * Returns resource length 42 * @param adapter adapter it is called from 43 * @return resource length or -1 if unknown. 44 */ 45 public abstract int resourceLength(JavaWebDAVResourceAdapter adapter); 46 47 /** 48 * Returns etag of the object. If not overriden then parent's object 49 * identity hash + class name is returned as a weak etag (see RFC-2616) 50 * @param adapter adapter 51 * @return an etag 52 */ 53 public String getResourceETag(JavaWebDAVResourceAdapter adapter) { 54 Object object = adapter.findObjectImpl(objectPath); 55 if (object != null) { 56 String eTag = "W/\"" + Integer.toHexString(System.identityHashCode(object)) + "-" + getClass().getName() + "\""; 57 return eTag; 58 } else { 59 String path = getPath(); 60 return "W/\"" + path + "-NULL\""; 61 } 62 } 63 64 /** 65 * Returns input stream of the object/field's value. This implementation returns <code>null</code> 66 * @param adapter adapter 67 * @return input stream or <code>null</code> 68 */ 69 public InputStream getInputStream(JavaWebDAVResourceAdapter adapter) { 70 return null; 71 } 72 73 /** 74 * Returns input stream of a given range of the object/field's value. This implementation returns <code>null</code> 75 * @param adapter adapter 76 * @param from offset 77 * @param length length 78 * @return input stream or <code>null</code> 79 */ 80 public InputStream getInputStream(JavaWebDAVResourceAdapter adapter, long from, long length) { 81 InputStream is = getInputStream(adapter); 82 if (is == null) { 83 return null; 84 } 85 return null; 86 } 87 88 /** 89 * Returns output stream of the object/field's value. It is used to write into the object/field. 90 * This implementation returns <code>null</code> 91 * @param adapter adapter 92 * @return output stream or <code>null</code> 93 */ 94 public OutputStream getOutputStream(JavaWebDAVResourceAdapter adapter) { 95 return null; 96 } 97 98 /** 99 * Returns output stream of the object/field's value. It is used to write into the object/field. 100 * This implementation returns <code>null</code> 101 * @param adapter adapter 102 * @param from offset 103 * @param length length 104 * @return output stream or <code>null</code> 105 */ 106 public OutputStream getOutputStream(JavaWebDAVResourceAdapter adapter, long from, long length) { 107 OutputStream out = getOutputStream(adapter); 108 if (out == null) { 109 return null; 110 } 111 return null; 112 } 113 114 /** 115 * Returns content type. This implementation returns "unknown/unknown". 116 * @param adapter adapter 117 * @return content type 118 */ 119 public String getContentType(JavaWebDAVResourceAdapter adapter) { 120 return "unknown/unknown"; 121 } 122 123 }