[Yanel-commits] rev 34065 -
public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation
michi at wyona.com
michi at wyona.com
Wed Mar 26 01:56:23 CET 2008
Author: michi
Date: 2008-03-26 01:56:22 +0100 (Wed, 26 Mar 2008)
New Revision: 34065
Modified:
public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/AccessControlTransformer.java
Log:
access control transformer also works now with nested elements
Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/AccessControlTransformer.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/AccessControlTransformer.java 2008-03-25 23:45:54 UTC (rev 34064)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/transformation/AccessControlTransformer.java 2008-03-26 00:56:22 UTC (rev 34065)
@@ -21,9 +21,10 @@
private Identity identity;
private Usecase usecase;
- private boolean insideParentElement;
private boolean insideAnchor;
private boolean accessGranted;
+ private boolean bufferEnabled;
+ private int numberOfNestedElements;
private StringBuffer textBuffer;
private String parentElementName;
@@ -42,19 +43,22 @@
this.parentElementName = parentElementName;
- insideParentElement = false;
insideAnchor = false;
accessGranted = true;
+ bufferEnabled = false;
+ numberOfNestedElements = 0;
}
/**
*
*/
public void startElement(String namespaceURI, String localName, String qName, Attributes attrs) throws SAXException {
- //log.debug("Element name: " + localName + ", " + qName);
+ //log.error("DEBUG: Start element: " + localName + ", " + qName);
+ numberOfNestedElements = numberOfNestedElements + 1;
+ //log.error("DEBUG: Number of nested elements: " + numberOfNestedElements);
- if (insideParentElement && isAnchorElement(namespaceURI, localName, qName)) {
+ if (bufferEnabled && isAnchorElement(namespaceURI, localName, qName)) {
this.insideAnchor = true;
//log.debug("Inside a 'a' element which is inside parent element '" + parentElementName + "'!");
anchorAttrs = new AttributesImpl(attrs);
@@ -68,9 +72,13 @@
//log.debug("Check authorization for: " + path + ", " + identity + ", " + usecase);
try {
if (policyManager.authorize(path, identity, usecase)) {
- //log.debug("Access granted for " + identity + ", " + usecase + ", " + path);
+ //log.error("DEBUG: Access granted for " + identity + ", " + usecase + ", " + path);
+ accessGranted = true;
+ // Re-insert parent element and anchor
+ super.startElement(NS_XHTML_URI, parentElementName, parentElementName, parentAttrs);
+ super.startElement(NS_XHTML_URI, "a", "a", anchorAttrs);
} else {
- //log.debug("Access denied for " + identity + ", " + usecase + ", " + path);
+ //log.error("DEBUG: Access denied for " + identity + ", " + usecase + ", " + path);
accessGranted = false;
}
} catch (Exception e) {
@@ -82,14 +90,18 @@
}
- if (isParentElement(namespaceURI, localName, qName)) {
- this.insideParentElement = true;
+ if (isParentElement(namespaceURI, localName, qName) && accessGranted) {
+ bufferEnabled = true;
parentAttrs = new AttributesImpl(attrs);
textBuffer = new StringBuffer();
- //log.debug("Entering '" + parentElementName + "' element!");
- } else if (insideParentElement) {
- //log.debug("Add to buffer start of: " + localName);
+ //log.error("DEBUG: Entering '" + parentElementName + "' element!");
+ }
+
+
+ if (bufferEnabled || !accessGranted) {
+ //if (bufferEnabled || accessDenied) {
+ //log.error("DEBUG: Do nothing and just dump start of element: <" + localName + " ...>");
} else {
super.startElement(namespaceURI, localName, qName, attrs);
}
@@ -99,32 +111,34 @@
*
*/
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
+ //log.error("DEBUG: End element: " + localName + ", " + qName);
+ numberOfNestedElements = numberOfNestedElements - 1;
+
if (isAnchorElement(namespaceURI, localName, qName)) {
this.insideAnchor = false;
//log.debug("Leaving 'a' element!");
+ if (bufferEnabled && !accessGranted) {
+ numberOfNestedElements = 0;
+ }
+ bufferEnabled = false;
}
- if (isParentElement(namespaceURI, localName, qName)) {
- this.insideParentElement = false;
- if (accessGranted) {
- //log.debug("Do copy parent element: " + textBuffer);
-
- super.startElement(NS_XHTML_URI, parentElementName, parentElementName, parentAttrs);
- super.startElement(NS_XHTML_URI, "a", "a", anchorAttrs);
- char[] characters = textBuffer.toString().toCharArray();
- super.characters(characters, 0, characters.length);
- super.endElement(NS_XHTML_URI, "a", "a");
- super.endElement(NS_XHTML_URI, parentElementName, parentElementName);
- } else {
- //log.debug("Do NOT copy parent element: " + textBuffer);
- }
- accessGranted = true;
- //log.debug("Leaving '" + parentElementName + "' element!");
- } else if (insideParentElement) {
- //log.debug("Add to buffer end of: " + localName);
+ if (bufferEnabled || !accessGranted) {
+ //if (bufferEnabled || accessDenied) {
+ //log.error("DEBUG: Do nothing and just dump end of element: </" + localName + ">");
} else {
super.endElement(namespaceURI, localName, qName);
}
+
+ //log.error("DEBUG: Number of nested elements: " + numberOfNestedElements);
+ if (isParentElement(namespaceURI, localName, qName) && numberOfNestedElements == -1 && !accessGranted) {
+ accessGranted = true;
+ }
+
+/*
+char[] characters = textBuffer.toString().toCharArray();
+super.characters(characters, 0, characters.length);
+*/
}
/**
@@ -161,8 +175,9 @@
*
*/
public void characters(char[] buf, int offset, int len) throws SAXException {
- if (insideParentElement) {
- this.textBuffer.append(buf, offset, len);
+ if (!accessGranted) {
+ //if (accessDenied) {
+ //log.error("DEBUG: Do nothing and just dump characters!");
} else {
super.characters(buf, offset, len);
}
More information about the Yanel-commits
mailing list