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