1 10 package org.mmbase.module.builders; 11 12 import java.util.*; 13 import javax.servlet.http.HttpServletResponse ; 14 import javax.servlet.http.HttpServletRequest ; 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 31 public class Attachments extends AbstractServletBuilder { 32 private static final Logger log = Logging.getLoggerInstance(Attachments.class); 33 34 public static final String FIELD_SIZE = "size"; 35 36 protected String getAssociation() { 37 return "attachments"; 38 } 39 protected String getDefaultPath() { 40 return "/attachment.db"; 41 } 42 43 protected String getSGUIIndicator(MMObjectNode node, Parameters a) { 44 String field = a.getString("field"); 45 if (field.equals("handle") || field.equals("")) { 46 int num = node.getIntValue("number"); 47 49 String fileName = getFileName(node, new StringBuffer ()).toString(); 50 String title; 51 52 if (fileName == null || fileName.equals("")) { 53 title = "[*]"; 54 } else { 55 title = "[" + fileName + "]"; 56 } 57 58 if ( num == -1) { return title; 60 } else { 61 String ses = getSession(a, node.getNumber()); 62 if (log.isDebugEnabled()) { 63 log.debug("bridge: " + usesBridgeServlet + " ses: " + ses); 64 } 65 StringBuffer servlet = new StringBuffer (); 66 HttpServletRequest req = (HttpServletRequest ) a.get("request"); 67 if (req != null) { 68 servlet.append(getServletPath(UriParser.makeRelative(new java.io.File (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 res = (HttpServletResponse ) a.get("response"); 80 String 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 [] {FIELD_MIMETYPE, FIELD_SIZE}))); 93 protected Set getHandleFields() { 95 return ATTACHMENTS_HANDLE_FIELDS; 96 } 97 98 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 116 protected Object executeFunction(MMObjectNode node, String 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 mimeType = node.getStringValue(FIELD_MIMETYPE); 122 if (mimeType.length() > 0) { 123 MagicFile mf = MagicFile.getInstance(); 124 String 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 |