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/11/17 18:04:32 UTC

svn commit: r881377 - in /labs/magma/trunk/website-administration/src/main/java/org/apache/magma/website/admin: AbstractListCrud.java ListCrudWithAddition.java ListCrudWithSelection.java

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: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org