/*
* Created on Jan 5, 2005
*/
package com.openedit.modules.settings;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openedit.repository.filesystem.StringItem;
import com.openedit.OpenEditException;
import com.openedit.WebPageRequest;
import com.openedit.config.Configuration;
import com.openedit.modules.edit.BaseEditorModule;
import com.openedit.modules.translations.Language;
import com.openedit.modules.translations.Translation;
import com.openedit.page.Page;
import com.openedit.page.PageSettings;
import com.openedit.page.XconfConfiguration;
/**
* @author cburkey
*
*/
public class ConfigModule extends BaseEditorModule
{
private static final Log log = LogFactory.getLog(ConfigModule.class);
public void saveProperties(WebPageRequest inReq) throws OpenEditException
{
ConfigEditorSession session = readConfig(inReq);
PageSettings settings = session.getEditPage().getPageSettings();
// Add the user home
String[] fields = inReq.getRequestParameters("field");
if(fields != null )
{
for (int i = 0; i < fields.length; i++)
{
String value = inReq.getRequestParameter(fields[i] + ".value");
settings.setProperty(fields[i], value);
}
}
getPageManager().saveSettings(session.getEditPage());
}
public ConfigEditorSession readConfig(WebPageRequest inReq) throws OpenEditException
{
try
{
//The GUI needs to send us in the path to the xconf file somehow
String path = inReq.getRequestParameter("editPath");
if( path == null)
{
return null;
}
Page webPage = getPageManager().getPage(path);
String editPath = webPage.getPageSettings().getXConf().getPath(); //get .xconf path
Page editPage = getPageManager().getPage(editPath,true);
XconfConfiguration config = new XconfConfiguration();
//find the correct xconf for this type
ConfigEditorSession session = (ConfigEditorSession)inReq.getPageValue("configeditsession");
if( session == null)
{
session = new ConfigEditorSession();
}
session.setEditPage(editPage);
PageSettings settings = editPage.getPageSettings();
if( settings.exists() )
{
config.readXML(settings.getReader());
}
else
{
config.setName("page");
}
String windowname = inReq.getRequestParameter("parentName");
if( windowname == null && session != null && session.getEditPath() == editPath )
{
//reload the data and return
session.setConfig(config);
return session;
}
session.setConfig(config);
session.setParentName(windowname);
String origURL = inReq.getRequestParameter("origURL");
session.setOriginalUrl(origURL);
inReq.putPageValue("configeditsession", session);
Translation trans = (Translation) inReq.getPageValue("translations");
if( trans != null)
{
for (Iterator iter = config.getAllProperties().iterator(); iter.hasNext();)
{
String id = (String) iter.next();
Configuration propconfig = config.getProperty(id);
if( propconfig != null)
{
for (Iterator iterator = propconfig.getChildIterator("value"); iterator.hasNext();)
{
Configuration val = (Configuration) iterator.next();
String local = val.getAttribute("locale");
if( local != null)
{
Language lang = trans.getLanguage(local);
if ( lang == null)
{
lang = new Language();
lang.setName(local);
lang.setId(local);
trans.addLanguage(lang);
}
}
}
}
}
}
return session;
}
catch (Throwable ex)
{
throw new OpenEditException(ex);
}
}
public void saveConfigChanges(WebPageRequest inReq) throws Exception
{
//they already selected the Xconf from a menu
ConfigEditorSession session = readConfig(inReq);
XconfConfiguration config = session.getConfig();
HtmlToXconfReader converter = new HtmlToXconfReader();
converter.setAdvancedMode(inReq.getUser().hasPermission("oe.edit.settings.advanced"));
converter.saveChangesToConfig(inReq, config );
//If there was no config there before and its still empty then dont bother saving a new config
if ( config.isEmpty())
{
//delete it
getPageManager().removePage(session.getEditPage()); //delete xconf
}
else
{
String xml = config.toXml(session.getEditPage().getCharacterEncoding());
StringItem content = new StringItem(
session.getEditPath(), xml ,session.getEditPage().getCharacterEncoding());
content.setAuthor(inReq.getUser().getUserName());
content.setMessage("Edited settings");
Page site = getPageManager().getPage(session.getEditPath());
site.setContentItem(content);
getPageManager().putPage(site);
}
}
}