package org.safehaus.penrose.module;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.tree.DefaultElement;
import org.dom4j.tree.DefaultText;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileWriter;
/**
* @author Endi Sukma Dewata
*/
public class ModuleWriter {
public Logger log = LoggerFactory.getLogger(getClass());
public void write(File file, ModuleConfigManager moduleConfigManager) throws Exception {
log.debug("Writing "+file+".");
Element element = createElement(moduleConfigManager);
FileWriter fw = new FileWriter(file);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setTrimText(false);
XMLWriter writer = new XMLWriter(fw, format);
writer.startDocument();
writer.startDTD(
"modules",
"-//Penrose/DTD Modules "+getClass().getPackage().getSpecificationVersion()+"//EN",
"http://penrose.safehaus.org/dtd/modules.dtd"
);
writer.write(element);
writer.close();
}
public Element createElement(ModuleConfigManager moduleConfigManager) {
Element modulesElement = new DefaultElement("modules");
// module
for (ModuleConfig moduleConfig : moduleConfigManager.getModuleConfigs()) {
Element moduleElement = createElement(moduleConfig);
modulesElement.add(moduleElement);
}
// module-mapping
for (ModuleMapping moduleMapping : moduleConfigManager.getModuleMappings()) {
Element mappingElement = createElement(moduleMapping);
modulesElement.add(mappingElement);
}
return modulesElement;
}
public Element createElement(ModuleConfig moduleConfig) {
Element element = new DefaultElement("module");
element.addAttribute("name", moduleConfig.getName());
if (!moduleConfig.isEnabled()) element.addAttribute("enabled", "false");
if (moduleConfig.getDescription() != null) {
Element description = new DefaultElement("description");
description.add(new DefaultText(moduleConfig.getDescription()));
element.add(description);
}
Element moduleClass = new DefaultElement("module-class");
moduleClass.add(new DefaultText(moduleConfig.getModuleClass()));
element.add(moduleClass);
// parameters
for (String name : moduleConfig.getParameterNames()) {
String value = moduleConfig.getParameter(name);
Element parameter = new DefaultElement("parameter");
Element paramName = new DefaultElement("param-name");
paramName.add(new DefaultText(name));
parameter.add(paramName);
Element paramValue = new DefaultElement("param-value");
paramValue.add(new DefaultText(value));
parameter.add(paramValue);
element.add(parameter);
}
return element;
}
public Element createElement(ModuleMapping mapping) {
Element element = new DefaultElement("module-mapping");
Element name = new DefaultElement("module-name");
name.add(new DefaultText(mapping.getModuleName()));
element.add(name);
Element dn = new DefaultElement("base-dn");
dn.add(new DefaultText(mapping.getBaseDn().toString()));
element.add(dn);
Element filter = new DefaultElement("filter");
filter.add(new DefaultText(mapping.getFilter()));
element.add(filter);
Element scope = new DefaultElement("scope");
scope.add(new DefaultText(mapping.getScope()));
element.add(scope);
return element;
}
}