package org.openedit.entermedia.generators;
import org.openedit.repository.ContentItem;
import com.openedit.ModuleManager;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.error.ContentNotAvailableException;
import com.openedit.generators.FileGenerator;
import com.openedit.generators.Output;
import com.openedit.page.Page;
import com.openedit.util.PathUtilities;
/**
* This generator generates original asset documents from an MediaArchive
* based on paths of the form
* <tt>.../<var>assetid</var>/<var>filename.ext</var></tt>.
*/
public class GeneratedMediaGenerator extends FileGenerator
{
protected ModuleManager fieldModuleManager;
public ModuleManager getModuleManager()
{
return fieldModuleManager;
}
public void setModuleManager(ModuleManager inModuleManager)
{
fieldModuleManager = inModuleManager;
}
public void generate(WebPageRequest inReq, Page inPage, Output inOut) throws OpenEditException
{
String catalogid = inReq.findValue("catalogid");
String path = null;
String assetrootfolder = inPage.get("assetrootfolder");
path = inPage.getPath().substring(assetrootfolder.length());
path = PathUtilities.extractDirectoryPath(path);
//make sure your path tacks a filename on the end.
//Try the contentitem first. If misssing try a fake page
ContentItem item = getPageManager().getRepository().getStub("/WEB-INF/data/" + catalogid + "/generated" + path);
Page output = null;
boolean existed = item.exists();
if( existed )
{
output = new Page()
{
public boolean isHtml() { return false;}
};
output.setPageSettings(inPage.getPageSettings());
output.setContentItem(item);
}
else
{
output = getPageManager().getPage("/WEB-INF/data/" + catalogid + "/generated" + path);
}
if( !existed && !output.exists() )
{
throw new ContentNotAvailableException("Missing: " +output.getPath(),output.getPath());
}
else
{
WebPageRequest copy = inReq.copy(output);
copy.putProtectedPageValue("content", output);
super.generate(copy, output, inOut);
// archive.logDownload(sourcePath, "success", inReq.getUser());
}
}
}