1 package com.opencms.defaults.master; 2 3 26 27 import org.opencms.file.CmsObject; 28 import org.opencms.file.CmsRequestContext; 29 import org.opencms.main.CmsException; 30 import org.opencms.main.CmsLog; 31 import org.opencms.util.CmsUUID; 32 33 import com.opencms.legacy.CmsXmlTemplateLoader; 34 import com.opencms.template.CmsCacheDirectives; 35 import com.opencms.template.CmsXmlTemplate; 36 37 import java.lang.reflect.Constructor ; 38 import java.lang.reflect.InvocationTargetException ; 39 import java.util.Hashtable ; 40 import java.util.Vector ; 41 42 47 public class CmsShowMedia extends CmsXmlTemplate { 48 49 static final String C_EMPTY_PICTURE = "empty.gif"; 50 static byte[] emptyGIF = new byte[0]; 51 52 66 public byte[] getContent(CmsObject cms, String templateFile, String elementName, 67 Hashtable parameters, String templateSelector) throws CmsException { 68 CmsRequestContext req = cms.getRequestContext(); 70 byte[] picture = new byte[0]; 71 CmsMasterContent cd = null; 72 CmsMasterMedia media = null; 73 String mType = null; 74 String sId = (String ) parameters.get("id"); 75 String sPos = (String ) parameters.get("pos"); 76 String refCD = (String ) parameters.get("cd"); 77 String smId = (String ) parameters.get("mid"); 79 CmsUUID id = CmsUUID.getNullUUID(); 80 int pos =-1; int mid = -1; 82 try { 83 id = new CmsUUID(sId); 84 if (sPos != null) { 85 pos = Integer.parseInt(sPos); 86 } 87 if (smId != null) { 88 mid = Integer.parseInt(smId); 89 } 90 } catch (NumberFormatException e) { 91 } 93 94 try { 95 Class c = Class.forName(refCD); 96 Object o = getContentDefinition(cms, c, id); 97 cd = (CmsMasterContent)o; 98 } catch (ClassNotFoundException e) { 99 100 } 101 102 Vector cosDeps = new Vector (); 104 cosDeps.add(cd); 105 registerVariantDeps(cms, templateFile, null, null, parameters, null, 106 cosDeps, null); 107 108 if(cd != null){ 110 Vector vec = cd.getMedia(); 111 if (mid != -1) { 112 for (int i=0; i < vec.size(); i++) { 114 media = (CmsMasterMedia)vec.get(i); 115 if (mid == media.getId()) { 116 picture = media.getMedia(); 117 mType = media.getMimetype(); 118 break; 119 } 120 } 121 }else if (pos == -1 && vec.size() > 0) { 122 media = (CmsMasterMedia)vec.firstElement(); 124 picture = media.getMedia(); 125 mType = media.getMimetype(); 126 } else { 127 for (int i=0; i< vec.size(); i++) { 129 if (((CmsMasterMedia)vec.elementAt(i)).getPosition() == pos) { 130 media = (CmsMasterMedia)vec.elementAt(i); 131 picture = media.getMedia(); 132 mType = media.getMimetype(); 133 break; 134 } 135 } 136 } 137 if(picture == null){ 138 picture = emptyGIF; 139 CmsXmlTemplateLoader.getResponse(req).setContentType("images/gif"); 141 } else { 142 if (mType == null || mType.equals("")) { 144 mType = "application/octet-stream"; 145 } 146 CmsXmlTemplateLoader.getResponse(req).setContentType( mType ); 147 CmsXmlTemplateLoader.getResponse(req).setHeader("Content-disposition","filename=" + media.getName()); 148 } 149 } else{ 150 picture = emptyGIF; 151 CmsXmlTemplateLoader.getResponse(req).setContentType("images/gif"); 153 } 154 155 163 164 return picture; 165 } 166 167 168 172 protected Object getContentDefinition(CmsObject cms, Class cdClass, CmsUUID id) { 173 Object o = null; 174 try { 175 Constructor c = cdClass.getConstructor(new Class [] { CmsObject.class, CmsUUID.class }); 176 o = c.newInstance(new Object [] { cms, id }); 177 } catch (InvocationTargetException ite) { 178 if (CmsLog.getLog(this).isWarnEnabled()) { 179 CmsLog.getLog(this).warn("Invocation target exception", ite); 180 } 181 } catch (NoSuchMethodException nsm) { 182 if (CmsLog.getLog(this).isWarnEnabled()) { 183 CmsLog.getLog(this).warn("Requested method was not found", nsm); 184 } 185 } catch (InstantiationException e) { 186 if (CmsLog.getLog(this).isWarnEnabled()) { 187 CmsLog.getLog(this).warn("The reflected class is abstract", e); 188 } 189 } catch (Exception e) { 190 if (CmsLog.getLog(this).isWarnEnabled()) { 191 CmsLog.getLog(this).warn("Other exception", e); 192 } 193 194 } 195 return o; 196 } 197 198 208 public CmsCacheDirectives getCacheDirectives(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) { 209 210 CmsCacheDirectives ret = new CmsCacheDirectives(true, false, false, true, true); 211 Vector params = new Vector (); 212 params.addElement("mid"); 213 params.addElement("id"); 214 params.addElement("pos"); 215 params.addElement("cd"); 216 ret.setNoCacheParameters(params); 217 return ret; 218 } 219 220 221 222 }
| Popular Tags
|