You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/12/09 16:19:54 UTC

svn commit: r888829 - in /labs/magma/trunk/website-beansview: ./ src/main/java/org/apache/magma/website/htmlpieces/ src/main/resources/META-INF/ src/test/java/org/apache/magma/website/beansview/ src/test/java/org/apache/magma/website/beansview/stuff/ s...

Author: simoneg
Date: Wed Dec  9 15:19:51 2009
New Revision: 888829

URL: http://svn.apache.org/viewvc?rev=888829&view=rev
Log:
LABS-352: html pieces
Using test utilities

Added:
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/AbstractSelectionHtmlFormPiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BeanAwarePiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BooleanHtmlFormPiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/EnumHtmlFormPiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormAwarePiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormHtmlUtils.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/NodeAwarePiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/SelectionHtmlFormPiece.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/TextFieldHtmlFormPiece.java
    labs/magma/trunk/website-beansview/src/main/resources/META-INF/magma.default.properties
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person6.java
    labs/magma/trunk/website-beansview/src/test/resources/META-INF/messages.properties
Modified:
    labs/magma/trunk/website-beansview/pom.xml
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/AssertStringStructure.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/BeanFormProducerTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowBeanTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormBindingTest.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person4.java

Modified: labs/magma/trunk/website-beansview/pom.xml
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/pom.xml?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/pom.xml (original)
+++ labs/magma/trunk/website-beansview/pom.xml Wed Dec  9 15:19:51 2009
@@ -52,9 +52,9 @@
 			<version>0.0.3-SNAPSHOT</version>
 		</dependency>
 		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.4</version>
