📄 defaultconfiguration.java
字号:
NodeList locNodes = parent.getElementsByTagName(ELEMENT_PARAM);
for (int i = 0; i < locNodes.getLength(); i++)
{
// Since this comes from getElementsByTagName we can assume that
// all the nodes are elements.
Element element = (Element) locNodes.item(i);
String name = element.getAttribute(ATTRIBUTE_NAME);
if (name != null)
{
String value = element.getAttribute(ATTRIBUTE_VALUE);
if (value == null || value.length() == 0)
{
StringBuffer buffer = new StringBuffer();
NodeList textNodes = element.getChildNodes();
for (int j = 0; j < textNodes.getLength(); j++)
{
buffer.append(textNodes.item(j).getNodeValue());
}
value = buffer.toString();
}
params.put(name, value);
}
}
return params;
}
/**
* Process the include and exclude elements, passing them on to the creator
* manager.
* @param javascript The name of the creator
* @param parent The container of the include and exclude elements.
*/
private void processPermissions(String javascript, Element parent)
{
NodeList incNodes = parent.getElementsByTagName(ELEMENT_INCLUDE);
for (int i = 0; i < incNodes.getLength(); i++)
{
Element include = (Element) incNodes.item(i);
String method = include.getAttribute(ATTRIBUTE_METHOD);
accessControl.addIncludeRule(javascript, method);
}
NodeList excNodes = parent.getElementsByTagName(ELEMENT_EXCLUDE);
for (int i = 0; i < excNodes.getLength(); i++)
{
Element include = (Element) excNodes.item(i);
String method = include.getAttribute(ATTRIBUTE_METHOD);
accessControl.addExcludeRule(javascript, method);
}
}
/**
* Collections often have missing information. This helps fill the missing
* data in.
* @param javascript The name of the creator
* @param parent The container of the include and exclude elements.
* @throws ClassNotFoundException If the type attribute can't be converted into a Class
*/
private void processParameters(String javascript, Element parent) throws ClassNotFoundException
{
NodeList nodes = parent.getElementsByTagName(ELEMENT_PARAMETER);
for (int i = 0; i < nodes.getLength(); i++)
{
Element include = (Element) nodes.item(i);
String methodName = include.getAttribute(ATTRIBUTE_METHOD);
// Try to find the method that we are annotating
Creator creator = creatorManager.getCreator(javascript);
Class dest = creator.getType();
Method method = null;
Method[] methods = dest.getMethods();
for (int j = 0; j < methods.length; j++)
{
Method test = methods[j];
if (test.getName().equals(methodName))
{
if (method == null)
{
method = test;
}
else
{
log.warn("Setting extra type info to overloaded methods may fail with <parameter .../>"); //$NON-NLS-1$
}
}
}
if (method == null)
{
log.error("Unable to find method called: " + methodName + " on type: " + dest.getName() + " from creator: " + javascript); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
continue;
}
String number = include.getAttribute(ATTRIBUTE_NUMBER);
int paramNo = Integer.parseInt(number);
String types = include.getAttribute(ATTRIBUTE_TYPE);
StringTokenizer st = new StringTokenizer(types, ","); //$NON-NLS-1$
int j = 0;
while (st.hasMoreTokens())
{
String type = st.nextToken();
Class clazz = Class.forName(type.trim());
TypeHintContext thc = new TypeHintContext(method, paramNo).createChildContext(j++);
converterManager.setExtraTypeInfo(thc, clazz);
}
}
}
/**
* J2EE role based method level security added here.
* @param javascript The name of the creator
* @param parent The container of the include and exclude elements.
*/
private void processAuth(String javascript, Element parent)
{
NodeList nodes = parent.getElementsByTagName(ELEMENT_AUTH);
for (int i = 0; i < nodes.getLength(); i++)
{
Element include = (Element) nodes.item(i);
String method = include.getAttribute(ATTRIBUTE_METHOD);
String role = include.getAttribute(ATTRIBUTE_ROLE);
accessControl.addRoleRestriction(javascript, method, role);
}
}
/**
* Parse and extra type info from method signatures
* @param element The element to read
*/
private void loadSignature(Element element)
{
StringBuffer sigtext = new StringBuffer();
// This coagulates text nodes, not sure if we need to do this?
element.normalize();
NodeList nodes = element.getChildNodes();
for (int i = 0; i < nodes.getLength(); i++)
{
Node node = nodes.item(i);
short type = node.getNodeType();
if (type != Node.TEXT_NODE && type != Node.CDATA_SECTION_NODE)
{
log.warn("Ignoring illegal node type: " + type); //$NON-NLS-1$
continue;
}
sigtext.append(node.getNodeValue());
}
SignatureParser sigp = new SignatureParser(converterManager);
sigp.parse(sigtext.toString());
}
/**
* Accessor for the DefaultCreatorManager that we configure
* @param creatorManager The new DefaultConverterManager
*/
public void setCreatorManager(CreatorManager creatorManager)
{
this.creatorManager = creatorManager;
}
/**
* Accessor for the DefaultCreatorManager that we configure
* @return the configured DefaultCreatorManager
*/
public CreatorManager getCreatorManager()
{
return creatorManager;
}
/**
* Accessor for the DefaultCreatorManager that we configure
* @param converterManager The new DefaultConverterManager
*/
public void setConverterManager(ConverterManager converterManager)
{
this.converterManager = converterManager;
}
/**
* Accessor for the DefaultConverterManager that we configure
* @return the configured DefaultConverterManager
*/
public ConverterManager getConverterManager()
{
return converterManager;
}
/**
* Accessor for the security manager
* @return Returns the accessControl.
*/
public AccessControl getAccessControl()
{
return accessControl;
}
/**
* Accessor for the security manager
* @param accessControl The accessControl to set.
*/
public void setAccessControl(AccessControl accessControl)
{
this.accessControl = accessControl;
}
/**
* The log stream
*/
private static final Logger log = Logger.getLogger(DefaultConfiguration.class);
/**
* The converter manager that decides how parameters are converted
*/
private ConverterManager converterManager = null;
/**
* The DefaultCreatorManager to which we delegate creation of new objects.
*/
private CreatorManager creatorManager = null;
/**
* The security manager
*/
private AccessControl accessControl = null;
/*
* The element names
*/
private static final String ELEMENT_INIT = "init"; //$NON-NLS-1$
private static final String ELEMENT_ALLOW = "allow"; //$NON-NLS-1$
private static final String ELEMENT_CREATE = "create"; //$NON-NLS-1$
private static final String ELEMENT_CONVERT = "convert"; //$NON-NLS-1$
private static final String ELEMENT_PARAM = "param"; //$NON-NLS-1$
private static final String ELEMENT_INCLUDE = "include"; //$NON-NLS-1$
private static final String ELEMENT_EXCLUDE = "exclude"; //$NON-NLS-1$
private static final String ELEMENT_PARAMETER = "parameter"; //$NON-NLS-1$
private static final String ELEMENT_AUTH = "auth"; //$NON-NLS-1$
private static final String ELEMENT_SIGNATURES = "signatures"; //$NON-NLS-1$
/*
* The attribute names
*/
private static final String ATTRIBUTE_ID = "id"; //$NON-NLS-1$
private static final String ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$
private static final String ATTRIBUTE_CONVERTER = "converter"; //$NON-NLS-1$
private static final String ATTRIBUTE_MATCH = "match"; //$NON-NLS-1$
private static final String ATTRIBUTE_JAVASCRIPT = "javascript"; //$NON-NLS-1$
private static final String ATTRIBUTE_CREATOR = "creator"; //$NON-NLS-1$
private static final String ATTRIBUTE_NAME = "name"; //$NON-NLS-1$
private static final String ATTRIBUTE_VALUE = "value"; //$NON-NLS-1$
private static final String ATTRIBUTE_METHOD = "method"; //$NON-NLS-1$
private static final String ATTRIBUTE_ROLE = "role"; //$NON-NLS-1$
private static final String ATTRIBUTE_NUMBER = "number"; //$NON-NLS-1$
private static final String ATTRIBUTE_TYPE = "type"; //$NON-NLS-1$
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -