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/16 18:04:13 UTC

svn commit: r880850 - in /labs/magma/trunk/website-beansview/src: main/java/org/apache/magma/website/beansview/ test/java/org/apache/magma/website/beansview/ test/java/org/apache/magma/website/beansview/stuff/ test/resources/ test/resources/META-INF/

Author: simoneg
Date: Mon Nov 16 17:04:12 2009
New Revision: 880850

URL: http://svn.apache.org/viewvc?rev=880850&view=rev
Log:
Support for show list actions

Added:
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/DummyPersonConverter.java
    labs/magma/trunk/website-beansview/src/test/resources/
    labs/magma/trunk/website-beansview/src/test/resources/META-INF/
    labs/magma/trunk/website-beansview/src/test/resources/META-INF/magma.default.properties
Modified:
    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/ListStyle.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTable.java
    labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ShowList.java
    labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/ShowListTest.java

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=880850&r1=880849&r2=880850&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 Mon Nov 16 17:04:12 2009
@@ -17,12 +17,16 @@
 package org.apache.magma.website.beansview;
 
 import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagmaBeanSupport;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.Converters;
+
 
 public class FormAction {
 
 	private String label;
 	private String method;
-	private boolean parametrized;
+	private boolean parametrized = true;
 	private boolean validate;
 
 	
@@ -77,4 +81,19 @@
 		return this;
 	}
 	
-}
+	public String getMethodUrl(MagmaBeanSupport bean) {
+		String meth = getMethod();
+		if (meth.startsWith("do")) {
+			meth = meth.substring(2);
+		} else if (meth.startsWith("handle")) {
+			meth = meth.substring(6);
+		}
+		if (bean != null && this.parametrized) {
+			Converter conv = Converters.getConverterFor(bean.getClass());
+			if (conv == null) throw new MagmaException("Cannot find a converter for the form action on bean {0}", bean.getClass());
+			meth += "!";
+			meth += conv.to(bean);
+		}
+		return meth;
+	}
+ }

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=880850&r1=880849&r2=880850&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 Mon Nov 16 17:04:12 2009
@@ -1,25 +1,18 @@
 package org.apache.magma.website.beansview;
 
-import java.io.IOException;
-import java.io.Writer;
 import java.util.List;
 
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.magma.basics.LocalizableString;
-import org.apache.magma.beans.BeanData;
-import org.apache.magma.beans.MagmaBeanSupport;
 import org.apache.magma.beans.PropertyInfo;
 import org.apache.magma.view.tree.FieldNode;
 import org.apache.magma.view.tree.Node;
 import org.apache.magma.view.tree.RootNode;
-import org.apache.magma.view.tree.ViewUtils;
-import org.apache.magma.website.WebHandler;
 
 public abstract class ListStyle {
 
 	protected Class<?> myclass;
 	protected RootNode root;
 	protected boolean withLink = false;
+	protected boolean withAdditional = false;
 	protected StringBuilder buff;
 
 	public void setMyclass(Class<?> myclass) {
@@ -32,7 +25,11 @@
 
 	public void setWithLink(boolean withLink) {
 		this.withLink = withLink;
-	}	
+	}
+	
+	public void setWithAdditional(boolean withAdditional) {
+		this.withAdditional = withAdditional;
+	}
 	
 	public void generate() {
 		buff = new StringBuilder();
@@ -57,19 +54,36 @@
 				createFieldNodeHeader(fldn);
 			}
 		}
+		if (withAdditional) {
+			createFieldNodeHeader(null);			
+		}
 		closeHeaderRow();
 	}
 	protected abstract void openHeaderRow();
 	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */
 	protected abstract void openHeaderCell(FieldNode fldn);
 	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */
 	protected void createFieldNodeHeader(FieldNode fldn) {
 		openHeaderCell(fldn);
 		buff.append("${list.labelFor('");
-		buff.append(fldn.getId());
+		if (fldn != null) {
+			buff.append(fldn.getId());
+		} else {
+			buff.append("_additionals");
+		}
 		buff.append("')}");
 		closeHeaderCell(fldn);
 	}
+	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */
 	protected abstract void closeHeaderCell(FieldNode fldn);
 
 	protected abstract void closeHeaderRow();
@@ -85,7 +99,10 @@
 				FieldNode fldn = (FieldNode) node;
 				createFieldNodeCell(fldn);
 			}