+			<groupId>org.apache.magma.tools</groupId>
+			<artifactId>magma-test-utilities</artifactId>
+			<version>0.0.3-SNAPSHOT</version>
 			<scope>test</scope>
 		</dependency>		
 	</dependencies>

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/AbstractSelectionHtmlFormPiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/AbstractSelectionHtmlFormPiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/AbstractSelectionHtmlFormPiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/AbstractSelectionHtmlFormPiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,101 @@
+package org.apache.magma.website.htmlpieces;
+
+import static org.apache.magma.website.htmlpieces.FormHtmlUtils.createNameAndId;
+
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.Converters;
+import org.apache.magma.database.Database;
+import org.apache.magma.i18n.Formatter;
+import org.apache.magma.i18n.Formatters;
+import org.apache.magma.validation.CompoundValidator;
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.website.beansview.SmartForm;
+
+public abstract class AbstractSelectionHtmlFormPiece<T> implements HtmlFormPiece<T>, PropertyAwareHtmlPiece, FormAwarePiece, NodeAwarePiece {
+
+		protected Class<? extends T> handledClass;
+
+		protected abstract List<?> findList();
+		
+		public String createFormInput(T value, String id) {
+			List<?> elements = findList();
+			if (elements != null && elements.size() > 0) {
+				return createDropDownField(elements, value, id);				
+				/*
+				if (elements.size() < 3) {
+					createRadioField(node, elements, out);
+				} else if (elements.size() < 100) {
+					createDropDownField(node, elements, out);				
+				} else {
+					// TODO
+					out.write("TODO .. too many to use drop down");
+				}
+				*/
+			} else {
+				return "<input type=\"hidden\" "+ createNameAndId(id) + "/>";			
+			}
+		}
+		
+		protected String createDropDownField(List<?> elements, T value, String id){
+			StringBuilder out = new StringBuilder();
+			out.append("<select");
+			out.append(createNameAndId(id));
+			out.append('>');
+			PropertyInfo property = this.getProperty();
+			Converter conv = null;
+			Formatter form = null; 
+			if (property == null) {
+				conv = Converters.getConverterFor(this.handledClass);
+				form = Formatters.getFormatterFor(this.handledClass);
+			}
+			if (property == null) {
+				if (conv == null) 
+					throw new MagmaException("Cannot find a converter for {0} while creating dropdown", this.handledClass);
+				if (form == null) 
+					throw new MagmaException("Cannot find a formatter for {0} while creating dropdown", this.handledClass);
+			}
+			String acval = property == null ? conv.to(value) : property.toString(value);
+			if (property != null) {
+				CompoundValidator<Object> val = property.getValidator();
+				if (val == null || (val.acceptsNulls() && !elements.contains(null))) {
+					createDropDownOption(out, null, property.toString(null), acval);			
+				}			
+			}
+			
+			for (Object object : elements) {
+				String objval = property == null ? conv.to(object) : property.toString(object);
+				String objlabel = property == null ? form.to(object) : property.toUser(object);
+				createDropDownOption(out, objlabel, objval, acval);			
+			}
+			out.append("</select>");
+			return out.toString();
+		}
+
+		protected void createDropDownOption(StringBuilder out, String label, String val, String acval) {
+			out.append("<option value=\"");
+			out.append(val);
+			out.append("\"");
+			if (acval != null && acval.equals(val)) {
+				out.append(" selected=\"selected\"");
+			}
+			out.append(">");
+			if (label != null) {
+				out.append(label);
+			} else {
+				out.append(new LocalizableString("None").toString());
+			}
+			out.append("</option>");
+		}
+		
+		
+
+		public void formHead(T value, String id) {
+		}
+
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BeanAwarePiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BeanAwarePiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BeanAwarePiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BeanAwarePiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,41 @@
+/*
+ * 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.magma.website.htmlpieces;
+
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.website.beansview.ShowBean;
+
+public interface BeanAwarePiece {
+
+	public Object getBean();
+	
+	public static aspect BeanAwarePieceImpl {		
+		public Object BeanAwarePiece.getBean() {
+			return null;
+		}
+	}
+	
+	public static aspect BeanAwarePieceWormHole {
+		Object around(ShowBean sb) : 
+			execution(public Object BeanAwarePiece+.getBean()) && 
+			cflow(execution(* ShowBean+.valueFor(Node)) && this(sb)) {
+			return sb.getBean();
+		}
+	}
+	
+	
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BooleanHtmlFormPiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BooleanHtmlFormPiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BooleanHtmlFormPiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/BooleanHtmlFormPiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,30 @@
+package org.apache.magma.website.htmlpieces;
+
+import org.apache.magma.view.tree.ViewUtils;
+
+public class BooleanHtmlFormPiece implements HtmlFormPiece<Boolean> {
+	
+	public String createFormInput(Boolean value, String id) {
+		StringBuilder out = new StringBuilder();
+		out.append("<input type=\"checkbox\"");
+		out.append(FormHtmlUtils.createNameAndId(id));
+		out.append(" value=\"true\"");
+		if (value != null && value.booleanValue()) {
+			out.append(" checked=\"checked\"");
+		}
+		out.append("/>");
+		return out.toString();
+	}
+
+	public HtmlFormPiece<Boolean> createInputFor(Class<? extends Boolean> clazz) {
+		return this;
+	}
+
+	public void formHead(Boolean value, String id) {
+	}
+
+	public boolean handles(Class<?> clazz) {
+		return clazz == Boolean.class || clazz == Boolean.TYPE;
+	}
+
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/EnumHtmlFormPiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/EnumHtmlFormPiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/EnumHtmlFormPiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/EnumHtmlFormPiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,36 @@
+package org.apache.magma.website.htmlpieces;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.beansview.SmartForm;
+
+public class EnumHtmlFormPiece extends AbstractSelectionHtmlFormPiece<Enum> {
+
+	protected List<?> elements = null;
+	
+	@Override
+	protected List<?> findList() {
+		if (elements == null) {
+			elements = new ArrayList<Object>(Arrays.asList(this.handledClass.getEnumConstants()));			
+		}
+		return elements;
+	}
+
+	public HtmlFormPiece<Enum> createInputFor(Class<? extends Enum> clazz) {
+		EnumHtmlFormPiece ret = new EnumHtmlFormPiece();
+		ret.handledClass = clazz;
+		return ret;
+	}
+
+	public boolean handles(Class<?> clazz) {
+		return clazz.isEnum();
+	}
+
+
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormAwarePiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormAwarePiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormAwarePiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormAwarePiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,47 @@
+/*
+ * 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.magma.website.htmlpieces;
+
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.beansview.SmartForm;
+
+public interface FormAwarePiece {
+
+	public SmartForm getForm();
+	
+	public static aspect FormAwarePieceImpl {
+		public SmartForm FormAwarePiece.getForm() {
+			return null;
+		}
+	}
+	
+	public static aspect FormAwarePieceWormHole {
+		SmartForm around(HtmlProducer prod) : 
+			execution(public SmartForm FormAwarePiece+.getForm()) && 
+			cflow(execution(* HtmlProducer.produce(..)) && this(prod)) {
+			
+			WebHandler h = prod.getCreatingHandler();
+			while (h != null) {
+				if (h instanceof SmartForm) return (SmartForm)h;
+				h = h.getCreatingHandler();
+			}	
+			return null;
+		}
+	}
+	
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormHtmlUtils.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormHtmlUtils.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormHtmlUtils.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/FormHtmlUtils.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,21 @@
+package org.apache.magma.website.htmlpieces;
+
+public class FormHtmlUtils {
+
+	public static String createNameAndId(String id) {
+		StringBuilder out = new StringBuilder();
+		out.append(" name=\"");
+		out.append(id);
+		out.append("\" id=\"");
+		// TODO this is for compatibility, see if it can be removed
+		// The problem is that two forms for the same bean will create the same ids
+		// as much as two forms for different beans having a property named the same way
+		id = id.substring(id.indexOf('.') + 1);
+		out.append(id);
+		out.append('\"');		
+		return out.toString();
+	}
+	
+
+	
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/NodeAwarePiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/NodeAwarePiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/NodeAwarePiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/NodeAwarePiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,35 @@
+package org.apache.magma.website.htmlpieces;
+
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.website.beansview.ShowBean;
+import org.apache.magma.website.beansview.ShowList;
+
+public interface NodeAwarePiece {
+
+	public Node getNode();
+	
+	public static aspect NodeAwarePieceImpl {		
+		public Node NodeAwarePiece.getNode() {
+			return null;
+		}
+	}
+	
+	public static aspect NodeAwarePieceWormHole {
+		Object around(Node n) : 
+			execution(public Object BeanAwarePiece+.getBean()) && 
+			cflow(execution(* ShowList+.contentFor(.., Node))) && args(..,n)
+			{
+			return n;
+		}
+		Object around(Node n) : 
+			execution(public Object BeanAwarePiece+.getBean()) && 
+			cflow(execution(* ShowBean+.valueFor(Node)) && args(n))
+			{
+			return n;
+		}
+	}
+	
+	
+}
+
+

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/SelectionHtmlFormPiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/SelectionHtmlFormPiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/SelectionHtmlFormPiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/SelectionHtmlFormPiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,69 @@
+package org.apache.magma.website.htmlpieces;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.Converters;
+import org.apache.magma.database.Database;
+import org.apache.magma.i18n.Formatter;
+import org.apache.magma.i18n.Formatters;
+import org.apache.magma.validation.CompoundValidator;
+import org.apache.magma.view.tree.FieldNode;
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.view.tree.ViewUtils;
+import org.apache.magma.website.beansview.SmartForm;
+
+import static org.apache.magma.website.htmlpieces.FormHtmlUtils.createNameAndId;
+
+public class SelectionHtmlFormPiece extends AbstractSelectionHtmlFormPiece<MagmaBeanSupport> {
+
+	protected List<?> findList() {
+		List<?> ret = null;
+		SmartForm form = this.getForm();
+		if (form != null) {
+			Node node = this.getNode();
+			if (node != null) {
+				ret = form.getList(node.getId());
+			}
+			if (ret == null) {
+				PropertyInfo property = this.getProperty();
+				if (property != null) {
+					ret = form.getList(property.getType());
+				} else {
+					ret = form.getList(this.handledClass);
+				}
+			}
+		}
+		if (ret == null) {
+			PropertyInfo property = this.getProperty();
+			if (property != null) {
+				ret = new Database().query(property.getType(), "");
+			} else {
+				ret = new Database().query(this.handledClass, "");
+			}			
+		}
+		return ret;
+	}
+	
+
+	public HtmlFormPiece<MagmaBeanSupport> createInputFor(Class<? extends MagmaBeanSupport> clazz) {
+		SelectionHtmlFormPiece ret = new SelectionHtmlFormPiece();
+		ret.handledClass = clazz;
+		return ret;
+	}
+
+	public void formHead(MagmaBeanSupport value, String id) {
+	}
+
+	public boolean handles(Class<?> clazz) {
+		return MagmaBeanSupport.class.isAssignableFrom(clazz);
+	}
+
+}

Added: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/TextFieldHtmlFormPiece.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/TextFieldHtmlFormPiece.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/TextFieldHtmlFormPiece.java (added)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/htmlpieces/TextFieldHtmlFormPiece.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,128 @@
+package org.apache.magma.website.htmlpieces;
+
+import java.util.Map;
+
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.i18n.Formatter;
+import org.apache.magma.i18n.Formatters;
+import org.apache.magma.view.tree.FieldNode;
+import org.apache.magma.view.tree.Node;
+import org.apache.magma.view.tree.ViewUtils;
+
+import static org.apache.magma.website.htmlpieces.FormHtmlUtils.createNameAndId;
+
+
+public class TextFieldHtmlFormPiece implements HtmlFormPiece<Object>, PropertyAwareHtmlPiece {
+
+	private Class<?> handledClass;
+	
+	protected static int MAX_FIELD_SIZE = 80;
+	
+	public String createFormInput(Object value, String id) {
+		PropertyInfo property = this.getProperty();
+		int maxSize = 50;
+		if (property != null) {
+			maxSize = property.getMaximumStringSize();
+		}
+		if (property.getViewSettings().isPassword()) {
+			return createPasswordField(value, id, maxSize);
+		} else {
+			if (maxSize < 256) {
+				return createSimpleTextField(value, id, maxSize);
+			} else {
+				return createTextAreaField(value, id, maxSize);			
+			}
+		}
+	}
+
+	protected String createPasswordField(Object value, String id, int maxSize) {
+		int size = maxSize;
+		if (size > MAX_FIELD_SIZE) size = 0;
+
+		StringBuilder out = new StringBuilder();
+		out.append("<input type=\"password\"");
+		out.append(createNameAndId(id));
+		if (size > 0) {
+			out.append(" size=\"");
+			out.append(Integer.toString(size));
+			out.append('\"');
+		}
+		if (maxSize > 0) {
+			out.append(" maxlength=\"");
+			out.append(Integer.toString(maxSize));			
+			out.append('\"');
+		}
+		out.append("/>");		
+		return out.toString();
+	}
+
+	protected String createTextAreaField(Object value, String id, int maxSize) {
+		int size = Math.min(MAX_FIELD_SIZE, maxSize);
+		if (size == 0) size = 80;
+		int rows = maxSize / size;
+		if (rows > 15) rows = 15;
+		StringBuilder out = new StringBuilder();
+		out.append("<textarea rows=\"");
+		out.append(Integer.toString(rows));
+		//out.append("\" cols=\"");
+		//out.append(Integer.toString(size));
+		out.append('\"');
+		out.append(createNameAndId(id));		
+		out.append('>');
+		PropertyInfo property = this.getProperty();
+		if (property != null) {
+			out.append(property.toUser(value));
+		} else {
+			Formatter formatter = Formatters.getFormatterFor(this.handledClass);
+			out.append(formatter.to(value));
+		}
+		out.append("</textarea>");		
+		return out.toString();
+	}
+
+	protected String createSimpleTextField(Object value, String id, int maxSize) {
+		int size = maxSize;
+		if (size > MAX_FIELD_SIZE) size = 0;
+
+		StringBuilder out = new StringBuilder();
+		out.append("<input type=\"text\"");
+		out.append(createNameAndId(id));
+		if (size > 0) {
+			out.append(" size=\"");
+			out.append(Integer.toString(size));
+			out.append('\"');
+		}
+		if (maxSize > 0) {
+			out.append(" maxlength=\"");
+			out.append(Integer.toString(maxSize));			
+			out.append('\"');
+		}
+		out.append(" value=\"");
+		PropertyInfo property = this.getProperty();
+		if (property != null) {
+			out.append(property.toUser(value));
+		} else {
+			Formatter formatter = Formatters.getFormatterFor(this.handledClass);
+			out.append(formatter.to(value));			
+		}
+		out.append("\"/>");		
+		return out.toString();
+	}
+	
+	
+	
+	public HtmlFormPiece<Object> createInputFor(Class<? extends Object> clazz) {
+		TextFieldHtmlFormPiece ret = new TextFieldHtmlFormPiece();
+		ret.handledClass = clazz;
+		return ret;
+	}
+	
+	public void formHead(Object value, String id) {
+	}
+
+	public boolean handles(Class<?> clazz) {
+		return true;
+	}
+
+}

Added: labs/magma/trunk/website-beansview/src/main/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/resources/META-INF/magma.default.properties?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/website-beansview/src/main/resources/META-INF/magma.default.properties Wed Dec  9 15:19:51 2009
@@ -0,0 +1,18 @@
+#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.
+org.apache.magma.website.htmlpieces.HtmlFormPiece.~boolean=org.apache.magma.website.htmlpieces.BooleanHtmlFormPiece
+org.apache.magma.website.htmlpieces.HtmlFormPiece.~bean=org.apache.magma.website.htmlpieces.SelectionHtmlFormPiece
+org.apache.magma.website.htmlpieces.HtmlFormPiece.~enum=org.apache.magma.website.htmlpieces.EnumHtmlFormPiece
+org.apache.magma.website.htmlpieces.HtmlFormPiece.~~default=org.apache.magma.website.htmlpieces.TextFieldHtmlFormPiece

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/AssertStringStructure.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/AssertStringStructure.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/AssertStringStructure.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/AssertStringStructure.java Wed Dec  9 15:19:51 2009
@@ -25,7 +25,7 @@
 		for (int i = 0; i < components.length; i++) {
 			int acp = actual.indexOf(components[i], lp);
 			if (acp == -1) {
-				throw new AssertionFailedError("Expecting \"" + components[i] + "\" (" + i + ") but not found in \"" + actual.substring(lp) + "\"");
+				throw new AssertionFailedError("Expecting \"" + components[i] + "\" (" + i + ") but not found in \"" + actual.substring(0,lp) + "***" + actual.substring(lp) + "\"");
 			}
 			lp = acp;
 		}

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/BeanFormProducerTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/BeanFormProducerTest.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/BeanFormProducerTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/BeanFormProducerTest.java Wed Dec  9 15:19:51 2009
@@ -16,25 +16,31 @@
  */
 package org.apache.magma.website.beansview;
 
+import static org.junit.Assert.*;
 import static org.junit.Assert.assertThat;
-import static org.junit.matchers.StringContains.containsString;
+import static org.apache.magma.website.beansview.AssertStringStructure.assertStructure;
+import static org.junit.matchers.JUnitMatchers.*;
 
 import java.io.ByteArrayOutputStream;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.magma.basics.LocalizableStringWithSubject;
 import org.apache.magma.basics.context.RunningContext;
 import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.i18n.CurrentLocale;
 import org.apache.magma.view.tree.FieldNode;
 import org.apache.magma.view.tree.LabelNode;
 import org.apache.magma.view.tree.Node;
 import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
 import org.apache.magma.website.beansview.stuff.Person;
 import org.apache.magma.website.beansview.stuff.Person2;
 import org.apache.magma.website.beansview.stuff.Person4;
 import org.apache.magma.website.beansview.stuff.Person5;
+import org.apache.magma.website.beansview.stuff.Person6;
 import org.apache.magma.website.context.WebMethodContextElement;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -42,7 +48,7 @@
 import org.junit.Test;
 
 
-public class BeanFormProducerTest {
+public class BeanFormProducerTest extends WebHandler {
 	
 	
 	@AfterClass
@@ -53,7 +59,7 @@
 	@Before
 	public void setupContext() throws Exception {
 		Method m = this.getClass().getMethod("doTesting");
-		WebMethodContextElement wce = new WebMethodContextElement(m, new Object[0], null);
+		WebMethodContextElement wce = new WebMethodContextElement(m, new Object[0], this);
 		RunningContext.get().push(wce);
 	}
 	
@@ -193,10 +199,68 @@
 			}
 		}
 		
+		assertStructure(result, "<textarea",">bla bla bla<", "</textarea>");
+	}
+	
+	@Test
+	public void listOnForm() throws Exception {
+		Person4 p = new Person4();
+		p.setName("Simone");
+		p.setSurname("Gianni");
+		p.setEmail("simoneg@apache.org");
+		
+		SmartForm sf = new SmartForm(p, "doPostList");
+		List<Person4> lp = new ArrayList<Person4>();
+		lp.add(new Person4("A", "B"));
+		lp.add(new Person4("A", "G"));
+		
+		sf.addList(Person4.class, lp);
+		BeanFormProducer sbp = (BeanFormProducer) sf.doShow();
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		sbp.produce(baos);
+		
+		String result = new String(baos.toByteArray());
+		System.out.println("----- lists -----");
+		System.out.println(result);
+		
+		assertStructure(result, "<form", "<select", "<option", "A B", "</option>","<option", "A G", "</option>", "</select>");
+	}
+	
+	@Test
+	public void listOfEnum() throws Exception {
+		Person6 p = new Person6();
+		p.setName("Simone");
+		p.setSurname("Gianni");
+		p.setLevel(Person6.LEVEL.INTERMEDIATE);
+
+		CurrentLocale.setLocale("en_US");
+		BeanFormProducer sbp = new BeanFormProducer(p, new ArrayList<LocalizableStringWithSubject>(), "ABC");
 		
-		assertThat(result, containsString("<textarea"));
-		assertThat(result, containsString("</textarea>"));
-		assertThat(result, containsString(">bla bla bla<"));
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		sbp.produce(baos);
+		
+		String result = new String(baos.toByteArray());
+		
+		assertStructure(result, 
+				"<form", 
+					"<select", 
+						"<option", "value=\"\"", "None", "</option>",
+						"<option", "ENTRY", "</option>", 
+						"<option", "selected=\"selected", "INTERMEDIATE", "</option>", 
+						"<option", "PROFESSIONAL", "</option>", 
+					"</select>", 
+					"<input" , "type=\"checkbox",
+					"<select", 
+						"<option", "value=\"\"", "AAAA", "</option>",
+					"</select>", 
+					"<select", 
+						"<option", "value=\"\"", "BBBB", "</option>",
+					"</select>"
+					);
+	}
+	
+	public HtmlProducer doPostList(Person4 p) {
+		return null;
 	}
 	
 }

