summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java')
-rw-r--r--branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java124
1 files changed, 124 insertions, 0 deletions
diff --git a/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java b/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java
new file mode 100644
index 0000000000..8b1e40cee9
--- /dev/null
+++ b/branches/sca-java-1.3.3/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/TuscanyNamespaceContext.java
@@ -0,0 +1,124 @@
+package org.apache.tuscany.sca.contribution.processor;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Stack;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+
+@SuppressWarnings("unused")
+public class TuscanyNamespaceContext implements NamespaceContext {
+
+ private Stack<ArrayList<ArrayList<String>>> context = null;
+
+ public TuscanyNamespaceContext(Stack<ArrayList<ArrayList<String>>> context){
+ this.context = context;
+ }
+
+ public String getNamespaceURI(String prefix) {
+ if (prefix == null) {
+ throw new IllegalArgumentException();
+ }
+ return (String) getResult("getNSUri",prefix);
+ }
+
+ public String getPrefix(String namespaceURI) {
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException();
+ }
+ return (String) getResult("getPrefix",namespaceURI);
+ }
+
+ @SuppressWarnings("unchecked")
+ public Iterator<String> getPrefixes(String namespaceURI) {
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException();
+ }
+
+ Iterator<String> iterator = new Itr<String>((Iterator<String>) getResult("getPrefixes",namespaceURI));
+ return iterator;
+ }
+
+ /*
+ * Generic method to Iterate through the Stack and return required result(s)
+ */
+ private Object getResult(String operation,String arg){
+
+ ArrayList<ArrayList<String>> contextList = null;
+ Iterator<String> prefItr = null;
+ Iterator<String> uriItr = null;
+
+ List<String> list = new ArrayList<String>();;
+
+ String toCompare = null;
+
+ String tempPrefix = null;
+ String tempUri = null ;
+
+ for(int i = context.size()-1; i>=0;i--){
+ contextList = context.get(i);
+ prefItr = ((ArrayList<String>)contextList.get(0)).iterator();
+ uriItr = ((ArrayList<String>)contextList.get(1)).iterator();
+ for(int j = 0;uriItr.hasNext();j++){
+ tempPrefix = (String) prefItr.next();
+ tempUri = (String) uriItr.next();
+ if(operation.equalsIgnoreCase("getNSUri")){
+ toCompare = tempPrefix;
+ }
+ else if(operation.equalsIgnoreCase("getPrefix")){
+ toCompare = tempUri;
+ }
+ else if(operation.equalsIgnoreCase("getPrefixes")){
+ toCompare = tempUri;
+ }
+ if(toCompare != null && arg.equalsIgnoreCase(toCompare)){
+ if(operation.equalsIgnoreCase("getNSUri")){
+ return tempUri;
+ }
+ else if(operation.equalsIgnoreCase("getPrefix")){
+ return tempPrefix;
+ }
+ else if(operation.equalsIgnoreCase("getPrefixes")){
+ list.add(tempPrefix);
+
+ }
+
+ }
+ }
+ }
+
+ if(operation.equalsIgnoreCase("getPrefixes")){
+ return list.iterator();
+ }
+
+ return null;
+ }
+
+ /*
+ * Custom implementation of the Iterator interface to override the behavior of the remove() method.
+ * The iterator should not be modifiable and invocation of the remove() method should throw UnsupportedOperationException.
+ */
+ private class Itr<E> implements Iterator<E>{
+ Iterator<E> iterator = null;
+
+ Itr(Iterator<E> inputItr){
+ this.iterator = inputItr;
+ }
+
+ public boolean hasNext() {
+ return this.iterator.hasNext();
+ }
+
+ public E next() {
+ return (E) this.iterator.next();
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ } //end of class Itr<E>
+
+
+} //end of Class