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("[email protected]");
+               
+               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("[email protected]");
+               
+               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("[email protected]");
+               
+               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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to