Author: simoneg
Date: Wed Jan 20 17:54:18 2010
New Revision: 901307

URL: http://svn.apache.org/viewvc?rev=901307&view=rev
Log:
Better form action link rewriting, support for actions in smart list and in 
default cruds

Modified:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
    
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
    
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
    
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
    
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
    
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
    
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartForm.java
    
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
    
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
    
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/ShowListTest.java

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/LinkHelper.java
 Wed Jan 20 17:54:18 2010
@@ -8,6 +8,7 @@
 import java.util.List;
 
 import org.apache.magma.basics.MagmaException;
+import org.apache.magma.basics.startup.Cycle;
 import org.apache.magma.basics.utils.GenericClass;
 import org.apache.magma.basics.utils.GenericClass.MethodDef;
 import org.apache.magma.conversion.Converter;
@@ -37,6 +38,7 @@
        private String baseMethod;
        private Converter[] converters;
        private Class<?>[] paramTypes;
+       private WebHandler targetHandler;
        
        public LinkHelper(Method method) {
                this(method.getName(), method.getParameterTypes());
@@ -62,8 +64,27 @@
                
        }
        
+       public LinkHelper(WebHandler target, String methodName, Class<?>... 
parameters) {
+               this(methodName, parameters);
+               this.targetHandler = target;
+       }
+       
+       public LinkHelper(WebHandler target, MethodDef method) {
+               this(method);
+               this.targetHandler = target;
+       }
+
+       public LinkHelper(WebHandler target, Method method) {
+               this(method);
+               this.targetHandler = target;
+       }
+       
        public String makeLink(Object... params) {
                StringBuilder ret = new StringBuilder();
+               if (targetHandler != null) {
+                       ret.append("magma:");
+                       ret.append(targetHandler.getRelativePath());            
        
+               }
                ret.append(this.baseMethod);
                if (params != null) {
                        if (params.length > converters.length) throw new 
MagmaException("Incorrect number of parameters for link to {0}, expecting {1} 
got {2}", this.baseMethod, this.converters.length, params.length);
@@ -106,6 +127,21 @@
        }
        
        /**
+        * Check if links created by this instance will work against the target 
handler.
+        */
+       public void check() {
+               findMethod(targetHandler.getClass(), true);             
+       }
+
+       /**
+        * Check if links created by this instance will work against the target 
handler, without checking converters. 
+        */
+       public void checkNoConverter() {
+               findMethod(targetHandler.getClass(), false);            
+       }
+       
+       
+       /**
         * Searches for the method resulting from this link in the specified 
handler.
         * @param handlerClass A WebHandler to search in
         * @param withConversion If true also checks for converters

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/utils/MakeURLRewritingContextBased.aj
 Wed Jan 20 17:54:18 2010
@@ -20,11 +20,13 @@
 import org.apache.magma.basics.startup.CycleThreadLocal;
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
 
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
 import org.apache.magma.website.Head;
+import org.apache.magma.website.HandlerSetup;
 
 public aspect MakeURLRewritingContextBased {
 
@@ -35,6 +37,24 @@
                        execution(* HtmlProducer+.head(Head))
                ) && this(prod);
        
+       
+       before(WebHandler h) : HandlerSetup.subHandle(h) || 
HandlerSetup.doMethod(h) || HandlerSetup.hiddenMethod(h) {
+               URLRewritingStream stream = Cycle.get().getRewriting();
+               if (stream == null) return;
+               try {
+                       stream.pushBaseUrl(h.getRelativePath());
+               } catch (Throwable e) {
+                       return;
+               }               
+       }
+       
+       after(WebHandler h) : HandlerSetup.subHandle(h) || 
HandlerSetup.doMethod(h) || HandlerSetup.hiddenMethod(h) {
+               URLRewritingStream stream = Cycle.get().getRewriting();
+               if (stream == null) return;
+               stream.popBaseUrl();
+       }       
+       
+       
        before(Producer prod) : producing(prod) {
                URLRewritingStream stream = Cycle.get().getRewriting();
                if (stream == null) return;
@@ -71,4 +91,6 @@
                stream.popBaseUrl();
        }       
        
+       
+       
 }

Modified: 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
 (original)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractCrudHandler.java
 Wed Jan 20 17:54:18 2010
@@ -16,6 +16,8 @@
  */
 package org.apache.magma.website.admin;
 
+import java.util.Set;
+
 import org.apache.magma.basics.LocalizableString;
 import org.apache.magma.basics.MagmaException;
 import org.apache.magma.beans.MagmaBeanSupport;
@@ -28,6 +30,7 @@
 import org.apache.magma.website.beansview.SmartForm;
 import org.apache.magma.website.beansview.SmartList;
 import org.apache.magma.website.producers.StringHtmlProducer;
+import org.apache.magma.website.utils.LinkHelper;
 
 public class AbstractCrudHandler<T extends MagmaBeanSupport> extends 
WebHandler {
 
@@ -55,6 +58,7 @@
                        .setLink("doShow")
                        .setHeader(header)
                        .setElementsPerPage(listSize);
+               
                if (listLayers != null) {
                        ret.setLayers(listLayers);
                }
@@ -71,6 +75,7 @@
        
        protected HtmlProducer doDelete(T bean) {
                new Database().delete(bean);
+               redirect(LinkHelper.makeLink("handleList"));
                return handleList().do_default();
        }
        
@@ -92,6 +97,7 @@
        
        public HtmlProducer hiddenSave(T bean) {
                new Database().save(bean);
+               redirect(LinkHelper.makeLink("doShow", bean));
                return doShow(bean);
        }
        

Modified: 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
 (original)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
 Wed Jan 20 17:54:18 2010
@@ -46,7 +46,7 @@
                sl.compoundWith(
                                new StringHtmlProducer("<h1>" + new 
LocalizableString("List of {0}", 
property.getCollectionClass().getSimpleName()).toString() + "</h1>")
                                , CompoundType.HEAD);           
-               sl.addAction(new FormAction("Disconnect", "doDelete"));
+               sl.addAction(new FormAction(this, "Disconnect", "doDelete"));
                if (isOverridden(AbstractListCrud.class, "handleNew")) {
                        sl.compoundWith(handleNew().do_default(), 
CompoundType.AFTER);                  
                }

Modified: 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
 (original)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/CompleteCrudHandler.java
 Wed Jan 20 17:54:18 2010
@@ -21,6 +21,7 @@
 import org.apache.magma.website.Producer;
 import org.apache.magma.website.beansview.SmartForm;
 import org.apache.magma.website.beansview.SmartList;
+import org.apache.magma.website.beansview.FormAction;
 
 public class CompleteCrudHandler<T extends MagmaBeanSupport> extends 
AbstractCrudHandler<T> {
 
@@ -55,7 +56,11 @@
        
        @Override
        public SmartList handleList() {
-               return super.handleList();
+               SmartList ret = super.handleList();
+               ret.addAction(new FormAction(this, "Show", "doShow", true, 
false));
+               ret.addAction(new FormAction(this, "Edit", "handleEdit", true, 
false));
+               ret.addAction(new FormAction(this, "Delete", "doDelete", true, 
false));
+               return ret;
        }
        
        @Override

Modified: 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
 (original)
+++ 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/FormAction.java
 Wed Jan 20 17:54:18 2010
@@ -32,18 +32,20 @@
        private String method;
        private boolean parametrized = true;
        private boolean validate;
+       private WebHandler targetHandler = null;
        
        private LinkHelper linkHelper = null;
 
        
-       public FormAction(String label, String method) {
+       public FormAction(WebHandler handler, String label, String method) {
                this.label = label;
                this.method = method;
+               this.targetHandler = handler;
        }
        
        
-       public FormAction(String label, String method, boolean parametrized, 
boolean validate) {
-               this(label, method);
+       public FormAction(WebHandler handler, String label, String method, 
boolean parametrized, boolean validate) {
+               this(handler, label, method);
                this.parametrized = parametrized;
                this.validate = validate;
        }
@@ -80,9 +82,9 @@
        protected void createHelper(Class<?> beanClass) {
                if (linkHelper == null) {
                        if (this.parametrized && beanClass != null) {
-                               linkHelper = new LinkHelper(this.method, 
beanClass);
+                               linkHelper = new LinkHelper(this.targetHandler, 
this.method, beanClass);
                        } else {
-                               linkHelper = new LinkHelper(this.method);
+                               linkHelper = new LinkHelper(this.targetHandler, 
this.method);
                        }
                }               
        }
@@ -97,6 +99,15 @@
                linkHelper.checkAgainstNoConverter(against);
        }
        
+       public void check(Class<?> beanClass) {
+               createHelper(beanClass);
+               linkHelper.check();             
+       }
+       public void checkNoConverter(Class<?> beanClass) {
+               createHelper(beanClass);
+               linkHelper.checkNoConverter();          
+       }
+       
        public Method getMethod(Class<? extends WebHandler> on, 
MagmaBeanSupport bean) {
                createHelper(bean.getClass());
                return linkHelper.findMethod(on, false);

Modified: 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
 (original)
+++ 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTableWithSorting.java
 Wed Jan 20 17:54:18 2010
@@ -11,6 +11,7 @@
        @Override
        protected void openHeaderCell(FieldNode fldn) {
                super.openHeaderCell(fldn);
+               if (fldn == null) return;
                buff.append("\n#set( $hasSortLink = $list.isSortable('");
                buff.append(fldn.getId());
                buff.append("') )\n");
@@ -23,22 +24,24 @@
        
        @Override
        protected void closeHeaderCell(FieldNode fldn) {
-               buff.append("\n#if( $list.isSorted('");
-               buff.append(fldn.getId());
-               buff.append("'))\n");
-               buff.append("\n#if ($list.desc)\n");
-               buff.append("<img src=\"sortDesc.png\" alt=\"");
-               buff.append(new LocalizableString("Sorted").toString());
-               buff.append("\"/>");
-               buff.append("\n#else\n");
-               buff.append("<img src=\"sortAsc.png\" alt=\"");
-               buff.append(new LocalizableString("Sorted").toString());
-               buff.append("\"/>");            
-               buff.append("\n#end\n");
-               buff.append("\n#if( $hasSortLink )\n");
-               buff.append("</a>");
-               buff.append("\n#end\n");
-               buff.append("\n#end\n");
+               if (fldn != null) {
+                       buff.append("\n#if( $list.isSorted('");
+                       buff.append(fldn.getId());
+                       buff.append("'))\n");
+                       buff.append("\n#if ($list.desc)\n");
+                       buff.append("<img src=\"sortDesc.png\" alt=\"");
+                       buff.append(new LocalizableString("Sorted").toString());
+                       buff.append("\"/>");
+                       buff.append("\n#else\n");
+                       buff.append("<img src=\"sortAsc.png\" alt=\"");
+                       buff.append(new LocalizableString("Sorted").toString());
+                       buff.append("\"/>");            
+                       buff.append("\n#end\n");
+                       buff.append("\n#if( $hasSortLink )\n");
+                       buff.append("</a>");
+                       buff.append("\n#end\n");
+                       buff.append("\n#end\n");
+               }
                super.closeHeaderCell(fldn);
        }
                

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=901307&r1=901306&r2=901307&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 Jan 20 17:54:18 2010
@@ -78,8 +78,8 @@
        
        public SmartForm(Object bean, String next) {
                this.bean = (MagmaBeanSupport) bean;
-               actions.add(new FormAction("Send", next, true, true));
-               defaultAction = new FormAction("Send", next, true, true);
+               actions.add(new FormAction(getCreatingHandler(), "Send", next, 
true, true));
+               defaultAction = new FormAction(getCreatingHandler(), "Send", 
next, true, true);
        }
 
        public SmartForm(Object bean, String next, HtmlProducer header) {

Modified: 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
 (original)
+++ 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartList.java
 Wed Jan 20 17:54:18 2010
@@ -17,6 +17,7 @@
 package org.apache.magma.website.beansview;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -59,6 +60,7 @@
        
        private Set<String> sortables = null;
        private boolean withFilter = false;
+       protected List<FormAction> actions = null;      
        
        private HtmlProducer prodHeader = null;
        private HtmlProducer prodFooter = null;
@@ -219,11 +221,13 @@
                producer.setListStyle(listStyle);
                producer.setLayers(layers);
                producer.setLink(this.link);
+               producer.setActions(this.actions);
                producer.setReferringHandler(getCreatingHandler());
                producer.setElementCssClass(elementCssClass);
                producer.setIntermediateCssClass(intermediateCssClass);
                producer.setOuterCssClass(outerCssClass);
                
+               
                producer.compoundWith(prodHeader, CompoundType.HEAD);
                if (withFilter && this.sessionReservedQbe != null) {
                        producer.compoundWith(handleFilter().do_default(), 
CompoundType.BEFORE);
@@ -407,4 +411,11 @@
                return this;
        }
        
+       public SmartList addAction(FormAction action) {
+               if (this.actions == null) this.actions = new 
ArrayList<FormAction>();
+               this.actions.add(action);
+               return this;
+       }
+
+       
 }

Modified: 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java?rev=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
 (original)
+++ 
labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/SmartListProducer.java
 Wed Jan 20 17:54:18 2010
@@ -261,6 +261,10 @@
                this.link = link;
        }
        
+       public void setActions(List<FormAction> actions) {
+               this.actions = actions;
+       }
+       
        @Override
        public String computeLinkURL(MagmaBeanSupport bean, String nodeid) {
                // TODO this is ugly

Modified: 
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=901307&r1=901306&r2=901307&view=diff
==============================================================================
--- 
labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
 (original)
+++ 
labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/PerformanceTest.java
 Wed Jan 20 17:54:18 2010
@@ -20,6 +20,10 @@
        @Test
        public void showBeanPerformances() throws Exception {
                Settings.setEnvironment("prod");
+               System.gc();
+               Thread.sleep(1000);
+               System.gc();
+               System.gc();
                
                Person p = new Person();
                p.setName("Simone");
@@ -47,6 +51,10 @@
        @Test
        public void showFormPerformances() throws Exception {
                Settings.setEnvironment("prod");
+               System.gc();
+               Thread.sleep(1000);
+               System.gc();
+               System.gc();
                
                Person p = new Person();
                p.setName("Simone");

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=901307&r1=901306&r2=901307&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 Jan 20 17:54:18 2010
@@ -152,8 +152,8 @@
                
                ShowList sbp = new ShowList(Person.class, lst);
                sbp.referringHandler = this;
-               sbp.addAction(new FormAction("Delete", "doDelete"));
-               sbp.addAction(new FormAction("Promote", "doPromote"));
+               sbp.addAction(new FormAction(this, "Delete", "doDelete"));
+               sbp.addAction(new FormAction(this, "Promote", "doPromote"));
                
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                sbp.produce(baos);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to