01: /*
02: * Copyright 2000,2005 wingS development team.
03: *
04: * This file is part of wingS (http://wingsframework.org).
05: *
06: * wingS is free software; you can redistribute it and/or modify
07: * it under the terms of the GNU Lesser General Public License
08: * as published by the Free Software Foundation; either version 2.1
09: * of the License, or (at your option) any later version.
10: *
11: * Please see COPYING for the complete licence.
12: */
13: package org.wings.externalizer;
14:
15: import org.wings.io.Device;
16: import org.wings.resource.HttpHeader;
17: import org.wings.resource.ResourceNotFoundException;
18:
19: import java.io.IOException;
20: import java.util.Collection;
21:
22: /**
23: * The {@link ExternalizeManager} uses a Externalizer to deliver an
24: * external representation of a java object to the output device (usually
25: * an HTTP connection).
26: * A SFrame'es external representation would be HTML, an Images content the
27: * GIF-byte stream, for instance.
28: * <p/>
29: * <p>An Externalizer must be
30: * {@link ExternalizeManager#addExternalizer(Externalizer) registered} at the
31: * {@link ExternalizeManager} of the current
32: * {@link org.wings.session.Session Session} to work seamlessly.
33: * <p/>
34: * Each Externalizer supports one or more classes it is able to externalize.
35: *
36: * @author <a href="mailto:mreinsch@to.com">Michael Reinsch</a>
37: * @author <a href="mailto:haaf@mercatis.de">Armin Haaf</a>
38: */
39: public interface Externalizer<SUPPORTED_TYPE> {
40: /**
41: * Suggest an id.
42: * If a resource has a reasonable unique id, then it will be used as the externalized id.
43: */
44: String getId(SUPPORTED_TYPE obj);
45:
46: /**
47: * Returns the file extension of the given object. Some (old) browsers use
48: * this information instead of the mime type. This is especially necessary
49: * if delivering anything different than HTML.
50: */
51: String getExtension(SUPPORTED_TYPE obj);
52:
53: /**
54: * returns the mime type of the given object.
55: */
56: String getMimeType(SUPPORTED_TYPE obj);
57:
58: /**
59: * Returns the externalized length of this Object. This value is set as
60: * content length in the HttpServletResponse. If it return -1 no content
61: * length is set.
62: */
63: int getLength(SUPPORTED_TYPE obj);
64:
65: /**
66: * Returns true if the object is final, false if transient. It is used to
67: * control the caching in the browser.
68: */
69: boolean isFinal(SUPPORTED_TYPE obj);
70:
71: /**
72: * Writes the given object into the given Device.
73: * @throws ResourceNotFoundException if the underlying resource is not available.
74: */
75: void write(Object obj, Device out) throws IOException,
76: ResourceNotFoundException;
77:
78: /**
79: * Returns the supported classes. The {@link ExternalizeManager}
80: * chooses the Externalizer (if not specified as parameter) by objects
81: * class.
82: */
83: Class[] getSupportedClasses();
84:
85: /**
86: * Returns the supported mime types. The {@link ExternalizeManager}
87: * chooses the Externalizer by mime type (if specified as parameter)
88: */
89: String[] getSupportedMimeTypes();
90:
91: /**
92: * Get additional http-headers.
93: * Returns <tt>null</tt>, if there are no additional headers to be set.
94: *
95: * @param obj get headers for this object
96: * @return Set of {@link java.util.Map.Entry} (key-value pairs) or <code>null</code> if none should be added.
97: */
98: Collection<HttpHeader> getHeaders(SUPPORTED_TYPE obj);
99: }
|