KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > module > builders > Attachments


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.module.builders;
11
12 import java.util.*;
13 import javax.servlet.http.HttpServletResponse JavaDoc;
14 import javax.servlet.http.HttpServletRequest JavaDoc;
15
16 import org.mmbase.module.core.*;
17 import org.mmbase.util.*;
18 import org.mmbase.util.functions.*;
19 import org.mmbase.util.logging.*;
20 import org.mmbase.util.magicfile.MagicFile;
21
22 /**
23  * This builder can be used for 'attachments' builders. That is
24  * builders which have a 'handle' field and are associated with the
25  * 'attachments servlet.
26  *
27  * @author cjr@dds.nl
28  * @author Michiel Meeuwissen
29  * @version $Id: Attachments.java,v 1.43 2006/07/10 16:34:59 michiel Exp $
30  */

31 public class Attachments extends AbstractServletBuilder {
32     private static final Logger log = Logging.getLoggerInstance(Attachments.class);
33
34     public static final String JavaDoc FIELD_SIZE = "size";
35
36     protected String JavaDoc getAssociation() {
37         return "attachments";
38     }
39     protected String JavaDoc getDefaultPath() {
40         return "/attachment.db";
41     }
42
43     protected String JavaDoc getSGUIIndicator(MMObjectNode node, Parameters a) {
44         String JavaDoc field = a.getString("field");
45         if (field.equals("handle") || field.equals("")) {
46             int num = node.getIntValue("number");
47             //int size = node.getIntValue("size");
48

49             String JavaDoc fileName = getFileName(node, new StringBuffer JavaDoc()).toString();
50             String JavaDoc title;
51
52             if (fileName == null || fileName.equals("")) {
53                 title = "[*]";
54             } else {
55                 title = "[" + fileName + "]";
56             }
57
58             if (/*size == -1 || */ num == -1) { // check on size seems sensible, but size was often not filled
59
return title;
60             } else {
61                 String JavaDoc ses = getSession(a, node.getNumber());
62                 if (log.isDebugEnabled()) {
63                     log.debug("bridge: " + usesBridgeServlet + " ses: " + ses);
64                 }
65                 StringBuffer JavaDoc servlet = new StringBuffer JavaDoc();
66                 HttpServletRequest JavaDoc req = (HttpServletRequest JavaDoc) a.get("request");
67                 if (req != null) {
68                     servlet.append(getServletPath(UriParser.makeRelative(new java.io.File JavaDoc(req.getServletPath()).getParent(), "/")));
69                 } else {
70                     servlet.append(getServletPath());
71                 }
72                 boolean addFileName = ! (servlet.charAt(servlet.length() - 1) == '?' || "".equals(fileName));
73                 servlet.append(usesBridgeServlet && ses != null ? "session=" + ses + "+" : "").append(num);
74
75                 if (addFileName) {
76                     servlet.append('/').append(fileName);
77                 }
78
79                 HttpServletResponse JavaDoc res = (HttpServletResponse JavaDoc) a.get("response");
80                 String JavaDoc url;
81                 if (res != null) {
82                     url = res.encodeURL(servlet.toString());
83                 } else {
84                     url = servlet.toString();
85                 }
86                 return "<a HREF=\"" + url + "\" target=\"extern\">" + title + "</a>";
87             }
88         }
89         return super.getSuperGUIIndicator(field, node);
90     }
91
92     protected final Set ATTACHMENTS_HANDLE_FIELDS = Collections.unmodifiableSet(new HashSet(Arrays.asList(new String JavaDoc[] {FIELD_MIMETYPE, FIELD_SIZE})));
93     // javadoc inherited
94
protected Set getHandleFields() {
95         return ATTACHMENTS_HANDLE_FIELDS;
96     }
97
98     /**
99      * If mimetype is not filled on storage in the database, then we
100      * can try to do smart things.
101      */

102     protected void checkHandle(MMObjectNode node) {
103         super.checkHandle(node);
104         if (getField(FIELD_SIZE) != null) {
105             if (node.getIntValue(FIELD_SIZE) == -1) {
106                 node.setValue(FIELD_SIZE, node.getByteValue(FIELD_HANDLE).length);
107             }
108         }
109     }
110
111     /**
112      * Implements 'mimetype' function (Very simply for attachments, because they have the field).
113      *
114      * @since MMBase-1.6.1
115      */

116     protected Object JavaDoc executeFunction(MMObjectNode node, String JavaDoc function, List args) {
117         log.debug("executeFunction of attachments builder");
118         if ("mimetype".equals(function)) {
119             return node.getStringValue(FIELD_MIMETYPE);
120         } else if (function.equals("format")) {
121             String JavaDoc mimeType = node.getStringValue(FIELD_MIMETYPE);
122             if (mimeType.length() > 0) {
123                 MagicFile mf = MagicFile.getInstance();
124                 String JavaDoc ext = mf.mimeTypeToExtension(mimeType);
125                 if (! "".equals(ext)) {
126                     return ext;
127                 }
128             }
129         }
130         return super.executeFunction(node, function, args);
131     }
132
133 }
134
Popular Tags