/*
* Created on Dec 28, 2004
*/
package org.openedit.entermedia.generators;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openedit.profile.UserProfile;
import com.openedit.ModuleManager;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.generators.Output;
import com.openedit.page.Page;
import com.openedit.users.User;
/**
* Inserts a decoration header just after the opening "body" tag
* and inserts a decoration footer just before the closing "body" tag.
*
* @author Matthew Avery, mavery@einnovation.com
*/
public class AdminToolBarGenerator extends BaseToolBarGenerator
{
public static Log log = LogFactory.getLog(AdminToolBarGenerator.class);
protected ModuleManager fieldModuleManager;
protected String fieldSearch;
public AdminToolBarGenerator()
{
}
public void setSearch( String inHtmlTag )
{
fieldSearch = inHtmlTag;
}
public void generate( WebPageRequest inContext, Page inPage, Output inOut ) throws OpenEditException
{
User user = inContext.getUser();
if( user == null )
{
getWraps().generate(inContext, inPage, inOut);
return;
}
Boolean showtoolbar = false;
showtoolbar = (Boolean)inContext.getPageValue("canshowadmintoolbar");
if( showtoolbar == null )
{
showtoolbar = false;
UserProfile profile = inContext.getUserProfile();
if( profile != null)
{
String show = profile.get("admintoolbar");
showtoolbar = Boolean.parseBoolean(show);
}
if( !showtoolbar)
{
showtoolbar = user.hasPermission("oe.administration");
}
}
// if( !showtoolbar)
// {
// String mode = (String)user.getProperty("oe.edit.mode");
// if( "edit".equals( mode) || "debug".equals(mode) )
// {
// showtoolbar = true;
// }
// }
// if( showtoolbar )
// {
// String mode = inContext.getRequestParameter("oe.edit.mode");
// if( "preview".equals(mode) )
// {
// showtoolbar = false;
// }
// }
if( showtoolbar )
{
String toolbar = inContext.getContentProperty("showadmintoolbar");
if( toolbar != null)
{
showtoolbar = Boolean.parseBoolean(toolbar);
}
}
if( !showtoolbar )
{
getWraps().generate(inContext, inPage, inOut);
return;
}
//show the toolbar
Output oldOut = inContext.getPageStreamer().getOutput();
//check login
ByteArrayOutputStream scapture = null;
try
{
scapture = new ByteArrayOutputStream();
Writer capture = new OutputStreamWriter(scapture, inPage.getCharacterEncoding() );
Output fakeout = new Output(capture, scapture );
inContext.getPageStreamer().setOutput(fakeout);
getWraps().generate(inContext, inPage, fakeout);
inContext.getPageStreamer().setOutput(oldOut);
fakeout.getWriter().flush();
String pageContent = scapture.toString(inPage.getCharacterEncoding());
int start = pageContent.indexOf(getSearch());
if( start == -1)
{
start = pageContent.indexOf(getSearch().toUpperCase());
}
if ( start == -1)
{
log.error("No hit found for " + getSearch());
writePage( pageContent, inOut );
return;
}
int end = pageContent.indexOf("\n", start);
inOut.getWriter().write( pageContent.substring(0,end +1 ) );
Page header = getPageManager().getPage(getHeaderPath() );
header.generate(inContext, inOut);
inOut.getWriter().write(pageContent.substring( end));
inOut.getWriter().flush();
}
catch ( Exception ex)
{
inContext.getPageStreamer().setOutput(oldOut);
//write out any errors
if( ex instanceof OpenEditException)
{
throw (OpenEditException)ex;
}
throw new OpenEditException(ex);
}
}
public String getSearch()
{
return fieldSearch;
}
public ModuleManager getModuleManager()
{
return fieldModuleManager;
}
public void setModuleManager(ModuleManager inModuleManager)
{
fieldModuleManager = inModuleManager;
}
}