1 23 24 package org.infoglue.cms.applications.contenttool.actions; 25 26 import java.awt.Image ; 27 import java.io.File ; 28 import java.io.FileInputStream ; 29 import java.io.InputStream ; 30 import java.util.Enumeration ; 31 32 import org.apache.log4j.Logger; 33 import org.infoglue.cms.applications.common.VisualFormatter; 34 import org.infoglue.cms.applications.databeans.AssetKeyDefinition; 35 import org.infoglue.cms.controllers.kernel.impl.simple.ContentTypeDefinitionController; 36 import org.infoglue.cms.controllers.kernel.impl.simple.DigitalAssetController; 37 import org.infoglue.cms.entities.content.DigitalAssetVO; 38 import org.infoglue.cms.entities.management.ContentTypeDefinitionVO; 39 import org.infoglue.cms.util.CmsPropertyHandler; 40 import org.infoglue.cms.util.ConstraintExceptionBuffer; 41 42 import webwork.action.ActionContext; 43 import webwork.multipart.MultiPartRequestWrapper; 44 45 46 51 52 public class UpdateDigitalAssetAction extends ViewDigitalAssetAction 53 { 54 private final static Logger logger = Logger.getLogger(UpdateDigitalAssetAction.class.getName()); 55 56 private static final long serialVersionUID = 1L; 57 58 private Integer contentVersionId = null; 59 private Integer digitalAssetId = null; 60 private String digitalAssetKey = null; 61 private boolean isUpdated = false; 62 private String reasonKey; 63 private ContentTypeDefinitionVO contentTypeDefinitionVO; 64 private DigitalAssetVO digitalAssetVO = null; 65 private DigitalAssetVO updatedDigitalAssetVO = null; 66 private String closeOnLoad; 67 private Integer contentTypeDefinitionId; 68 69 private ConstraintExceptionBuffer ceb; 70 71 public UpdateDigitalAssetAction() 72 { 73 this.ceb = new ConstraintExceptionBuffer(); 75 } 76 77 public void setDigitalAssetKey(String digitalAssetKey) 78 { 79 this.digitalAssetKey = digitalAssetKey; 80 } 81 82 public String doExecute() throws Exception 83 { 84 ceb.throwIfNotEmpty(); 85 86 InputStream is = null; 87 File file = null; 88 89 try 90 { 91 MultiPartRequestWrapper mpr = ActionContext.getMultiPartRequest(); 92 if(mpr == null) 93 { 94 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnSizeText"; 95 return "uploadFailed"; 96 } 97 98 DigitalAssetVO digitalAssetVO = DigitalAssetController.getDigitalAssetVOWithId(this.digitalAssetId); 99 digitalAssetVO.setAssetKey(this.digitalAssetKey); 100 101 if(mpr != null) 102 { 103 Enumeration names = mpr.getFileNames(); 104 while (names.hasMoreElements()) 105 { 106 String name = (String )names.nextElement(); 107 108 file = mpr.getFile(name); 109 if(file != null) 110 { 111 String contentType = mpr.getContentType(name); 112 String fileSystemName = mpr.getFilesystemName(name); 113 114 String fileName = fileSystemName; 115 fileName = new VisualFormatter().replaceNonAscii(fileName, '_'); 116 117 String tempFileName = "tmp_" + System.currentTimeMillis() + "_" + fileName; 118 String filePath = CmsPropertyHandler.getDigitalAssetPath(); 120 fileSystemName = filePath + File.separator + tempFileName; 121 122 126 127 digitalAssetVO.setAssetContentType(contentType); 128 digitalAssetVO.setAssetFileName(fileName); 129 digitalAssetVO.setAssetFilePath(filePath); 130 digitalAssetVO.setAssetFileSize(new Integer (new Long (file.length()).intValue())); 131 is = new FileInputStream (file); 132 133 String fileUploadMaximumSize = getPrincipalPropertyValue("fileUploadMaximumSize", false, true); 134 logger.info("fileUploadMaximumSize:" + fileUploadMaximumSize); 135 136 if(!fileUploadMaximumSize.equalsIgnoreCase("-1") && new Integer (fileUploadMaximumSize).intValue() < new Long (file.length()).intValue()) 137 { 138 file.delete(); 139 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnSizeText"; 140 return "uploadFailed"; 141 } 142 143 if(this.contentTypeDefinitionId != null && digitalAssetKey != null) 144 { 145 this.contentTypeDefinitionVO = ContentTypeDefinitionController.getController().getContentTypeDefinitionVOWithId(this.contentTypeDefinitionId); 146 AssetKeyDefinition assetKeyDefinition = ContentTypeDefinitionController.getController().getDefinedAssetKey(contentTypeDefinitionVO.getSchemaValue(), digitalAssetKey); 147 148 if(assetKeyDefinition != null) 149 { 150 if(assetKeyDefinition.getMaximumSize().intValue() < new Long (file.length()).intValue()) 151 { 152 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnSizeText"; 153 return "uploadFailed"; 154 } 155 if(assetKeyDefinition.getAllowedContentTypes().startsWith("image")) 156 { 157 if(!contentType.startsWith("image")) 158 { 159 file.delete(); 160 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnTypeNotImageText"; 161 return "uploadFailed"; 162 } 163 164 Image image = javax.imageio.ImageIO.read(file); 165 int width = image.getWidth(null); 166 int height = image.getHeight(null); 167 168 String allowedWidth = assetKeyDefinition.getImageWidth(); 169 String allowedHeight = assetKeyDefinition.getImageHeight(); 170 171 if(!allowedWidth.equals("*")) 172 { 173 Integer allowedWidthNumber = new Integer (allowedWidth.substring(1)); 174 if(allowedWidth.startsWith("<") && width >= allowedWidthNumber.intValue()) 175 { 176 file.delete(); 177 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToWideText"; 178 return "uploadFailed"; 179 } 180 if(allowedWidth.startsWith(">") && width <= allowedWidthNumber.intValue()) 181 { 182 file.delete(); 183 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotWideEnoughText"; 184 return "uploadFailed"; 185 } 186 if(!allowedWidth.startsWith(">") && !allowedWidth.startsWith("<") && width != new Integer (allowedWidth).intValue()) 187 { 188 file.delete(); 189 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongWidthText"; 190 return "uploadFailed"; 191 } 192 } 193 194 if(!allowedHeight.equals("*")) 195 { 196 Integer allowedHeightNumber = new Integer (allowedHeight.substring(1)); 197 if(allowedHeight.startsWith("<") && height >= allowedHeightNumber.intValue()) 198 { 199 file.delete(); 200 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageToHighText"; 201 return "uploadFailed"; 202 } 203 if(allowedHeight.startsWith(">") && height <= allowedHeightNumber.intValue()) 204 { 205 file.delete(); 206 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageNotHighEnoughText"; 207 return "uploadFailed"; 208 } 209 if(!allowedHeight.startsWith(">") && !allowedHeight.startsWith("<") && height != new Integer (allowedHeight).intValue()) 210 { 211 file.delete(); 212 this.reasonKey = "tool.contenttool.fileUpload.fileUploadFailedOnImageWrongHeightText"; 213 return "uploadFailed"; 214 } 215 } 216 } 217 } 218 } 219 } 220 } 221 } 222 else 223 { 224 logger.error("File upload failed for some reason."); 225 } 226 227 updatedDigitalAssetVO = DigitalAssetController.update(digitalAssetVO, is); 228 isUpdated = true; 229 230 } 231 catch (Exception e) 232 { 233 logger.error("An error occurred when we tried to upload a new asset:" + e.getMessage(), e); 234 } 235 finally 236 { 237 try 238 { 239 is.close(); 240 file.delete(); 241 } 242 catch(Exception e){} 243 } 244 245 return "success"; 246 } 247 248 252 253 public String getDigitalAssetUrl() throws Exception 254 { 255 String imageHref = null; 256 try 257 { 258 imageHref = DigitalAssetController.getDigitalAssetUrl(updatedDigitalAssetVO.getDigitalAssetId()); 259 } 260 catch(Exception e) 261 { 262 logger.warn("We could not get the url of the digitalAsset: " + e.getMessage(), e); 263 } 264 265 return imageHref; 266 } 267 268 public String getAssetThumbnailUrl() 269 { 270 String imageHref = null; 271 try 272 { 273 imageHref = DigitalAssetController.getDigitalAssetThumbnailUrl(updatedDigitalAssetVO.getDigitalAssetId()); 274 } 275 catch(Exception e) 276 { 277 logger.warn("We could not get the url of the thumbnail: " + e.getMessage(), e); 278 } 279 280 return imageHref; 281 } 282 283 public Integer getDigitalAssetId() 284 { 285 return digitalAssetId; 286 } 287 288 public void setDigitalAssetId(Integer digitalAssetId) 289 { 290 this.digitalAssetId = digitalAssetId; 291 } 292 293 public String getDigitalAssetKey() 294 { 295 return digitalAssetKey; 296 } 297 298 public boolean getIsUpdated() 299 { 300 return isUpdated; 301 } 302 303 public Integer getContentVersionId() 304 { 305 return contentVersionId; 306 } 307 308 public void setContentVersionId(Integer contentVersionId) 309 { 310 this.contentVersionId = contentVersionId; 311 } 312 313 public String getReasonKey() 314 { 315 return reasonKey; 316 } 317 318 public String getCloseOnLoad() 319 { 320 return closeOnLoad; 321 } 322 323 public void setCloseOnLoad(String closeOnLoad) 324 { 325 this.closeOnLoad = closeOnLoad; 326 } 327 328 public void setContentTypeDefinitionId(Integer contentTypeDefinitionId) 329 { 330 this.contentTypeDefinitionId = contentTypeDefinitionId; 331 } 332 333 public ContentTypeDefinitionVO getContentTypeDefinitionVO() 334 { 335 return contentTypeDefinitionVO; 336 } 337 } 338 | Popular Tags |