Added: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java (added)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,78 @@
+package org.apache.magma.website.beansview;
+
+import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.*;
+
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableStringWithSubject;
+import org.apache.magma.basics.context.RunningContext;
+import org.apache.magma.settings.Settings;
+import org.apache.magma.website.beansview.stuff.Person;
+import org.junit.Test;
+import org.apache.magma.testing.NanoTimer;
+
+
+public class PerformanceTest {
+
+	@Test
+	public void showBeanPerformances() throws Exception {
+		Settings.setEnvironment("prod");
+		
+		Person p = new Person();
+		p.setName("Simone");
+		p.setSurname("Gianni");
+		p.setEmail("simoneg@apache.org");
+		
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		
+		NanoTimer nt = new NanoTimer();
+		for (int i = 0; i < 3000; i++) {
+			nt.start();
+			for (int k = 0; k < 10; k++) {
+				ShowBean sbp = new ShowBean(p);
+				sbp.produce(baos);
+			}
+			nt.stop(10);
+			RunningContext.cleanup();
+			baos.reset();
+			if (i == 100) nt = new NanoTimer();
+		}
+		System.out.println(nt.totals());
+		assertTrue("Poor performances", nt.totalIterationsPerSecond() > 2500d);		
+	}
+	
+	@Test
+	public void showFormPerformances() throws Exception {
+		Settings.setEnvironment("prod");
+		
+		Person p = new Person();
+		p.setName("Simone");
+		p.setSurname("Gianni");
+		p.setEmail("simoneg@apache.org");
+		
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		List<LocalizableStringWithSubject> errors = new ArrayList<LocalizableStringWithSubject>();
+		
+		NanoTimer nt = new NanoTimer();
+		for (int i = 0; i < 3000; i++) {
+			nt.start();
+			for (int k = 0; k < 10; k++) {
+				BeanFormProducer sbp = new BeanFormProducer(p, errors, "test");
+				sbp.produce(baos);
+			}
+			nt.stop(10);
+			RunningContext.cleanup();
+			baos.reset();
+			if (i == 100) nt = new NanoTimer();
+		}
+		System.out.println(nt.totals());
+		//assertTrue("Poor performances", nt.totalIterationsPerSecond() > 2500d);		
+	}
+	
+	
+	
+	
+}

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowBeanTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowBeanTest.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowBeanTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowBeanTest.java Wed Dec  9 15:19:51 2009
@@ -17,7 +17,7 @@
 package org.apache.magma.website.beansview;
 
 import static org.junit.Assert.*;
