Hello,
These is an utility to create interface implementations which haven't
any implemantation.
Usefull to initialise no final dependencies :
private Comparator comparator = new
UnsupportedImplementation(Comparator.class).getInstance();
public void setComparator(Comparator comparator) {
Validate.notNull(comparator);
this.comparator = comparator;
}
public void doSomething() {
// ...
// no problem, comparator can't be null
comparator.comparare(instance1, instance2);
// ...
}
Or to create simple instances for tests, etc ...
A first enhancement could be use a specified Exception.
Hope it can be usefull.
--
Alban Peignier - [EMAIL PROTECTED]
http://people.tryphon.org/~alban
Index: src/test/org/apache/commons/lang/UnsupportedImplementationTest.java
===================================================================
--- src/test/org/apache/commons/lang/UnsupportedImplementationTest.java (revision 0)
+++ src/test/org/apache/commons/lang/UnsupportedImplementationTest.java (revision 0)
@@ -0,0 +1,37 @@
+package org.apache.commons.lang;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit tests [EMAIL PROTECTED] org.apache.commons.lang.UnsupportedImplementation}.
+ *
+ * @author Alban Peignier
+ * @author Arnaud Thiefaine
+ */
+public class UnsupportedImplementationTest extends TestCase {
+
+ public static Test suite() {
+ return new TestSuite(UnsupportedImplementationTest.class);
+ }
+
+ public void testEquals() {
+ Object instance = new UnsupportedImplementation(Comparable.class).getInstance();
+ assertEquals(instance, instance);
+
+ Object otherInstance = new UnsupportedImplementation(Comparable.class).getInstance();
+ assertNotSame(instance, otherInstance);
+ assertFalse(instance.equals(otherInstance));
+ }
+
+ public void testGetInstance() {
+ Comparable comparable = (Comparable) new UnsupportedImplementation(Comparable.class).getInstance();
+
+ try {
+ comparable.compareTo(comparable);
+ fail("should throw an UnsupportedOperationException");
+ } catch (UnsupportedOperationException e) {}
+ }
+
+}
Index: src/test/org/apache/commons/lang/LangTestSuite.java
===================================================================
--- src/test/org/apache/commons/lang/LangTestSuite.java (revision 151351)
+++ src/test/org/apache/commons/lang/LangTestSuite.java (working copy)
@@ -26,7 +26,7 @@
* @author Stephen Colebourne
* @author <a href="mailto:[EMAIL PROTECTED]">Ringo De Smet</a>
* @author Matthew Hawthorne
- * @version $Id: LangTestSuite.java,v 1.29 2004/10/02 01:46:30 bayard Exp $
+ * @version $Id$
*/
public class LangTestSuite extends TestCase {
@@ -78,6 +78,7 @@
suite.addTest(StringEscapeUtilsTest.suite());
suite.addTest(SystemUtilsTest.suite());
suite.addTest(UnhandledExceptionTest.suite());
+ suite.addTest(UnsupportedImplementationTest.suite());
suite.addTest(ValidateTest.suite());
suite.addTest(WordUtilsTest.suite());
return suite;
Index: src/java/org/apache/commons/lang/UnsupportedImplementation.java
===================================================================
--- src/java/org/apache/commons/lang/UnsupportedImplementation.java (revision 0)
+++ src/java/org/apache/commons/lang/UnsupportedImplementation.java (revision 0)
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2002-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.lang;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.commons.lang.BooleanUtils;
+import org.apache.commons.lang.UnhandledException;
+
+/**
+ * Provides instances of interfaces which have an unsupported implementation (throw an exception).
+ * <p>
+ * The only implemented method is the [EMAIL PROTECTED] Object#equals} method in order to allow instances to be
+ * equals to themselves:
+ * <code><pre>
+ * Object instance = new UnsupportedImplementation(..).getInstance();
+ * instance.equals(instance); // returns true
+ * </pre></code>
+ *
+ * @author Alban Peignier
+ * @author Arnaud Thiefaine
+ */
+public class UnsupportedImplementation {
+
+ /**
+ * All the interfaces implemented by the returned instances.
+ */
+ private final Class[] interfaceClasses;
+
+ /**
+ * Creates a <code>UnsupportedImplementation</code> object.
+ * @param interfaceClass the interface that implement the created instances.
+ */
+ public UnsupportedImplementation(Class interfaceClass) {
+ this(new Class[] { interfaceClass });
+ }
+
+ /**
+ * Creates a <code>UnsupportedImplementation</code> object.
+ * @param interfaceClasses the interfaces that implement the created instances.
+ */
+ public UnsupportedImplementation(Class[] interfaceClasses) {
+ this.interfaceClasses = interfaceClasses;
+ }
+
+ /**
+ * Creates a instance which implements the defined interfaces
+ * which an unsupported implementation (throws an exception).
+
+ * @return a instance which implements the defined interfaces
+ * which an unsupported implementation (throws an exception).
+ */
+ public Object getInstance() {
+ ClassLoader loader = getClass().getClassLoader();
+ return Proxy.newProxyInstance(loader, interfaceClasses, handler);
+ }
+
+ /**
+ * <code>InvocationHandler</code> which throws the wanted exception.
+ * <p>
+ * Only the [EMAIL PROTECTED] Object#equals} method is implemented.
+ */
+ private static final InvocationHandler handler = new InvocationHandler() {
+
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ if (equalsMethod.equals(method)) {
+ return BooleanUtils.toBooleanObject(proxy == args[0]);
+ }
+
+ throw new UnsupportedOperationException();
+ }
+
+ };
+
+ static final Method equalsMethod;
+
+ static {
+ try {
+ equalsMethod = Object.class.getMethod("equals", new Class[] { Object.class });
+ } catch (SecurityException e) {
+ throw new UnhandledException("Can't access to the Object.equals method", e);
+ } catch (NoSuchMethodException e) {
+ throw new UnhandledException("Can't find the Object.equals method ...", e);
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]