-		}			
+		}
+		if (withAdditional) {
+			createFieldNodeCell(null);
+		}
 		closeRow();
 		closeIterator();
 		closeBody();
@@ -111,19 +128,24 @@
 	
 	protected abstract void closeRow();
 	
-	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */	
 	protected void createFieldNodeCell(FieldNode fldn) {
 		openCell(fldn);
-		if (withLink) {
+		if (withLink && fldn != null) {
 			openLink(fldn);
 		}
 		createFieldNodeCellContent(fldn);
-		if (withLink) {
+		if (withLink && fldn != null) {
 			closeLink(fldn);
 		}
 		closeCell(fldn);
 	}
 	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */	
 	protected abstract void openCell(FieldNode fldn);
 	
 	protected void openLink(FieldNode fldn) {
@@ -134,10 +156,16 @@
 		buff.append("')}\">");
 	}
 	
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */	
 	protected void createFieldNodeCellContent(FieldNode fldn) {
-		PropertyInfo prop = fldn.getProperty();
 		buff.append("${list.contentFor($row,'");
-		buff.append(fldn.getId());
+		if (fldn != null) {
+			buff.append(fldn.getId());
+		} else {
+			buff.append("_additionals");			
+		}
 		buff.append("')}");		
 	}
 	
@@ -145,6 +173,9 @@
 		buff.append("</a>");
 	}
 
+	/**
+	 * @param fldn may be null, for the last additional column
+	 */
 	protected abstract void closeCell(FieldNode fldn);	
 	
 	protected abstract void createFooter();
@@ -154,7 +185,7 @@
 	protected abstract void openOuterTable();
 	
 	protected String getStyleKey() {
-		return "WL" + this.withLink;
+		return "WL" + this.withLink + "WA" + this.withAdditional;
 	}
 
 }

Modified: labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTable.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTable.java?rev=880850&r1=880849&r2=880850&view=diff
==============================================================================
--- labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTable.java (original)
+++ labs/magma/trunk/website-beansview/src/main/java/org/apache/magma/website/beansview/ListStyleTable.java Mon Nov 16 17:04:12 2009
@@ -47,14 +47,14 @@
 
 	@Override
 	protected void openCell(FieldNode fldn) {
-		// TODO add call for additional classes
-		buff.append("<td class=\"MagmaList-Cell " + fldn.getId() + "\">");		
+		String addclass = fldn == null ? "additionals" : fldn.getId();
+		buff.append("<td class=\"MagmaList-Cell " + addclass + "\">");		
 	}
 
 	@Override
 	protected void openHeaderCell(FieldNode fldn) {
-		// TODO add call for additional classes
-		buff.append("<th class=\"MagmaList-HeaderCell " + fldn.getId() + "\">");
+		String addclass = fldn == null ? "additionals" : fldn.getId();
+		buff.append("<th class=\"MagmaList-HeaderCell " + addclass + "\">");
 	}
 
 	@Override

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=880850&r1=880849&r2=880850&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 Mon Nov 16 17:04:12 2009
@@ -45,6 +45,7 @@
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -62,6 +63,8 @@
 	protected String gototitle;
 	protected String[] layers = LIST;
 	protected ListStyle listStyle;
+	protected List<FormAction> actions = null;
+	
 	
 	public <T extends MagmaBeanSupport> ShowList(Class<T> myclass, Collection<? extends T> list, String link, String... layers) {
 		this.list = list;
@@ -127,6 +130,7 @@
 		listStyle.setMyclass(myclass);
 		listStyle.setRoot(root);
 		listStyle.setWithLink(this.linkUrl != null);
+		listStyle.setWithAdditional(this.actions != null && this.actions.size() > 0);
 		String tplkey = listStyle.getClass().getName() + ":" + listStyle.getStyleKey();
 		
 		String tplval = root.getTemplate(tplkey);
@@ -205,10 +209,18 @@
 	}
 	
 	public final String labelFor(String nodeid) {
+		if (nodeid.equals("_additionals")) {
+			return labelForAdditionals();
+		}
 		RootNode root = BeanData.getFor(myclass).getViewTree(this.layers);
 		Node gennode = root.findById(nodeid);
 		return labelFor(gennode);
 	}
