/* * Created on May 2, 2006 */ package org.openedit.entermedia.generators; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openedit.Data; import org.openedit.entermedia.Asset; import org.openedit.entermedia.MediaArchive; import org.openedit.entermedia.ZipGroup; import org.openedit.entermedia.creator.ConvertInstructions; import org.openedit.entermedia.modules.MediaArchiveModule; import com.openedit.ModuleManager; import com.openedit.OpenEditException; import com.openedit.WebPageRequest; import com.openedit.generators.BaseGenerator; import com.openedit.generators.Output; import com.openedit.hittracker.HitTracker; import com.openedit.page.Page; public class DownloadZipGenerator extends BaseGenerator { private static final Log log = LogFactory.getLog(DownloadZipGenerator.class); protected ModuleManager fieldModuleManager; public ModuleManager getModuleManager() { return fieldModuleManager; } public void setModuleManager(ModuleManager moduleManager) { fieldModuleManager = moduleManager; } public void generate(WebPageRequest inReq, Page inPage, Output inOut) throws OpenEditException { MediaArchiveModule archiveModule = (MediaArchiveModule) getModuleManager().getBean("MediaArchiveModule"); MediaArchive archive = archiveModule.getMediaArchive(inReq); String type = inReq.findValue("sourcefile"); if( "attachments".equals( type ) ) { ZipGroup zip = new ZipGroup(); zip.setMediaArchive(archive); zip.setUser(inReq.getUser()); Asset asset = archive.getAssetBySourcePath(inReq.getContentPage()); zip.zipAttachments(asset, inOut.getStream() ); } else { zipAssets(inReq, archive, archiveModule, inOut); } } protected void zipAssets(WebPageRequest inReq, MediaArchive archive, MediaArchiveModule archiveModulex, Output inOut) { Map<Asset, ConvertInstructions> assets = new HashMap<Asset, ConvertInstructions>(); String catalogid = archive.getCatalogId(); String[] assetids = inReq.getRequestParameters("assetselect_" + catalogid); if (assetids == null) { String hitssessionid = inReq.getRequestParameter("hitssessionid"); if(hitssessionid == null) { return; } HitTracker hits = (HitTracker)inReq.getSessionValue(hitssessionid); for (Object object : hits) { String id = null; if( object instanceof Data) { id = ((Data)object).getId(); } if(id == null) { continue; } Asset asset = archive.getAsset(id); ConvertInstructions ins = new ConvertInstructions(); ins.setAssetSourcePath(asset.getSourcePath()); assets.put(asset, ins); } } else { //Todo use originals page request? for (String assetid : assetids) { Asset asset = archive.getAsset(assetid); if(asset == null) { log.warn("Cannot add asset with id '" + assetid + "': does not exist in catalog " + catalogid); continue; } ConvertInstructions ins = new ConvertInstructions(); inReq.putPageValue("asset",asset); //archive.loadAssetPermissions(asset.getSourcePath(), inReq); ins.addPageProperties(inReq.getPage()); ins.addPageValues(inReq.getPageMap()); ins.setAssetSourcePath(asset.getSourcePath()); //ins.setSourceFile("original"); String height = inReq.getRequestParameter(catalogid + "." + assetid + ".height"); String width = inReq.getRequestParameter(catalogid + "." + assetid + ".width"); if( width !=null ) { int w = Integer.parseInt(width); int h = -1; if (height == null) { h = Integer.MAX_VALUE; } else { h = Integer.parseInt(height); } ins.setMaxScaledSize(w, h); } String extension = inReq.getRequestParameter(catalogid + "." + assetid + ".extension"); if (extension != null) { ins.setOutputExtension(extension); } /* Boolean watermark = (Boolean)inReq.getPageValue("canforcewatermark"); if (watermark) { ins.setWatermark(Boolean.valueOf(watermark)); ins.setOutputExtension("jpg"); } String orginal = ins.getProperty("candownload"); if (!Boolean.parseBoolean(orginal)) { if( ins.getMaxScaledSize() == null ) { ins.setOutputExtension("jpg"); ins.setMaxScaledSize(Integer.MAX_VALUE, Integer.MAX_VALUE); } } // String watermark = inReq.getRequestParameter(catalogid + "." + assetid + ".watermark"); // if(Boolean.parseBoolean(watermark)){ // ins.setWatermark(true); // } */ assets.put(asset, ins); } } ZipGroup zip = new ZipGroup(); zip.setMediaArchive(archive); zip.setUser(inReq.getUser()); zip.zipItems(assets, inOut.getStream()); } public boolean canGenerate(WebPageRequest inReq) { boolean ok = inReq.getPage().getMimeType().equals("application/x-zip"); return ok; } }