/*
* eXist Open Source Native XML Database
* Copyright (C) 2001-06 The eXist Project
* http://exist-db.org
*
* This program 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
* of the License, or (at your option) any later version.
*
* This program 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* $Id$
*/
package org.exist.client.xacml;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.exist.security.xacml.XACMLConstants;
import org.exist.xquery.Function;
import com.sun.xacml.ParsingException;
import com.sun.xacml.attr.AttributeDesignator;
import com.sun.xacml.attr.AttributeValue;
//TODO give user more help through this class
//
public class ModuleAttributeHandler implements AttributeHandler
{
public ModuleAttributeHandler()
{
}
public void filterFunctions(Set functions, AttributeDesignator attribute)
{
URI id = attribute.getId();
if(id.equals(XACMLConstants.MODULE_CATEGORY_ATTRIBUTE))
{
List retain = new ArrayList(2);
retain.add("=");
retain.add("equals");
functions.retainAll(retain);
}
else if(id.equals(XACMLConstants.SOURCE_KEY_ATTRIBUTE) || id.equals(XACMLConstants.MODULE_NS_ATTRIBUTE) || id.equals(XACMLConstants.SOURCE_TYPE_ATTRIBUTE))
{
//empty filter
}
}
public boolean getAllowedValues(Set values, AttributeDesignator attribute)
{
URI id = attribute.getId();
if(id.equals(XACMLConstants.MODULE_CATEGORY_ATTRIBUTE))
{
values.add(XACMLConstants.MAIN_MODULE);
values.add(XACMLConstants.EXTERNAL_LIBRARY_MODULE);
values.add(XACMLConstants.INTERNAL_LIBRARY_MODULE);
return false;
}
if(id.equals(XACMLConstants.SOURCE_KEY_ATTRIBUTE))
{
return true;
}
else if(id.equals(XACMLConstants.SOURCE_TYPE_ATTRIBUTE))
{
values.add(XACMLConstants.FILE_SOURCE_TYPE);
values.add(XACMLConstants.DB_SOURCE_TYPE);
values.add(XACMLConstants.CLASS_SOURCE_TYPE);
values.add(XACMLConstants.CLASSLOADER_SOURCE_TYPE);
values.add(XACMLConstants.URL_SOURCE_TYPE);
values.add(XACMLConstants.STRING_SOURCE_TYPE);
values.add(XACMLConstants.COCOON_SOURCE_TYPE);
return false;
}
/*if(id.equals(XACMLConstants.CLASS_ATTRIBUTE))
{
values.add("org.exist.xquery.functions.ModuleImpl");
addInternal(values, 1);
return true;
}*/
if(id.equals(XACMLConstants.MODULE_NS_ATTRIBUTE))
{
values.add(Function.BUILTIN_FUNCTION_NS);
addInternal(values, 0);
return true;
}
return true;
}
//TODO: because BrokerPool and thus Configuration are not
// available remotely, this is commented until a remote
// solution is written
//index = 0 for namespaces, 1 for the class name
private void addInternal(Set values, int index)
{
/*String modules[][] = (String[][])config.getProperty(XQueryContext.PROPERTY_BULT_IN_MODULES);
if(modules == null)
return;
for(int i = 0; i < modules.length; i++)
values.add(modules[i][index]);*/
}
public void checkUserValue(AttributeValue value, AttributeDesignator attribute) throws ParsingException
{
}
}