Author: simoneg
Date: Wed Dec 9 15:10:04 2009
New Revision: 888827
URL: http://svn.apache.org/viewvc?rev=888827&view=rev
Log:
LABS-352: html pieces
Using test utilities
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/Contextualizer.aj
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyle.java
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowBean.java
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/BeanFormProducer.java
Wed Dec 9 15:10:04 2009
@@ -30,6 +30,7 @@
import org.apache.magma.view.tree.Node;
import org.apache.magma.view.tree.PropertyNode;
import org.apache.magma.view.tree.ViewUtils;
+import org.apache.magma.website.htmlpieces.HtmlFormPiece;
import java.io.IOException;
import java.io.OutputStream;
@@ -51,7 +52,6 @@
protected List<LocalizableStringWithSubject> errors;
protected List<LocalizableString> sentErrors = new
ArrayList<LocalizableString>();
protected String code;
- protected Map<String, List<?>> lists = new HashMap<String, List<?>>();
protected BeanHandler handler;
protected List<FormAction> actions;
@@ -73,7 +73,7 @@
beanStyle = new BeanStyleTable();
}
beanStyle.setWithCustomClasses(true);
- out.write("<form name=\"form" + this.code + "\"
action=\"filled\" method=\"post\" accept-charset=\"utf-8\"><div>");
+ out.write("<form name=\"form" + this.code + "\"
action=\"filled\" method=\"post\" enctype=\"multipart/form-data\"
accept-charset=\"utf-8\"><div>");
out.write("<input type=\"submit\"
class=\"DefaultHiddenSubmit\" value=\"-\"/>");
out.flush();
super.produce(out);
@@ -195,258 +195,12 @@
PropertyInfo property = node.getProperty();
if (!property.isWriteable()) {
return super.valueFor(gennode);
- } else {
- if (property.getType().isEnum() ||
MagmaBeanSupport.class.isAssignableFrom(property.getType())) {
- return createSelectionListField(node);
- } else if (property.getType().equals(Boolean.class) ||
property.getType().equals(Boolean.TYPE)) {
- return createBooleanField(node);
- } else {
- return createTextField(node);
- }
}
-
- }
-
-
- protected String createSelectionListField(FieldNode node) {
- PropertyInfo property = node.getProperty();
- List<?> elements = this.lists .get(node.getId());
- if (elements == null) {
- elements = this.lists.get(property.getType().getName());
- }
- if (elements == null) {
- if (property.getType().isEnum()) {
- elements = new
ArrayList<Object>(Arrays.asList(property.getType().getEnumConstants()));
- } else {
- elements = new
Database().query(property.getType(), "");
- }
- }
- if (elements != null && elements.size() > 0) {
- return createDropDownField(node, elements);
- /*
- 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(node)
+ "/>";
- }
- }
-
- protected String createNameAndId(Node node, String addToId) {
- StringBuilder out = new StringBuilder();
- out.append(" name=\"");
- out.append(code);
- out.append(".");
- out.append(node.getId());
- out.append("\" id=\"");
- out.append(getId(node, addToId));
- out.append('\"');
- return out.toString();
- }
-
- protected String createNameAndId(Node node) {
- return createNameAndId(node, null);
+ HtmlFormPiece piece = property.getHtmlFormPiece();
+ Object value = ViewUtils.getNodeValue(node, bean);
+ return piece.createFormInput(value, this.code + "." +
node.getId());
}
- protected String getId(Node node, String addToId) {
- return node.getId() + (addToId != null ? "-" + addToId : "");
- }
-
- protected String createRadioField(FieldNode node, List<?> elements) {
- PropertyInfo property = node.getProperty();
- int i = 0;
- StringBuilder out = new StringBuilder();
- CompoundValidator<Object> val = property.getValidator();
- if ((val == null || (val != null && val.acceptsNulls())) &&
!elements.contains(null)) {
- createRadioButton(node, out, i++, null);
- }
- for (Object object : elements) {
- createRadioButton(node, out, i++, object);
- }
- return out.toString();
- }
-
- protected void createRadioButton(FieldNode node, StringBuilder out, int
i, Object object) {
- String val = node.getProperty().toString(object);
- out.append("<input type=\"radio\"");
- out.append(createNameAndId(node, Integer.toString(i)));
- out.append(" value=\"");
- out.append(val);
- out.append("\"");
- MagmaBeanSupport subbean = ViewUtils.findProperBean(node, bean,
false);
- if (subbean != null) {
- String acval =
subbean.handler().getStringValue(node.getProperty().getName());
- if (acval != null && acval.equals(val)) {
- out.append(" checked=\"checked\"");
- }
- }
- out.append("/>");
- out.append("<label for=\"");
- out.append(getId(node, Integer.toString(i)));
- out.append("\">");
- if (object != null) {
- out.append(node.getProperty().toUser(object));
- } else {
- out.append(new LocalizableString("None").toString());
- }
- out.append("</label>");
- }
-
- protected String createDropDownField(FieldNode node, List<?> elements){
- StringBuilder out = new StringBuilder();
- out.append("<select");
- out.append(createNameAndId(node));
- out.append('>');
- PropertyInfo property = node.getProperty();
- CompoundValidator<Object> val = property.getValidator();
- if (!elements.contains(null)) {
- createDropDownOption(node, out, null);
- }
- for (Object object : elements) {
- createDropDownOption(node, out, object);
- }
- out.append("</select>");
- return out.toString();
- }
-
- protected void createDropDownOption(FieldNode node, StringBuilder out,
Object object) {
- String val = node.getProperty().toString(object);
- out.append("<option value=\"");
- out.append(val);
- out.append("\"");
- MagmaBeanSupport subbean = ViewUtils.findProperBean(node, bean,
false);
- if (subbean != null) {
- String acval =
subbean.handler().getStringValue(node.getProperty().getName());
- if (acval != null && acval.equals(val)) {
- out.append(" selected=\"selected\"");
- }
- }
- out.append(">");
- if (object != null) {
- out.append(node.getProperty().toUser(object));
- } else {
- out.append(new LocalizableString("None").toString());
- }
- out.append("</option>");
- }
-
-
- protected String createBooleanField(FieldNode node) {
- StringBuilder out = new StringBuilder();
- out.append("<input type=\"checkbox\"");
- out.append(createNameAndId(node));
- out.append(" value=\"true\"");
- Boolean bool = (Boolean) ViewUtils.getNodeValue(node, bean);
- if (bool != null && bool.booleanValue()) {
- out.append(" checked=\"checked\"");
- }
- out.append("/>");
- return out.toString();
- }
-
-
- protected String createTextField(FieldNode node) {
- PropertyInfo property = node.getProperty();
- int maxSize = findInputMaxSize(property);
- if (property.getViewSettings().isPassword()) {
- return createPasswordField(node);
- } else {
- if (maxSize < 256) {
- return createSimpleTextField(node);
- } else {
- return createTextAreaField(node);
- }
- }
- }
-
- protected String createPasswordField(FieldNode node) {
- PropertyInfo property = node.getProperty();
- int maxSize = findInputMaxSize(property);
- int size = maxSize;
- if (size > MAX_FIELD_SIZE) size = 0;
-
- StringBuilder out = new StringBuilder();
- out.append("<input type=\"password\"");
- out.append(createNameAndId(node));
- 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(FieldNode node) {
- PropertyInfo property = node.getProperty();
- int maxSize = findInputMaxSize(property);
- 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(node));
- out.append('>');
- MagmaBeanSupport subbean = ViewUtils.findProperBean(node, bean,
false);
- if (subbean != null) {
- String val =
subbean.handler().getFormattedStringValue(property.getName());
- out.append(val == null ? "" : val);
- }
- out.append("</textarea>");
- return out.toString();
- }
-
- protected String createSimpleTextField(FieldNode node) {
- PropertyInfo property = node.getProperty();
- int maxSize = findInputMaxSize(property);
- int size = maxSize;
- if (size > MAX_FIELD_SIZE) size = 0;
-
- StringBuilder out = new StringBuilder();
- out.append("<input type=\"text\"");
- out.append(createNameAndId(node));
- 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=\"");
- MagmaBeanSupport subbean = ViewUtils.findProperBean(node, bean,
false);
- if (subbean != null) {
- String val =
subbean.handler().getFormattedStringValue(property.getName());
- out.append(val == null ? "" : val);
- }
- out.append("\"/>");
- return out.toString();
- }
-
- public int findInputMaxSize(PropertyInfo property) {
- return property.getMaximumStringSize();
- }
-
@Override
protected String classesFor(Node gennode) {
String ret = super.classesFor(gennode);
@@ -460,12 +214,7 @@
}
return ret;
}
-
- public void setLists(Map<String, List<?>> lists) {
- this.lists = lists;
- }
-
/*
@Override
protected void createLabelNodeOutput(LabelNode node, Writer out) throws
IOException {
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/Contextualizer.aj
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/Contextualizer.aj?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/Contextualizer.aj
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/Contextualizer.aj
Wed Dec 9 15:10:04 2009
@@ -37,25 +37,25 @@
}
}
- void around() : (
- execution(void ShowBean+.create*(Node+,..)) ||
- execution(void ListStyle+.create*(Node+,..))
- ) {
+ Object around() : (
+ execution(void BeanStyle+.*(Node+,..)) ||
+ execution(void ListStyle+.*(Node+,..)) ||
+ execution(protected String ShowBean+.*For(Node+)) ||
+ execution(protected String ShowList+.*For(Node+,..))
+ ) {
Object[] args = thisJoinPoint.getArgs();
if (args == null || args.length == 0) {
- proceed();
- return;
+ return proceed();
}
if (!(args[0] instanceof PropertyNode)) {
- proceed();
- return;
+ return proceed();
}
PropertyNode node = (PropertyNode)args[0];
SubRunningContext current = RunningContext.get();
PropertyInfo property = node.getProperty();
current.push(property.getName());
try {
- proceed();
+ return proceed();
} finally {
current.popString();
}
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyle.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyle.java?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyle.java
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyle.java
Wed Dec 9 15:10:04 2009
@@ -182,13 +182,13 @@
* @param fldn may be null, for the last additional column
*/
protected void createFieldNodeCellContent(FieldNode fldn) {
- buff.append("${list.contentFor($row,'");
+ buff.append("${list.contentFor('");
if (fldn != null) {
buff.append(fldn.getId());
} else {
buff.append("_additionals");
}
- buff.append("')}");
+ buff.append("', $row)}");
}
protected void closeLink(FieldNode fldn) {
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowBean.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowBean.java?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowBean.java
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowBean.java
Wed Dec 9 15:10:04 2009
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import java.util.regex.Matcher;
import org.apache.commons.lang.StringEscapeUtils;
@@ -39,11 +40,13 @@
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.view.tree.PropertyNode;
import org.apache.magma.view.tree.RootNode;
import org.apache.magma.view.tree.ViewUtils;
import org.apache.magma.view.tree.Zone;
import org.apache.magma.website.Head;
import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.htmlpieces.HtmlOutputPiece;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
@@ -124,6 +127,16 @@
@Override
public void head(Head head) {
head.addCss("magma:/common/beansview/magmaBeansview.css");
+ root = bean.beanData().getViewTree(this.layers);
+ Set<Node> nodes = root.getAllNodes();
+ for (Node node : nodes) {
+ if (node instanceof FieldNode) {
+ FieldNode propnode = (FieldNode) node;
+ HtmlOutputPiece piece =
propnode.getProperty().getHtmlOutputPiece();
+ Object value = ViewUtils.getNodeValue(propnode,
bean);
+ piece.head(value, head);
+ }
+ }
}
public String[] getLayers() {
return layers;
@@ -141,9 +154,11 @@
if (!(gennode instanceof FieldNode)) return "NA";
FieldNode node = (FieldNode) gennode;
- // TODO move this part to PropertyInfo?
Object value = ViewUtils.getNodeValue(node, bean);
PropertyInfo prop = node.getProperty();
+ HtmlOutputPiece piece = prop.getHtmlOutputPiece();
+ return piece.output(value);
+ /*
String valueString = prop.toUser(value);
if (valueString != null && valueString.length() > 0) {
valueString = valueString.trim();
@@ -153,6 +168,7 @@
return valueString;
}
return "";
+ */
}
public final String labelFor(String nodeid) {
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
Wed Dec 9 15:10:04 2009
@@ -35,6 +35,7 @@
import org.apache.magma.website.Head;
import org.apache.magma.website.HtmlProducer;
import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.htmlpieces.HtmlOutputPiece;
import org.apache.magma.website.utils.LinkHelper;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
@@ -227,13 +228,13 @@
return new
LocalizableString(node.getProperty().getViewSettings().getLabel()).toString();
}
- public final String contentFor(MagmaBeanSupport bean, String nodeid) {
+ public final String contentFor(String nodeid, MagmaBeanSupport bean) {
if (nodeid.equals("_additionals")) {
return contentForAdditionals(bean);
}
RootNode root =
BeanData.getFor(myclass).getViewTree(this.layers);
Node gennode = root.findById(nodeid);
- return contentFor(bean, gennode);
+ return contentFor(gennode, bean);
}
protected String contentForAdditionals(MagmaBeanSupport bean) {
@@ -252,13 +253,16 @@
}
- protected String contentFor(MagmaBeanSupport bean, Node gennode) {
+ protected String contentFor(Node gennode, MagmaBeanSupport bean) {
if (!(gennode instanceof FieldNode)) return "NA";
FieldNode node = (FieldNode) gennode;
// TODO move this part to PropertyInfo?
Object value = ViewUtils.getNodeValue(node, bean);
PropertyInfo prop = node.getProperty();
+ HtmlOutputPiece piece = prop.getHtmlOutputPiece();
+ return piece.output(value);
+ /*
String valueString = prop.toUser(value);
if (valueString != null && valueString.length() > 0) {
valueString = valueString.trim();
@@ -268,6 +272,7 @@
return valueString;
}
return "";
+ */
}
public Collection<?> getList() {
Modified:
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java?rev=888827&r1=888826&r2=888827&view=diff
==============================================================================
---
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
(original)
+++
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
Wed Dec 9 15:10:04 2009
@@ -32,6 +32,8 @@
import org.apache.magma.website.CompoundType;
import org.apache.magma.website.HtmlProducer;
import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.htmlpieces.HtmlFormPiece;
+import org.apache.magma.website.htmlpieces.ParsingHtmlFormPiece;
import org.apache.magma.website.producers.ParametrizableProducer;
import java.lang.reflect.Method;
@@ -98,11 +100,12 @@
Set<Entry<String, String[]>> entrySet = allParams.entrySet();
for (Map.Entry<String, String[]> entry : entrySet) {
if (entry.getKey().startsWith(mycode)) {
- if (entry.getValue()[0].length() == 0) {
+ String val = entry.getValue()[0];
+ if (val == null || val.length() == 0) {
binding.put(entry.getKey().substring(mycodeLen + 1), null);
} else {
// TODO here we can bind multiple
parameters (lists etc)
-
binding.put(entry.getKey().substring(mycodeLen + 1), entry.getValue()[0]);
+
binding.put(entry.getKey().substring(mycodeLen + 1), val);
}
}
}
@@ -129,7 +132,6 @@
parametrize(prodFooter);
BeanFormProducer producer = new BeanFormProducer(this.bean,
errors, getMyCode(), this.layers);
producer.setActions(this.actions);
- producer.setLists(this.lists);
producer.setBeanStyle(this.beanStyle);
producer.setOuterCssClass(outerCssClass);
producer.setElementCssClass(elementCssClass);
@@ -220,11 +222,18 @@
String val = binding.get(node.getId());
PropertyInfo property = ((FieldNode)node).getProperty();
if (property.isWriteable()) {
+ HtmlFormPiece piece = property.getHtmlFormPiece();
String name = property.getName();
- if (val == null) {
- h.setStringValue(name, null);
+ if (piece instanceof ParsingHtmlFormPiece) {
+ Object preval = h.getValue(name);
+ Object nval =
((ParsingHtmlFormPiece)piece).parse(binding, node.getId(), preval);
+ h.setValue(name, nval);
} else {
- h.setFormattedStringValue(name, val);
+ if (val == null) {
+ h.setStringValue(name, null);
+ } else {
+ h.setFormattedStringValue(name, val);
+ }
}
}
}
@@ -277,6 +286,14 @@
this.lists.put(field, list);
return this;
}
+
+ public <T> List<T> getList(Class<T> clazz) {
+ return (List<T>) this.lists.get(clazz.getName());
+ }
+
+ public List<?> getList(String field) {
+ return this.lists.get(field);
+ }
public MagmaBeanSupport getBean() {
return bean;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]