+
+	protected String labelForAdditionals() {
+		return new LocalizableString("Actions").toString();
+	}
+	
 	
 	protected String labelFor(Node gennode) {
 		if (!(gennode instanceof FieldNode)) return "NA";
@@ -217,10 +229,29 @@
 	}
 	
 	public final String contentFor(MagmaBeanSupport bean, String nodeid) {
+		if (nodeid.equals("_additionals")) {
+			return contentForAdditionals(bean);
+		}
 		RootNode root = BeanData.getFor(myclass).getViewTree(this.layers);
 		Node gennode = root.findById(nodeid);
 		return contentFor(bean, gennode);
 	}
+
+	protected String contentForAdditionals(MagmaBeanSupport bean) {
+		if (this.actions == null || this.actions.size() == 0) return "";
+		StringBuilder ret = new StringBuilder();
+		for (FormAction action : this.actions) {
+			ret.append("<a");
+			ret.append(" class=\"Actions ");
+			ret.append(action.getMethod());
+			ret.append('"');
+			ret.append(" href=\"" + action.getMethodUrl(bean) + "\">");
+			ret.append(new LocalizableString(action.getLabel()).toString());
+			ret.append("</a>");
+		}
+		return ret.toString();
+	}
+	
 	
 	protected String contentFor(MagmaBeanSupport bean, Node gennode) {
 		if (!(gennode instanceof FieldNode)) return "NA";
@@ -244,4 +275,11 @@
 		return this.list;
 	}
 	
+	public ShowList 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/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=880850&r1=880849&r2=880850&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 Mon Nov 16 17:04:12 2009
@@ -86,6 +86,33 @@
 		assertStructure(result, "<ul","<li","<span", "Simone", "</span", "<span", "Gianni", "</ul");
 		System.out.println(result);
 	}
+
+	@Test
+	public void actionsTest() throws Exception {
+		Person p = new Person();
+		p.setName("Simone");
+		p.setSurname("Gianni");
+		p.setEmail("simoneg@apache.org");
+		
+		List<Person> lst = new ArrayList<Person>();
+		lst.add(p);
+		lst.add(p);
+		
+		ShowList sbp = new ShowList(Person.class, lst);
+		sbp.addAction(new FormAction("Delete", "doDelete"));
+		sbp.addAction(new FormAction("Promote", "doPromote"));
+		
+		ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		sbp.produce(baos);
+		
+		String result = new String(baos.toByteArray());
+
+		assertStructure(result, 
+				"<table","<tr",
+				"<td", "Simone", "</td", "<td", "Gianni", "<td", "additionals", "<a", "href=\"Delete",
+				"</table");
+		System.out.println(result);
+	}
 	
 	
 }

Added: labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/DummyPersonConverter.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/DummyPersonConverter.java?rev=880850&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/DummyPersonConverter.java (added)
+++ labs/magma/trunk/website-beansview/src/test/java/org/apache/magma/website/beansview/stuff/DummyPersonConverter.java Mon Nov 16 17:04:12 2009
@@ -0,0 +1,33 @@
+package org.apache.magma.website.beansview.stuff;
+
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.string.BaseConverter;
+
+public class DummyPersonConverter extends BaseConverter<Person> {
+	
+	public DummyPersonConverter() {
+		super(Person.class);
+	}
+
+	public Person from(String value) {
+		return new Person();
+	}
+	
+	public String to(Person value) {
+		return "converted";
+	}
+	
+	public boolean converts(Class<?> clazz) {
+		return Person.class.isAssignableFrom(clazz);
+	}
+	
+	public Converter<Person> build(Class<? extends Person> clazz) {
+		return this;
+	}
+
+	public int getMaximumStringSize() {
+		return 1;
+	}
+	
+
+}

Added: labs/magma/trunk/website-beansview/src/test/resources/META-INF/magma.default.properties
URL: http://svn.apache.org/viewvc/labs/magma/trunk/website-beansview/src/test/resources/META-INF/magma.default.properties?rev=880850&view=auto
==============================================================================
--- labs/magma/trunk/website-beansview/src/test/resources/META-INF/magma.default.properties (added)
+++ labs/magma/trunk/website-beansview/src/test/resources/META-INF/magma.default.properties Mon Nov 16 17:04:12 2009
@@ -0,0 +1,15 @@
+#Licensed to the Apache Software Foundation (ASF) under one or more
+#contributor license agreements.  See the NOTICE file distributed with
+#this work for additional information regarding copyright ownership.
+#The ASF licenses this file to You under the Apache License, Version 2.0
+#(the "License"); you may not use this file except in compliance with
+#the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+org.apache.magma.conversion.Converter.person=org.apache.magma.website.beansview.stuff.DummyPersonConverter



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org