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]

Reply via email to