You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by im...@apache.org on 2007/11/07 15:55:23 UTC
svn commit: r592769 - in
/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm:
annot/ui/ component/dynaForm/ guiBuilder/ metadata/ metadata/impl/ejb/
Author: imario
Date: Wed Nov 7 06:55:22 2007
New Revision: 592769
URL: http://svn.apache.org/viewvc?rev=592769&view=rev
Log:
Introduce the concept of "component handler" which will allow you to call a special component-handler to create the JSF tree.
The whole dynaForm GuiBuilders might be refactored to use this framework ...
Added:
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/ComponentHandler.java
- copied, changed from r592723, myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/UIComponent.java
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java (with props)
Modified:
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/component/dynaForm/DynaForm.java
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/Slipstream.java
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/FieldInterface.java
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/MetaData.java
myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/impl/ejb/EjbExtractor.java
Copied: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/ComponentHandler.java (from r592723, myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/UIComponent.java)
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/ComponentHandler.java?p2=myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/ComponentHandler.java&p1=myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/UIComponent.java&r1=592723&r2=592769&rev=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/UIComponent.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/annot/ui/ComponentHandler.java Wed Nov 7 06:55:22 2007
@@ -18,19 +18,20 @@
*/
package org.apache.myfaces.orchestra.dynaForm.annot.ui;
-import org.apache.myfaces.orchestra.dynaForm.guiBuilder.ComponentEnum;
-
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
- * render the n:1 as select box
+ * set a component handler for the annotated property
*/
@Target(value = {ElementType.METHOD, ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
-public @interface UIComponent
+public @interface ComponentHandler
{
- ComponentEnum type() default ComponentEnum.OutputText;
-}
+ /**
+ * The bean name which implements the DynaFormComponentHandler interface
+ */
+ public String value();
+}
\ No newline at end of file
Modified: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/component/dynaForm/DynaForm.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/component/dynaForm/DynaForm.java?rev=592769&r1=592768&r2=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/component/dynaForm/DynaForm.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/component/dynaForm/DynaForm.java Wed Nov 7 06:55:22 2007
@@ -55,10 +55,10 @@
* <ul>
* <li>uri: {@link #setUri(String)}
* <li>valueBindingPrefix: {@link #setValueBindingPrefix(String)}
- * <li>displayOnly: {@link #setDisplayOnly(String)}
+ * <li>displayOnly: {@link #setDisplayOnly(boolean)}
* <li>bundle: {@link #setBundle(String)}
* <li>exclusiveFields: {@link #setUri(String)}
- * <li>idAsDisplayOnly: {@link #setIdAsDisplayOnly(String)}
+ * <li>idAsDisplayOnly: {@link #setIdAsDisplayOnly(boolean)}
* </ul>
* <p>
* Note that this class has no Renderer; this class dynamically modifies the component
@@ -178,7 +178,7 @@
* metadata for this class. The classname is of course the concrete class of the
* specified object.
* <p>
- * For example, "ejb:fqn.to.model.Entity" means use the EJB3-based extractor
+ * For example, "ejb:fqn.to.model.Entity" means use the EJB3-based extractor
* implementation to obtain metadata about the given entity
* <p>
* TODO: why can't value.getClass() be used for the classname part of the uri?
@@ -311,7 +311,7 @@
* When editing existing objects this should be set to true, as it is not possible
* to modify the key of an existing entity. When creating a new instance this should
* be set to true if the key is an auto-generated surrogate key, but false if the
- * key to this entity is a "business key".
+ * key to this entity is a "business key".
*/
public void setIdAsDisplayOnly(boolean idAsDisplayOnly)
{
@@ -592,7 +592,7 @@
/**
* create and add the components to the layout component.
- *
+ *
* TODO: clean this method up. It still had artefacts from when this code was in a separate
* Renderer class.
*/
@@ -603,9 +603,8 @@
MetaData metaData = extractMetaData(dynaForm);
Slipstream slipstream = new Slipstream();
+ slipstream.setDynaForm(this);
slipstream.setModelMetaData(metaData);
- slipstream.setDisplayOnly(dynaForm.isDisplayOnly());
- slipstream.setIdAsDisplayOnly(dynaForm.isIdAsDisplayOnly());
if (dynaForm.getBundle() != null)
{
Added: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java?rev=592769&view=auto
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java (added)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java Wed Nov 7 06:55:22 2007
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.myfaces.orchestra.dynaForm.guiBuilder;
+
+import org.apache.myfaces.orchestra.dynaForm.component.dynaForm.DynaForm;
+import org.apache.myfaces.orchestra.dynaForm.metadata.FieldInterface;
+
+/**
+ * A component handler which will be used to render the component
+ */
+public interface DynaFormComponentHandler
+{
+ public void buildComponent(DynaForm dynaForm, GuiBuilder guiBuilder, FieldInterface field);
+}
Propchange: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/DynaFormComponentHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/Slipstream.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/Slipstream.java?rev=592769&r1=592768&r2=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/Slipstream.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/guiBuilder/Slipstream.java Wed Nov 7 06:55:22 2007
@@ -18,6 +18,7 @@
*/
package org.apache.myfaces.orchestra.dynaForm.guiBuilder;
+import org.apache.myfaces.orchestra.dynaForm.component.dynaForm.DynaForm;
import org.apache.myfaces.orchestra.dynaForm.metadata.FieldInterface;
import org.apache.myfaces.orchestra.dynaForm.metadata.MetaDataInterface;
@@ -29,36 +30,15 @@
*/
public class Slipstream
{
- private boolean displayOnly;
- private boolean idAsDisplayOnly;
private MetaDataInterface modelMetaData;
private GuiBuilder guiBuilder;
private Map labelBundle;
+ private DynaForm dynaForm;
public Slipstream()
{
}
- public boolean isDisplayOnly()
- {
- return displayOnly;
- }
-
- public void setDisplayOnly(boolean displayOnly)
- {
- this.displayOnly = displayOnly;
- }
-
- public boolean isIdAsDisplayOnly()
- {
- return idAsDisplayOnly;
- }
-
- public void setIdAsDisplayOnly(boolean idAsDisplayOnly)
- {
- this.idAsDisplayOnly = idAsDisplayOnly;
- }
-
public MetaDataInterface getModelMetaData()
{
return modelMetaData;
@@ -89,6 +69,16 @@
this.labelBundle = labelBundle;
}
+ public DynaForm getDynaForm()
+ {
+ return dynaForm;
+ }
+
+ public void setDynaForm(DynaForm dynaForm)
+ {
+ this.dynaForm = dynaForm;
+ }
+
public void process()
{
configureGuiBuilder();
@@ -99,15 +89,21 @@
{
String fieldName = iterFieldNames.next();
FieldInterface field = modelMetaData.getField(fieldName);
-
- guiBuilder.buildField(field);
+ if (field.getComponentHandler() != null)
+ {
+ field.getComponentHandler().buildComponent(dynaForm, guiBuilder, field);
+ }
+ else
+ {
+ guiBuilder.buildField(field);
+ }
}
}
protected void configureGuiBuilder()
{
- guiBuilder.setFormDisplayOnly(isDisplayOnly());
+ guiBuilder.setFormDisplayOnly(dynaForm.isDisplayOnly());
guiBuilder.setLabelBundle(getLabelBundle());
- guiBuilder.setIdAsDisplayOnly(isIdAsDisplayOnly());
+ guiBuilder.setIdAsDisplayOnly(dynaForm.isIdAsDisplayOnly());
}
}
Modified: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/FieldInterface.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/FieldInterface.java?rev=592769&r1=592768&r2=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/FieldInterface.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/FieldInterface.java Wed Nov 7 06:55:22 2007
@@ -19,6 +19,7 @@
package org.apache.myfaces.orchestra.dynaForm.metadata;
import org.apache.myfaces.orchestra.dynaForm.guiBuilder.ComponentEnum;
+import org.apache.myfaces.orchestra.dynaForm.guiBuilder.DynaFormComponentHandler;
import org.apache.myfaces.orchestra.dynaForm.lib.SelectionSourceEnum;
import javax.faces.component.UIComponent;
@@ -91,4 +92,6 @@
public String getConverterId();
public Class getConverterClass();
+
+ public DynaFormComponentHandler getComponentHandler();
}
Modified: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/MetaData.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/MetaData.java?rev=592769&r1=592768&r2=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/MetaData.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/MetaData.java Wed Nov 7 06:55:22 2007
@@ -19,6 +19,7 @@
package org.apache.myfaces.orchestra.dynaForm.metadata;
import org.apache.myfaces.orchestra.dynaForm.guiBuilder.ComponentEnum;
+import org.apache.myfaces.orchestra.dynaForm.guiBuilder.DynaFormComponentHandler;
import org.apache.myfaces.orchestra.dynaForm.lib.SelectionSourceEnum;
import javax.faces.component.UIComponent;
@@ -73,6 +74,7 @@
private UIComponent wantedComponent;
private ComponentEnum wantedComponentType = ComponentEnum.Automatic;
+ private DynaFormComponentHandler componentHandler;
private String dataSource;
private String dataSourceDescription;
@@ -383,6 +385,16 @@
public void setConverterClass(Class converterClass)
{
this.converterClass = converterClass;
+ }
+
+ public DynaFormComponentHandler getComponentHandler()
+ {
+ return componentHandler;
+ }
+
+ public void setComponentHandler(DynaFormComponentHandler componentHandler)
+ {
+ this.componentHandler = componentHandler;
}
}
Modified: myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/impl/ejb/EjbExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/impl/ejb/EjbExtractor.java?rev=592769&r1=592768&r2=592769&view=diff
==============================================================================
--- myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/impl/ejb/EjbExtractor.java (original)
+++ myfaces/orchestra/trunk/core15/src/main/java/org/apache/myfaces/orchestra/dynaForm/metadata/impl/ejb/EjbExtractor.java Wed Nov 7 06:55:22 2007
@@ -19,6 +19,7 @@
package org.apache.myfaces.orchestra.dynaForm.metadata.impl.ejb;
import org.apache.commons.lang.StringUtils;
+import org.apache.myfaces.orchestra.dynaForm.annot.ui.ComponentHandler;
import org.apache.myfaces.orchestra.dynaForm.annot.ui.DataProvider;
import org.apache.myfaces.orchestra.dynaForm.annot.ui.DisplayOnly;
import org.apache.myfaces.orchestra.dynaForm.annot.ui.IgnoreProperty;
@@ -29,10 +30,12 @@
import org.apache.myfaces.orchestra.dynaForm.annot.ui.Range;
import org.apache.myfaces.orchestra.dynaForm.annot.ui.ReadOnly;
import org.apache.myfaces.orchestra.dynaForm.annot.ui.UIComponent;
+import org.apache.myfaces.orchestra.dynaForm.guiBuilder.DynaFormComponentHandler;
import org.apache.myfaces.orchestra.dynaForm.metadata.Extractor;
import org.apache.myfaces.orchestra.dynaForm.metadata.MetaData;
import org.apache.myfaces.orchestra.dynaForm.metadata.RelationType;
import org.apache.myfaces.orchestra.dynaForm.metadata.Selection;
+import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
import javax.persistence.Basic;
import javax.persistence.Column;
@@ -461,6 +464,23 @@
{
UIComponent component = accessibleObject.getAnnotation(UIComponent.class);
mdField.setWantedComponentType(component.type());
+ }
+
+ if (accessibleObject.isAnnotationPresent(ComponentHandler.class))
+ {
+ ComponentHandler componentHandler = accessibleObject.getAnnotation(ComponentHandler.class);
+ String componentHandlerBeanName = componentHandler.value();
+ Object componentHandlerBean = FrameworkAdapter.getCurrentInstance().getBean(componentHandlerBeanName);
+ if (componentHandlerBean == null)
+ {
+ throw new IllegalArgumentException("no component handler with bean name " + componentHandlerBeanName + " found.");
+ }
+ if (!(componentHandlerBean instanceof DynaFormComponentHandler))
+ {
+ throw new IllegalArgumentException("component handler with bean name " + componentHandlerBeanName + " doesn't implement the " + DynaFormComponentHandler.class.getName() + " interface.");
+ }
+
+ mdField.setComponentHandler((DynaFormComponentHandler) componentHandlerBean);
}
if (accessibleObject.isAnnotationPresent(Column.class))