public void startElement(String uri,
String localName,
String qname,
Attributes attrs) throws SAXException {
if (currentElement == null) {
if (qname.equals(PLATFORM_ELEMENT)) {
currentElement = qname;
}
nativeProcessProvider = null;
nativeAuthenticationProvider = null;
nativeSettings.clear();
} else {
if (currentElement.equals(PLATFORM_ELEMENT)) {
if (!qname.equals(NATIVE_PROCESS_ELEMENT) &&
!qname.equals(NATIVE_AUTH_ELEMENT) &&
!qname.equals(NATIVE_SETTING_ELEMENT) &&
!qname.equals(VFSMOUNT_ELEMENT) &&
!qname.equals(VFSROOT_ELEMENT) &&
!qname.equals(NFS_ELEMENT)) {
throw new SAXException("Unexpected element " + qname);
}
} else if (currentElement.equals(VFSMOUNT_ELEMENT)) {
if (!qname.equals(VFSPERMISSION_ELEMENT)) {
throw new SAXException("Unexpected element " + qname);
}
} else {
throw new SAXException("Unexpected element " + qname);
}
currentElement = qname;
if (qname.equals(NATIVE_SETTING_ELEMENT)) {
String name = attrs.getValue(NAME_ATTRIBUTE);
String value = attrs.getValue(VALUE_ATTRIBUTE);
if ((name == null) || (value == null)) {
throw new SAXException(
"Required attributes missing for NativeSetting element");
}
log.debug("NativeSetting " + name + "=" + value);
nativeSettings.put(name, value);
}
if (qname.equals(VFSPERMISSION_ELEMENT)) {
String name = attrs.getValue(NAME_ATTRIBUTE);
String permissions = attrs.getValue(PERMISSIONS_ATTRIBUTE);
currentMount.setPermissions(new VFSPermission(name,
permissions));
}
if (qname.equals(VFSMOUNT_ELEMENT)) {
String path = attrs.getValue(PATH_ATTRIBUTE);
String mount = attrs.getValue(MOUNT_ATTRIBUTE);
String permissions = attrs.getValue(PERMISSIONS_ATTRIBUTE);
if ((path != null) && (mount != null)) {
// verify the mount - must start with / and be unique
if (!mount.trim().equals("/")) {
try {
currentMount = new VFSMount(mount, path);
if (permissions == null) {
currentMount.setPermissions(new VFSPermission(
"default"));
} else {
currentMount.setPermissions(new VFSPermission(
"default", permissions));
}
if (!vfsMounts.containsKey(
currentMount.getMount())) {
vfsMounts.put(currentMount.getMount(),
currentMount);
} else {
throw new SAXException("The mount " +
mount + " is already defined");
}
} catch (IOException ex1) {
throw new SAXException(
"VFSMount element is invalid mount=" +
mount + " path=" + path);
}
} else {
throw new SAXException(
"The root mount / cannot be configured, use < VFSRoot path=\"" +
path + "\"/ > instead");
}
} else {
throw new SAXException("Required " + PATH_ATTRIBUTE +
" attribute for element < " + VFSMOUNT_ELEMENT +
" > is missing");
}
}
if (qname.equals(VFSROOT_ELEMENT)) {
if (vfsRoot != null) {
throw new SAXException(
"Only one VFSRoot can be defined");
}
String path = attrs.getValue(PATH_ATTRIBUTE);
String permissions = attrs.getValue(PERMISSIONS_ATTRIBUTE);
try {
vfsRoot = new VFSMount("/", path);
if (permissions != null) {
vfsRoot.setPermissions(new VFSPermission(
"default", permissions));
} else {
vfsRoot.setPermissions(new VFSPermission("default"));
}
vfsRoot.setRoot(true);
} catch (IOException ex) {
throw new SAXException(
"VFSRoot element is invalid path=" + path);
}
}
}
}
|