[Buix-commits] r1014 - in lutinjaxx/trunk/jaxx-core/src: main/java/jaxx/runtime test/java/jaxx/runtime
Author: tchemit Date: 2008-11-03 00:55:20 +0000 (Mon, 03 Nov 2008) New Revision: 1014 Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/DefaultJAXXContext.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXContextEntryDef.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXInitialContext.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/runtime/DefaultJAXXContextTest.java Log: use DefaultJAXXContext as super class ofJAXXInitialContext to avoid duplicated code add usefull method to check if entry is in context Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/DefaultJAXXContext.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/DefaultJAXXContext.java 2008-11-03 00:53:56 UTC (rev 1013) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/DefaultJAXXContext.java 2008-11-03 00:55:20 UTC (rev 1014) @@ -54,8 +54,11 @@ @SuppressWarnings({"unchecked"}) public <T> T getContextValue(Class<T> clazz, String name) { for (Map.Entry<Object, String> entry : data.entrySet()) { - if (clazz.isAssignableFrom(entry.getKey().getClass()) && (name == null || name.equals(entry.getValue()))) { - return (T) entry.getKey(); + if (clazz.isAssignableFrom(entry.getKey().getClass())) { + if ((name == null && entry.getValue() == null) || + (name != null && name.equals(entry.getValue()))) { + return (T) entry.getKey(); + } } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXContextEntryDef.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXContextEntryDef.java 2008-11-03 00:53:56 UTC (rev 1013) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXContextEntryDef.java 2008-11-03 00:55:20 UTC (rev 1014) @@ -49,6 +49,11 @@ return context.getContextValue(klass, name); } + @Override + public String toString() { + return super.toString() + "<" + klass + ":" + name + ">"; + } + protected JAXXContextEntryDef(Class<O> klass) { this(null, klass); } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXInitialContext.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXInitialContext.java 2008-11-03 00:53:56 UTC (rev 1013) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/JAXXInitialContext.java 2008-11-03 00:55:20 UTC (rev 1014) @@ -1,9 +1,7 @@ package jaxx.runtime; import java.awt.Container; -import java.util.LinkedHashSet; import java.util.Map.Entry; -import java.util.Set; /** * An initial context to be inject in a {@link JAXXObject}. @@ -12,7 +10,7 @@ * <p/> * The method {@link #add(String, Object)} register a named value. * <p/> - * The method {@link #to(JAXXObject)} inject in the {@link JAXXObject} the values registred in the initial context. + * The method {@link #to(JAXXContext)} inject in the {@link JAXXObject} the values registred in the initial context. * <p/> * The initial context is also a "limited" {@link JAXXContext}, since we can only use the two methods * <p/> @@ -20,39 +18,10 @@ * * @see JAXXContext */ -public class JAXXInitialContext implements JAXXContext { +public class JAXXInitialContext extends DefaultJAXXContext { - /** This class define a simple entry of a {@link JAXXContext}. */ - public static class JAXXInitialContextEntry implements Entry<String, Object> { - - protected String key; - protected Object value; - - public JAXXInitialContextEntry(String key, Object value) { - this.key = key; - this.value = value; - } - - public String getKey() { - return key; - } - - public Object getValue() { - return value; - } - - public Object setValue(Object value) { - Object oldValue = this.value; - this.value = value; - return oldValue; - } - - } - - protected Set<Entry<String, Object>> entries; - public JAXXInitialContext() { - entries = new LinkedHashSet<Entry<String, Object>>(); + super(); } /** @@ -73,7 +42,7 @@ * @return the instance of the context */ public JAXXInitialContext add(String name, Object value) { - entries.add(new JAXXInitialContextEntry(name, value)); + super.setContextValue(value, name); return this; } @@ -82,51 +51,28 @@ * * @param dst the object to fill. */ - public void to(JAXXObject dst) { - for (Entry<String, Object> entry : entries) { - if (entry.getKey() == null) { - dst.setContextValue(entry.getValue()); - } else { - dst.setContextValue(entry.getValue(), entry.getKey()); - } + public void to(JAXXContext dst) { + for (Entry<Object, String> entry : data.entrySet()) { + dst.setContextValue(entry.getKey(), entry.getValue()); } } - @SuppressWarnings({"unchecked"}) - public <T> T getContextValue(Class<T> clazz) { - T result = null; - for (Entry<String, Object> entry : entries) { - if (clazz.isAssignableFrom(entry.getValue().getClass())) { - result = (T) entry.getValue(); - break; - } - } - return result; - } - - @SuppressWarnings({"unchecked"}) - public <T> T getContextValue(Class<T> clazz, String name) { - T result = null; - for (Entry<String, Object> entry : entries) { - if (name.equals(entry.getKey()) && clazz.isAssignableFrom(entry.getValue().getClass())) { - result = (T) entry.getValue(); - } - } - return result; - } - + @Override public void setContextValue(Object o) { throw new RuntimeException("not implemented"); } + @Override public void setContextValue(Object o, String name) { throw new RuntimeException("not implemented"); } + @Override public <O extends Container> O getParentContainer(Class<O> clazz) { throw new RuntimeException("not implemented"); } + @Override public <O extends Container> O getParentContainer(Object top, Class<O> clazz) { throw new RuntimeException("not implemented"); } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java 2008-11-03 00:53:56 UTC (rev 1013) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/Util.java 2008-11-03 00:55:20 UTC (rev 1014) @@ -407,4 +407,27 @@ result = value == null ? "" : value.toString(); return result; } + + /** + * Test if a type of entry exists in a given context and throw an IllegalArgumentException if not found. + * <p/> + * If entry is found, return his value in context. + * + * @param context the context to test + * @param def the definition of the entry to seek in context + * @return the value from the context + * @throws IllegalArgumentException if the entry is not found in context. + */ + public static <T> T checkJAXXContextEntry(JAXXContext context, JAXXContextEntryDef<T> def) throws IllegalArgumentException { + + T value = def.getContextValue(context); + + if (value == null) { + throw new IllegalArgumentException("the context entry [" + def + "] ] was not found in context " + context); + } + + return value; + + } + } Modified: lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/runtime/DefaultJAXXContextTest.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/runtime/DefaultJAXXContextTest.java 2008-11-03 00:53:56 UTC (rev 1013) +++ lutinjaxx/trunk/jaxx-core/src/test/java/jaxx/runtime/DefaultJAXXContextTest.java 2008-11-03 00:55:20 UTC (rev 1014) @@ -132,6 +132,30 @@ } @Test + public void testSetGetContextValue2() throws Exception { + + // attach parent context + JAXXContext parentContext = new DefaultJAXXContext(); + ctxt.setContextValue(parentContext); + + String expected; + String result; + + result = ctxt.getContextValue(String.class); + Assert.assertNull(result); + result = ctxt.getContextValue(String.class, "yo"); + Assert.assertNull(result); + + expected = "yo"; + ctxt.setContextValue(expected, "yo"); + + result = ctxt.getContextValue(String.class); + Assert.assertNull(result); + result = ctxt.getContextValue(String.class, "yo"); + Assert.assertEquals(expected, result); + } + + @Test public void testSetGetContextValueInParentParentContext() throws Exception { // attach parent parent context
participants (1)
-
tchemit@users.labs.libre-entreprise.org