You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2006/08/18 22:31:59 UTC
svn commit: r432717 - in
/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context:
AbstractContext.java AbstractUnmodifiableContext.java ImmutableContext.java
UnmodifiableContext.java WritableContext.java
Author: dain
Date: Fri Aug 18 13:31:58 2006
New Revision: 432717
URL: http://svn.apache.org/viewvc?rev=432717&view=rev
Log:
Pulled generic part of addBinding up from WritableContext
Modified:
geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractContext.java
geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractUnmodifiableContext.java
geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/ImmutableContext.java
geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/UnmodifiableContext.java
geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java
Modified: geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractContext.java?rev=432717&r1=432716&r2=432717&view=diff
==============================================================================
--- geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractContext.java (original)
+++ geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractContext.java Fri Aug 18 13:31:58 2006
@@ -44,9 +44,38 @@
//Ignore. Explicitly do not close the context
}
+ protected void addDeepBinding(Name name, Object value, boolean rebind) throws NamingException {
+ if (name.size() == 1) {
+ addBinding(name.get(0), value, rebind);
+ return;
+ }
+
+ Context context = this;
+ for (int i = 0; i < name.size() - 1; i++) {
+ String segment = name.get(i);
+ Object object = context.lookup(segment);
+ if (object == null) {
+ throw new NotContextException("The intermediate context " + segment + " does not exist");
+ } else if (!(object instanceof Context)) {
+ throw new NotContextException("The intermediate context " + segment + " does is not a context");
+ } else {
+ context = (Context) object;
+ }
+ }
+
+ String lastSegment = name.get(name.size() - 1);
+ if (rebind) {
+ context.rebind(lastSegment, value);
+ } else {
+ context.bind(lastSegment, value);
+ }
+ }
+
+ protected abstract void addBinding(String name, Object value, boolean rebind) throws NamingException;
+
+
protected abstract void removeBindings(Name name) throws NamingException;
protected abstract Object lookup(String stringName, Name parsedName) throws NamingException;
- protected abstract void addBinding(Name name, Object obj, boolean rebind) throws NamingException;
protected abstract Map getBindings() throws NamingException;
//
@@ -195,7 +224,7 @@
if (name.isEmpty()) {
throw new NameAlreadyBoundException("Cannot bind to an empty name (this context)");
}
- addBinding(name, obj, false);
+ addDeepBinding(name, obj, false);
}
public void rebind(String name, Object obj) throws NamingException {
@@ -208,7 +237,7 @@
if (name.isEmpty()) {
throw new NameAlreadyBoundException("Cannot rebind an empty name (this context)");
}
- addBinding(name, obj, true);
+ addDeepBinding(name, obj, true);
}
public void rename(String oldName, String newName) throws NamingException {
@@ -351,7 +380,7 @@
throw new InvalidNameException("Cannot create a subcontext if the name is empty");
}
Context abstractContext = createContext(name.toString(), Collections.EMPTY_MAP);
- addBinding(name, abstractContext, false);
+ addDeepBinding(name, abstractContext, false);
return abstractContext;
}
Modified: geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractUnmodifiableContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractUnmodifiableContext.java?rev=432717&r1=432716&r2=432717&view=diff
==============================================================================
--- geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractUnmodifiableContext.java (original)
+++ geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/AbstractUnmodifiableContext.java Fri Aug 18 13:31:58 2006
@@ -160,15 +160,11 @@
// Add Binding
//
- /**
- * Add the binding to the context. The name will not contain a path but the value may
- * be a nested context which should be indexed for indexing contexts.
- * @param name name under which the value should be bound
- * @param value the value to bind
- * @throws NamingException if a problem occurs during the bind such as a value already being bound
- */
- protected void addBinding(String name, Object value) throws NamingException {
- throw new OperationNotSupportedException("Context is read only");
+ protected void addDeepBinding(Name name, Object value, boolean rebind) throws NamingException {
+ if (rebind) {
+ throw new OperationNotSupportedException("This conext does not support rebind");
+ }
+ addDeepBinding(name.toString(), value);
}
protected void addDeepBinding(String name, Object value) throws NamingException {
@@ -192,7 +188,7 @@
// Is this the last element in the name?
if (i == compoundName.size() - 1) {
// we're at the end... bind the value into the parent context
- currentContext.addBinding(part, value);
+ currentContext.addBinding(part, value, false);
// all done... this is redundant but makes the code more readable
break;
@@ -205,7 +201,7 @@
Context context = currentContext.createContextTree(compoundName.getPrefix(i).toString(),
compoundName.getSuffix(i),
value);
- currentContext.addBinding(part, context);
+ currentContext.addBinding(part, context, false);
// all done
break;
Modified: geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/ImmutableContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/ImmutableContext.java?rev=432717&r1=432716&r2=432717&view=diff
==============================================================================
--- geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/ImmutableContext.java (original)
+++ geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/ImmutableContext.java Fri Aug 18 13:31:58 2006
@@ -88,6 +88,10 @@
throw new OperationNotSupportedException("Context is immutable");
}
+ protected void addBinding(String name, Object value, boolean rebind) throws NamingException {
+ throw new OperationNotSupportedException("Context is immutable");
+ }
+
protected void removeDeepBinding(String name, Object value) throws NamingException {
throw new OperationNotSupportedException("Context is immutable");
}
@@ -122,6 +126,10 @@
}
protected void addDeepBinding(String name, Object value) throws NamingException {
+ throw new OperationNotSupportedException("Context is immutable");
+ }
+
+ protected void addBinding(String name, Object value, boolean rebind) throws NamingException {
throw new OperationNotSupportedException("Context is immutable");
}
Modified: geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/UnmodifiableContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/UnmodifiableContext.java?rev=432717&r1=432716&r2=432717&view=diff
==============================================================================
--- geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/UnmodifiableContext.java (original)
+++ geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/UnmodifiableContext.java Fri Aug 18 13:31:58 2006
@@ -25,6 +25,7 @@
import javax.naming.NamingException;
import javax.naming.Context;
import javax.naming.NameNotFoundException;
+import javax.naming.OperationNotSupportedException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -60,7 +61,11 @@
this.indexRef = new AtomicReference(Collections.unmodifiableMap(buildIndex("", localBindings)));
}
- protected void addBinding(String name, Object value) throws NamingException {
+ protected void addBinding(String name, Object value, boolean rebind) throws NamingException {
+ if (rebind) {
+ throw new OperationNotSupportedException("This conext does not support rebind");
+ }
+
writeLock.lock();
try {
Map bindings = (Map) bindingsRef.get();
@@ -193,7 +198,11 @@
return bindings;
}
- protected void addBinding(String name, Object value) {
+ protected void addBinding(String name, Object value, boolean rebind) throws NamingException {
+ if (rebind) {
+ throw new OperationNotSupportedException("This conext does not support rebind");
+ }
+
writeLock.lock();
try {
Map currentBindings = (Map) bindingsRef.get();
Modified: geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java?rev=432717&r1=432716&r2=432717&view=diff
==============================================================================
--- geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java (original)
+++ geronimo/xbean/branches/colossus/xbean-naming/src/main/java/org/apache/xbean/naming/context/WritableContext.java Fri Aug 18 13:31:58 2006
@@ -121,40 +121,13 @@
}
- protected void addBinding(Name name, Object obj, boolean rebind) throws NamingException {
- Map bindings = this.bindings;
- if (name.size() == 1) {
+ protected void addBinding(String name, Object value, boolean rebind) throws NamingException {
+ synchronized (bindings) {
if (rebind || bindings.get(name.toString()) == null) {
- synchronized (bindings) {
- bindings.put(name.toString(), obj);
- }
+ bindings.put(name, value);
} else {
throw new NameAlreadyBoundException("The name " + name
+ "is already bound");
- }
- } else {
- String segment = null;
- int lastIndex = name.size() - 1;
- Object terminalContext = null;
- for (int i = 0; i < lastIndex; i++) {
- segment = name.get(i);
- terminalContext = bindings.get(segment);
- if (terminalContext == null) {
- throw new NamingException("The intermediate context "
- + segment + " does not exist");
- } else if (!(terminalContext instanceof Context)) {
- throw new NameAlreadyBoundException(
- " An object that is not a context is already bound at element "
- + segment + "of name " + name);
- } else {
- bindings = ((WritableContext) terminalContext).bindings;
- }
- }
- segment = name.get(lastIndex);
- if (rebind) {
- ((Context) terminalContext).rebind(segment, obj);
- } else {
- ((Context) terminalContext).bind(segment, obj);
}
}
}