Author: kentam
Date: Fri Feb 25 10:46:41 2005
New Revision: 155360
URL: http://svn.apache.org/viewcvs?view=rev&rev=155360
Log:
BEEHIVE-20: Binding unsupported
A simple form of external control implementation binding. The infrastructure
now supports a properties file "controlbindings.properties" -- property keys
are control bean classnames, mapped to values that are control implementation
classnames.
Added a DRT test to illustrate usage. I'll update the wiki w/ more details.
This is meant largely as a proof-of-concept; a generalized approach to external
configuration (potentially incorporating integration with other lightweight
frameworks) will eventually obsolete this.
Added:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java
(with props)
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs
(with props)
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs
(with props)
incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties
(with props)
Modified:
incubator/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/bean/JavaControlFactory.java
incubator/beehive/trunk/controls/test/build.xml
incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/jpf/binding/TestControlBinding.java
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/BindingTests.jpf
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/index.jsp
Modified:
incubator/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/bean/JavaControlFactory.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/bean/JavaControlFactory.java?view=diff&r1=155359&r2=155360
==============================================================================
---
incubator/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/bean/JavaControlFactory.java
(original)
+++
incubator/beehive/trunk/controls/src/spi/org/apache/beehive/controls/spi/bean/JavaControlFactory.java
Fri Feb 25 10:46:41 2005
@@ -18,30 +18,51 @@
*/
import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.Properties;
+import java.io.InputStream;
+import java.io.IOException;
import org.apache.beehive.controls.api.properties.PropertyMap;
+import org.apache.beehive.controls.api.properties.BeanPropertyMap;
+import org.apache.beehive.controls.api.properties.PropertyKey;
import org.apache.beehive.controls.api.bean.ControlBean;
import org.apache.beehive.controls.api.context.ControlBeanContext;
import org.apache.beehive.controls.api.ControlException;
-import org.apache.beehive.controls.spi.bean.ControlFactory;
-
/**
* The SimpleControlFactory class is a default implementation of the
* <code>org.apache.beehive.controls.api.bean.ControlFactory</code> interface.
It
* uses Java reflection to create new control instances.
*
- * @see org.apache.beehive.controls.api.Controls#instantiate
- * @see org.apache.beehive.controls.spi.ControlFactory
+ * @see org.apache.beehive.controls.api.bean.Controls#instantiate
+ * @see org.apache.beehive.controls.spi.bean.ControlFactory
*/
public class JavaControlFactory implements ControlFactory
{
private static ConcurrentHashMap<Class, Constructor> _constructors =
new ConcurrentHashMap<Class, Constructor>();
+ private static final Properties _extImplBindings = new Properties();
+
+ private static final String EXT_IMPL_BINDING_CONFIG =
"controlbindings.properties";
+
+ static
+ {
+ InputStream is = JavaControlFactory.class.getClassLoader().
+ getResourceAsStream( EXT_IMPL_BINDING_CONFIG );
+
+ if ( is != null )
+ {
+ try
+ {
+ _extImplBindings.load( is );
+ }
+ catch ( IOException ie ) { }
+ }
+ }
+
/**
* Instantiates a new ControlBean of the requested class, using mechanisms
provided
* by a provider-specific JavaBeans framework.
@@ -54,13 +75,29 @@
* execution context.
* @param id the bean control ID. Must be unique within the containing
context. If
* null, a unique identifier will be auto-generated.
- * @returns a new ControlBean instance of the requested class.
+ * @return a new ControlBean instance of the requested class.
*/
public <T extends ControlBean> T instantiate(Class<T> beanClass,
PropertyMap props,
ControlBeanContext context,
String id)
{
+ String beanClassName = beanClass.getName();
+
+ String extImplBinding = _extImplBindings.getProperty( beanClassName +
"_" + id );
+ if ( extImplBinding == null )
+ extImplBinding = _extImplBindings.getProperty( beanClassName );
+
+ if ( extImplBinding != null )
+ {
+ BeanPropertyMap bpm = props == null ? new BeanPropertyMap(
beanClass ) : new BeanPropertyMap( props );
+ PropertyKey propKey = new PropertyKey(
org.apache.beehive.controls.api.properties.BaseProperties.class,
+ "controlImplementation" );
+
+ bpm.setProperty( propKey, extImplBinding );
+ props = bpm;
+ }
+
T ret = null;
try
{
Modified: incubator/beehive/trunk/controls/test/build.xml
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/build.xml?view=diff&r1=155359&r2=155360
==============================================================================
--- incubator/beehive/trunk/controls/test/build.xml (original)
+++ incubator/beehive/trunk/controls/test/build.xml Fri Feb 25 10:46:41 2005
@@ -264,6 +264,11 @@
<pathelement location="${milton.jar}"/>
</classpath>
</javac>
+ <copy todir="${build.drivers}">
+ <fileset dir="${controls.test.drivers}">
+ <include name="controlbindings.properties"/>
+ </fileset>
+ </copy>
<jar destfile="${controlstestdrivers.jar}" basedir="${build.drivers}"/>
<property name="_build.test.drivers.ran" value="true"/>
</target>
Added:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java?view=auto&rev=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java
(added)
+++
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java
Fri Feb 25 10:46:41 2005
@@ -0,0 +1,11 @@
+package org.apache.beehive.controls.test.controls.binding;
+
+import org.apache.beehive.controls.api.bean.ControlInterface;
+import org.apache.beehive.controls.api.properties.BaseProperties;
+
[EMAIL PROTECTED]
[EMAIL
PROTECTED](controlImplementation="org.apache.beehive.controls.test.controls.binding.ExternalBindingTestControlImpl")
+public interface ExternalBindingTestControl
+{
+ public String getStatus();
+}
Propchange:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs?view=auto&rev=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs
(added)
+++
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs
Fri Feb 25 10:46:41 2005
@@ -0,0 +1,15 @@
+package org.apache.beehive.controls.test.controls.binding;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+
+import org.apache.beehive.test.tools.milton.common.Report;
+
[EMAIL PROTECTED]
+public class ExternalBindingTestControlImpl
+ implements java.io.Serializable, ExternalBindingTestControl
+{
+ public String getStatus()
+ {
+ return Report.FAIL;
+ }
+}
Propchange:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestControlImpl.jcs
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs?view=auto&rev=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs
(added)
+++
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs
Fri Feb 25 10:46:41 2005
@@ -0,0 +1,15 @@
+package org.apache.beehive.controls.test.controls.binding;
+
+import org.apache.beehive.controls.api.bean.ControlImplementation;
+
+import org.apache.beehive.test.tools.milton.common.Report;
+
[EMAIL PROTECTED]
+public class ExternalBindingTestOverrideControlImpl
+ implements java.io.Serializable, ExternalBindingTestControl
+{
+ public String getStatus()
+ {
+ return Report.PASS;
+ }
+}
Propchange:
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/binding/ExternalBindingTestOverrideControlImpl.jcs
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties?view=auto&rev=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties
(added)
+++
incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties
Fri Feb 25 10:46:41 2005
@@ -0,0 +1,2 @@
+org.apache.beehive.controls.test.controls.binding.ExternalBindingTestControlBean=org.apache.beehive.controls.test.controls.binding.ExternalBindingTestOverrideControlImpl
+
Propchange:
incubator/beehive/trunk/controls/test/src/drivers/controlbindings.properties
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/jpf/binding/TestControlBinding.java
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/jpf/binding/TestControlBinding.java?view=diff&r1=155359&r2=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/jpf/binding/TestControlBinding.java
(original)
+++
incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/jpf/binding/TestControlBinding.java
Fri Feb 25 10:46:41 2005
@@ -25,4 +25,12 @@
{
assertReport("/controlsWeb/binding/index.jsp", "testDefaultBinding");
}
+
+ @Freq("checkin")
+ @Desc("Test that a control implementation can be overridden with external
binding " +
+ "to an impl that is specified in controlbindings.properties")
+ public void testExternalBinding() throws Exception
+ {
+ assertReport("/controlsWeb/binding/index.jsp", "testExternalBinding");
+ }
}
Modified:
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/BindingTests.jpf
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/BindingTests.jpf?view=diff&r1=155359&r2=155360
==============================================================================
---
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/BindingTests.jpf
(original)
+++
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/BindingTests.jpf
Fri Feb 25 10:46:41 2005
@@ -28,6 +28,7 @@
import org.apache.beehive.controls.test.controls.binding.BindingTestControl;
import
org.apache.beehive.controls.test.controls.binding.DefaultBindingTestControl;
+import
org.apache.beehive.controls.test.controls.binding.ExternalBindingTestControl;
import org.apache.beehive.test.tools.milton.common.Report;
@@ -46,6 +47,9 @@
@Control
public DefaultBindingTestControl dbtc;
+ @Control
+ public ExternalBindingTestControl ebtc;
+
@Jpf.Action
protected Forward begin()
{
@@ -65,5 +69,12 @@
{
return new Forward(Report.RESULTS, Report.KEY, new
Report(dbtc.getStatus()));
+ }
+
+ @Jpf.Action
+ protected Forward testExternalBinding()
+ {
+ return new Forward(Report.RESULTS, Report.KEY, new
+ Report(ebtc.getStatus()));
}
}
Modified:
incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/index.jsp
URL:
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/index.jsp?view=diff&r1=155359&r2=155360
==============================================================================
--- incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/index.jsp
(original)
+++ incubator/beehive/trunk/controls/test/webapps/controlsWeb/binding/index.jsp
Fri Feb 25 10:46:41 2005
@@ -5,6 +5,7 @@
</head>
<body>
<netui:anchor
action="testDefaultBinding">testDefaultBinding</netui:anchor><br>
- <netui:anchor
action="testBindingOverride">testBindingOverride</netui:anchor>
+ <netui:anchor
action="testBindingOverride">testBindingOverride</netui:anchor><br>
+ <netui:anchor
action="testExternalBinding">testExternalBinding</netui:anchor>
</body>
</html>