-import static org.junit.matchers.StringContains.*;
+import static org.junit.matchers.JUnitMatchers.*;
 import static org.apache.magma.website.beansview.AssertStringStructure.*;
 
 import java.io.ByteArrayOutputStream;

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java Wed Dec  9 15:19:51 2009
@@ -51,6 +51,26 @@
 	}
 
 	@Test
+	public void listUlTemplateTest() throws Exception {
+		ListStyleUl ltt = new ListStyleUl();
+		ltt.setMyclass(Person.class);
+		ltt.setRoot(BeanData.getFor(Person.class).getViewTree());
+		ltt.setWithLink(true);		
+		ltt.generate();
+		String template = ltt.getTemplate();
+		System.out.println(template);
+		/*
+		assertStructure(template, 
+				"<table", "ShowList", ".getSummary()", ".getCaption()", 
+				"<thead", "<tr" , "<th", ".labelFor(", "</thead",
+				"<tbody", "#foreach", "<tr", "#if", "$velocityCount",
+				"<td", "<a", "computeLinkURL", "computeLinkTitle", "contentFor",
+				"#end", "</table"
+				);
+				*/
+	}
+	
+	@Test
 	public void customCssClasses() throws Exception {
 		ListStyleTable ltt = new ListStyleTable();
 		ltt.setMyclass(Person.class);

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormBindingTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormBindingTest.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormBindingTest.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/SmartFormBindingTest.java Wed Dec  9 15:19:51 2009
@@ -27,7 +27,6 @@
 
 import org.hamcrest.core.IsNull;
 import org.junit.Test;
-import org.junit.matchers.IsCollectionContaining;
 
 import static org.junit.Assert.*;
 import static org.junit.matchers.JUnitMatchers.*;

Modified: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person4.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person4.java?rev=888829&r1=888828&r2=888829&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person4.java (original)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person4.java Wed Dec  9 15:19:51 2009
@@ -30,6 +30,14 @@
 	
 	private Person4 mother;
 	
+	public Person4(String name, String surname) {
+		this.name = name;
+		this.surname = surname;
+	}
+	
+	public Person4() {
+	}
+	
 	
 	@MagView(order=1)
 	public String getName() {
@@ -71,4 +79,8 @@
 	public void setMother(Person4 mother) {
 		this.mother = mother;
 	}
+	
+	public String toUser() {
+		return this.name + " " + this.surname;
+	}
 }

Added: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person6.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person6.java?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person6.java (added)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/Person6.java Wed Dec  9 15:19:51 2009
@@ -0,0 +1,87 @@
+/*
+ * 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.magma.website.beansview.stuff;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.view.MagView;
+import org.apache.magma.view.Side;
+
+@MagmaBean
+public class Person6 {
+
+	public enum LEVEL {
+		ENTRY,
+		INTERMEDIATE,
+		PROFESSIONAL
+	}
+	
+	private String name;
+	private String surname;
+	private LEVEL level;
+	private boolean approved;
+	
+	@MagView(order=1)
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	
+	@MagView(side=Side.OutsideRight, of="name")
+	public String getSurname() {
+		return surname;
+	}
+	public void setSurname(String surname) {
+		this.surname = surname;
+	}
+	
+	@MagView(order=2)
+	public LEVEL getLevel() {
+		return level;
+	}
+	public void setLevel(LEVEL level) {
+		this.level = level;
+	}
+	
+	@MagView(order=3)
+	public boolean isApproved() {
+		return approved;
+	}
+	public void setApproved(boolean approved) {
+		this.approved = approved;
+	}
+
+	@MagView(order=4)
+	public LEVEL getContextA() {
+		return level;
+	}
+	public void setContextA(LEVEL level) {
+		this.level = level;
+	}
+	
+	@MagView(order=5)
+	public LEVEL getContextB() {
+		return level;
+	}
+	public void setContextB(LEVEL level) {
+		this.level = level;
+	}
+	
+	
+}

Added: labs/magma/trunk/website-beansview/src/test/resources/META-INF/messages.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/resources/META-INF/messages.properties?rev=888829&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/resources/META-INF/messages.properties (added)
+++ labs/magma/trunk/website-beansview/src/test/resources/META-INF/messages.properties Wed Dec  9 15:19:51 2009
@@ -0,0 +1,2 @@
+contexta.none=AAAA
+contextb.none=BBBB
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org