SchemaNamespaceSupportpublic class SchemaNamespaceSupport extends NamespaceSupport This class customizes the behaviour of the util.NamespaceSupport
class in order to easily implement some features that we need for
efficient schema handling. It will not be generally useful. |
Constructors Summary |
---|
public SchemaNamespaceSupport()
super();
| public SchemaNamespaceSupport(SchemaNamespaceSupport nSupport)
fNamespaceSize = nSupport.fNamespaceSize;
if (fNamespace.length < fNamespaceSize)
fNamespace = new String[fNamespaceSize];
System.arraycopy(nSupport.fNamespace, 0, fNamespace, 0, fNamespaceSize);
fCurrentContext = nSupport.fCurrentContext;
if (fContext.length <= fCurrentContext)
fContext = new int[fCurrentContext+1];
System.arraycopy(nSupport.fContext, 0, fContext, 0, fCurrentContext+1);
|
Methods Summary |
---|
public java.lang.String[] | getEffectiveLocalContext()This method returns an array of Strings, as would be stored in
a NamespaceSupport object. This array contains all
declarations except those at the global level.
// the trick here is to recognize that all local contexts
// happen to start at fContext[3].
// context 1: empty
// context 2: decls for xml and xmlns;
// context 3: decls on <xs:schema>: the global ones
String[] returnVal = null;
if (fCurrentContext >= 3) {
int bottomLocalContext = fContext[3];
int copyCount = fNamespaceSize - bottomLocalContext;
if (copyCount > 0) {
returnVal = new String[copyCount];
System.arraycopy(fNamespace, bottomLocalContext, returnVal, 0,
copyCount);
}
}
return returnVal;
| public void | makeGlobal()
if (fCurrentContext >= 3) {
fCurrentContext = 3;
fNamespaceSize = fContext[3];
}
| public void | setEffectiveContext(java.lang.String[] namespaceDecls)This method takes a set of Strings, as stored in a
NamespaceSupport object, and "fools" the object into thinking
that this is one unified context. This is meant to be used in
conjunction with things like local elements, whose declarations
may be deeply nested but which for all practical purposes may
be regarded as being one level below the global
element--at least with regard to namespace declarations.
It's worth noting that the context from which the strings are
being imported had better be using the same SymbolTable.
if(namespaceDecls == null || namespaceDecls.length == 0) return;
pushContext();
int newSize = fNamespaceSize + namespaceDecls.length;
if (fNamespace.length < newSize) {
// expand namespace's size...
String[] tempNSArray = new String[newSize];
System.arraycopy(fNamespace, 0, tempNSArray, 0, fNamespace.length);
fNamespace = tempNSArray;
}
System.arraycopy(namespaceDecls, 0, fNamespace, fNamespaceSize,
namespaceDecls.length);
fNamespaceSize = newSize;
|
|