/*
Copyright (c) 2003 eInnovation Inc. All rights reserved
This library is free software; you can redistribute it and/or modify it under the terms
of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
*/
/*
* Created on Jun 18, 2003
*
*/
package com.openedit.util.strainer;
import java.util.Iterator;
import com.openedit.ModuleManager;
import com.openedit.config.Configuration;
import com.openedit.page.Permission;
public class FilterWriter {
protected ModuleManager fieldModuleManager;
public Configuration writeFilterCollection(Permission inPermission,
Configuration inParent) {
Configuration child = inParent.addChild("permission");
child.setAttribute("name", inPermission.getName());
if (inPermission.getRootFilter() != null) {
addFilter(child, inPermission.getRootFilter());
}
return child;
}
public void addFilter(Configuration inParent, Filter inFilter) {
if (inFilter == null) {
return;
}
String elemName = inFilter.getType();
elemName = elemName.toLowerCase();
Configuration newChild = inParent.addChild(elemName);
if (elemName.equals("and") || elemName.equals("or")) {
for (int i = 0; i < inFilter.getFilters().length; i++) {
addFilter(newChild, inFilter.getFilters()[i]);
}
} else if (elemName.equals("not")) {
// NotFilter not = (NotFilter)inRootFilter;
if (inFilter.getFilters() != null
&& inFilter.getFilters().length > 0) {
addFilter(newChild, inFilter.getFilters()[0]);
}
} else if (elemName.equals("group")) {
newChild.setAttribute("id", ((GroupFilter) inFilter).getGroupId());
} else if (elemName.equals("settingsgroup")) {
newChild.setAttribute("id",
((SettingsGroupFilter) inFilter).getGroupId());
} else if (elemName.equals("userprofile")) {
UserProfileFilter filter = (UserProfileFilter) inFilter;
newChild.setAttribute("name", filter.getPropertyName());
newChild.setAttribute("value", filter.getValue());
} else if (elemName.equals("settingsgroup")) {
SettingsGroupFilter filter = (SettingsGroupFilter) inFilter;
newChild.setAttribute("id", filter.getGroupId());
} else if (elemName.equals("user")) {
newChild.setAttribute("name", ((UserFilter) inFilter).getUsername());
} else if (elemName.equals("permission")) {
newChild.setAttribute("name",
((PermissionFilter) inFilter).getPermission());
} else if (elemName.equals("path")) {
newChild.setAttribute("name", ((PathFilter) inFilter).getPath());
} else if (elemName.equals("referer")) {
RefererFilter filter = (RefererFilter) inFilter;
newChild.setAttribute("value", filter.getValue());
} else if (elemName.equals("pageproperty")) {
PagePropertyFilter filter = (PagePropertyFilter) inFilter;
newChild.setAttribute("name", filter.getProperty());
newChild.setAttribute("equals", filter.getEquals());
} else if (elemName.equals("pagevalue")) {
// newChild = new PageValueFilter(inConfig.getAttribute("name"),
// inConfig.getAttribute("equals"));
PageValueFilter filter = (PageValueFilter) inFilter;
newChild.setAttribute("name", filter.getProperty());
newChild.setAttribute("equals", filter.getEquals());
}
// else if (elemName.equals("request-attribute"))
// {
// result = new RequestAttributeFilter(
// inConfig.getAttribute("name"), inConfig.getAttribute("equals"));
// }
else if (elemName.equals("blank")) {
newChild.setAttribute("value", "true");
} else if (elemName.equals("boolean")) {
BooleanFilter bool = (BooleanFilter) inFilter;
newChild.setAttribute("value", String.valueOf(bool.isTrue()));
} else if (elemName.equals("dataproperty")) {
DataPropertyFilter filter = (DataPropertyFilter) inFilter;
newChild.setAttribute("value", filter.getValue());
newChild.setAttribute("name", filter.getPropertyName());
}
else if (elemName.equals("userproperty")) {
UserPropertyFilter filter = (UserPropertyFilter) inFilter;
newChild.setAttribute("value", filter.getValue());
newChild.setAttribute("name", filter.getPropertyName());
}
else if (elemName.equals("action")) {
ActionFilter action = (ActionFilter) inFilter;
if (action.getActionName() != null) {
newChild.setAttribute("name", action.getActionName());
}
if (action.getConfig() != null) {
for (Iterator iterator = action.getConfig().getChildren()
.iterator(); iterator.hasNext();) {
Configuration conf = (Configuration) iterator.next();
newChild.addChild(conf);
}
}
// if(action.getProperties() != null){
// for (Iterator iterator = action.getProperties().keySet().iterator(); iterator
// .hasNext();) {
// String key = (String) iterator.next();
// String value = action.get(key);
// if(key != null && value != null){
// Configuration prop= newChild.addChild("property");
//
// prop.setAttribute("id", key);
// prop.setValue(value);
//
// }
// }
// }
} else {
if (inFilter.getConfiguration() != null) {
for (Iterator iterator = inFilter.getConfiguration()
.getAttributeNames().iterator(); iterator.hasNext();) {
String type = (String) iterator.next();
String value = inFilter.getConfiguration().get(type);
newChild.setAttribute(type, value);
}
}
for (Iterator iterator = inFilter.getProperties().keySet().iterator(); iterator
.hasNext();) {
String key = (String) iterator.next();
String value = inFilter.get(key);
if(value != null){
newChild.setAttribute(key, value);
}
}
}
// throw new OpenEditRuntimeException("Unrecognized filter element <" +
// elemName + ">");
}
}