Author: simoneg
Date: Tue Nov 17 17:04:32 2009
New Revision: 881377

URL: http://svn.apache.org/viewvc?rev=881377&view=rev
Log:
LABS-155: basic list cruds

Added:
    
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/ListCrudWithAddition.java
    
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithSelection.java

Added: 
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=881377&view=auto
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
 (added)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/AbstractListCrud.java
 Tue Nov 17 17:04:32 2009
@@ -0,0 +1,85 @@
+package org.apache.magma.website.admin;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+
+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.database.Database;
+import org.apache.magma.website.CompoundType;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.WebHandler;
+import org.apache.magma.website.beansview.FormAction;
+import org.apache.magma.website.beansview.ShowBean;
+import org.apache.magma.website.beansview.ShowList;
+import org.apache.magma.website.beansview.SmartForm;
+import org.apache.magma.website.producers.StringHtmlProducer;
+
+public abstract class AbstractListCrud<SubBean extends MagmaBeanSupport> 
extends WebHandler {
+       
+       protected MagmaBeanSupport bean;
+       protected String propertyName;
+       
+       protected PropertyInfo property;
+       
+       public AbstractListCrud(MagmaBeanSupport bean, String propertyName) {
+               if (bean == null) throw new MagmaException("Cannot create a 
crud list on a null bean");
+               this.bean = bean;
+               this.propertyName = propertyName;
+               property = bean.beanData().getProperty(propertyName);
+               if (property == null) throw new MagmaException("Cannot find 
property {0} in bean {1}", propertyName, bean.getClass());
+               if (!property.isCollection()) throw new MagmaException("Cannot 
create a crud list on property {0},{1} cause it is not a collection", 
bean.getClass(), propertyName);
+       }
+       
+       public HtmlProducer do_default() {
+               return doShow();
+       }
+       
+       public HtmlProducer doShow() {          
+               String listlink = null;
+               if (isOverridden(AbstractListCrud.class, "doShowSub", 
property.getCollectionClass())) {
+                       listlink = "doShowSub";
+               }
+               ShowList sl = new ShowList(property.getCollectionClass(), 
(Collection)bean.handler().getValue(propertyName), listlink);
+               sl.addAction(new FormAction("Delete", "doDelete"));
+               sl.compoundWith(handleNew().do_default(), CompoundType.AFTER);
+               if (isOverridden(AbstractListCrud.class, "doNewSub")) {
+                       sl.compoundWith(new StringHtmlProducer("<a 
href=\"newSub\">" + new LocalizableString("Add new {0}", 
property.getCollectionClass().getSimpleName()) + "</a>"), CompoundType.AFTER);
+               }
+               return sl;
+       }
+       
+       public HtmlProducer doShowSub(SubBean bean) {
+               return new ShowBean(bean);
+       }
+       
+       public HtmlProducer doNewSub() {
+               return null;
+       }
+       
+       public HtmlProducer doDelete(SubBean subelement) {
+               Collection<SubBean> coll = (Collection<SubBean>) 
bean.handler().getValue(propertyName);
+               coll.remove(subelement);
+               new Database().save(bean);
+               return doShow();
+       }
+       
+       public abstract SmartForm handleNew();
+
+       
+       protected boolean isOverridden(Class<?> me, String methodName, 
Class<?>... params) {
+               Class<?> realclass = getClass();
+               Method m = null;
+               try {
+                       m = realclass.getMethod(methodName, params);
+               } catch (Exception e) {
+                       return false;
+               }
+               if (m == null) return false;
+               Class<?> decin = m.getDeclaringClass();
+               if (decin.equals(me)) return false;
+               return me.isAssignableFrom(decin);
+       }
+}

Added: 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithAddition.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithAddition.java?rev=881377&view=auto
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithAddition.java
 (added)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithAddition.java
 Tue Nov 17 17:04:32 2009
@@ -0,0 +1,44 @@
+package org.apache.magma.website.admin;
+
+import java.util.Collection;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.database.Database;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.beansview.SmartForm;
+
+public abstract class 
+       ListCrudWithAddition<SubBean extends MagmaBeanSupport> 
+       extends AbstractListCrud<SubBean> {
+
+       protected Class<? extends SubBean> subElementClass;
+       
+       public ListCrudWithAddition(MagmaBeanSupport bean, String propertyName) 
{
+               super(bean, propertyName);
+               subElementClass = property.getCollectionClass();
+       }
+       
+       public SmartForm handleNew() {
+               MagmaBeanSupport subelement = createNewSubelement();
+               return new SmartForm(subelement, "hiddenAdd");
+       }
+
+       protected SubBean createNewSubelement() {
+               try {
+                       return subElementClass.newInstance();
+               } catch (InstantiationException e) {
+                       throw new MagmaException(e, "Cannot instantiate a {0}", 
subElementClass);
+               } catch (IllegalAccessException e) {
+                       throw new MagmaException(e, "Cannot instantiate a {0}", 
subElementClass);
+               }
+       }
+       
+       public HtmlProducer hiddenAdd(SubBean subelement) {
+               Collection<SubBean> coll = (Collection<SubBean>) 
bean.handler().getValue(propertyName);
+               coll.add(subelement);
+               new Database().save(bean);
+               return doShow();
+       }
+               
+}

Added: 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithSelection.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithSelection.java?rev=881377&view=auto
==============================================================================
--- 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithSelection.java
 (added)
+++ 
labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin/ListCrudWithSelection.java
 Tue Nov 17 17:04:32 2009
@@ -0,0 +1,60 @@
+package org.apache.magma.website.admin;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.database.Database;
+import org.apache.magma.validation.validators.Required;
+import org.apache.magma.view.MagView;
+import org.apache.magma.website.HtmlProducer;
+import org.apache.magma.website.beansview.SmartForm;
+
+public abstract class 
+       ListCrudWithSelection<SubBean extends MagmaBeanSupport> 
+       extends AbstractListCrud<SubBean> {
+       
+       public ListCrudWithSelection(MagmaBeanSupport bean, String 
propertyName) {
+               super(bean, propertyName);
+       }
+       
+       public SmartForm handleNew() {
+               ListCrudElementHolder<SubBean> eh = createElementHolder();
+               SmartForm sf = new SmartForm(eh, "hiddenAdd");
+               if (isOverridden(ListCrudWithSelection.class, 
"getElementList")) {
+                       sf.addList("element", getElementsList());               
        
+               }
+               return sf;
+       }
+       
+       public List<SubBean> getElementsList() {
+               return null;
+       }
+
+       protected abstract ListCrudElementHolder<SubBean> createElementHolder();
+       
+       public HtmlProducer hiddenAdd(ListCrudElementHolder<SubBean> 
subelement) {
+               Collection coll = (Collection) 
bean.handler().getValue(propertyName);
+               coll.add(subelement.getElement());
+               new Database().save(bean);
+               return doShow();
+       };
+               
+       @MagmaBean
+       public abstract class ListCrudElementHolder<SubBean> {
+
+               private SubBean element;
+
+               @MagView(order=1, label="")
+               @Required
+               public SubBean getElement() {
+                       return element;
+               }
+               public void setElement(SubBean element) {
+                       this.element = element;
+               }
+               
+       }
+       
+}



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

Reply via email to