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