Sure, that could work - but why not simply set up an additional sourceforge project? We would be happy to link to it in the documentation and on the Maverick website navbar.
I've been working on a rewrite of the Punk Image Gallery since the existing code is quite dated (it is still based on Maverick 1.x). I'm planning on moving it to a separate SF project. Plugins make a lot of sense to put in the Maverick CVS, but big sample apps probably deserve their own SF project - they're more likely to take on a life of their own that way. BTW, I am also really interested in a small and simple threaded forum system. I have a few applications for which Jive is just far far too heavy. Jeff Schnitzer [EMAIL PROTECTED] > -----Original Message----- > From: David Cuthill [mailto:[EMAIL PROTECTED]] > Sent: Monday, January 06, 2003 11:45 AM > To: [EMAIL PROTECTED] > Subject: Re: [Mav-user] A Controller with Integrated FormProc features > > Hi Zed, > > I for one, would be interested in perusing the full source to your > webapp. In a few weeks I will be starting a new project for which I have > already specified components similar to yours: Maverick, Hibernate and > some heavy form validation (FormProc?). > > Perhaps Jeff and the guys could set up a '3rd party' CVS branch, where > submissions such as yours can be published, which enhances the project > whilst keeping the core code branch clean and lightweight? > > David Cuthill > > > Zed A. Shaw wrote: > > Hi folks, > > > > I've been playing with several different web application frameworks, and > > decided to spend some time writing up a real simple little threaded > > discussion board in Maverick. I also managed to write a fairly complete > > base controller which integrates with FormProc to give you > > semi-automated form validation. I thought I'd send it to the list to > > see what people think. I've attached the maverick.xml and the > > SuperController.java files for people to look at. I also threw in one > > of the derived controllers to show how it is used. The entire threaded > > discussion forum is much to large to put in an e-mail, but I may throw > > it up on a website somewhere if people are interested in it as a > > learning project. > > > > Anyway, Maverick is really cool. Thanks for the good work. Have you > > guys thought of hooking up some XDoclet stuff like struts and webwork > > have done? > > > > > > ------------------------------------------------------------------------ > > > > package com.zedshaw.mavforum.control; > > > > import com.zedshaw.mavforum.data.*; > > import cirrus.hibernate.*; > > import org.infohazard.maverick.ctl.*; > > import org.infohazard.maverick.flow.*; > > import java.util.*; > > import org.formproc.*; > > import org.formproc.servlet.*; > > import org.apache.commons.beanutils.BeanUtils; > > import org.apache.commons.logging.LogFactory; > > import org.apache.commons.logging.Log; > > > > /** > > * Description of the Class > > * > > *@author zedshaw > > *@created December 16, 2002 > > */ > > public class ForumList extends SuperController { > > > > /** > > * Description of the Method > > * > > *@param controllerNode Description of the Parameter > > *@exception ConfigException Description of the Exception > > */ > > public void init(org.jdom.Element controllerNode) throws > ConfigException { > > // we only do this in the ForumController so that it is done > once > > super.init(controllerNode); > > HibernateManager.init(); > > } > > > > > > /** > > * A logger for printing out messages. > > */ > > private static Log log = LogFactory.getLog(ForumList.class); > > > > > > /** > > * Constructor for the ForumController object > > */ > > public ForumList() { > > super(); > > } > > > > > > /** > > * Description of the Method > > * > > *@param ctx Description of the Parameter > > *@param formResult Description of the Parameter > > *@param formModel Description of the Parameter > > *@return Description of the Return Value > > *@exception Exception Description of the Exception > > */ > > public String perform(ControllerContext ctx, FormResult formResult, > Map formModel) throws Exception { > > > > // get the forums and set them up as the model > > Session sess = HibernateManager.getSession(ctx); > > boolean hasErrorr = false; > > > > // clear out the currentForum > > ctx.getRequest().getSession().setAttribute("currentForum", > null); > > > > try { > > List forums = sess.find("from forums in class Forum"); > > ctx.setModel(forums); > > } catch (Exception e) { > > ctx.setParam("errorReason", "Problem listing all the > forums."); > > e.printStackTrace(); > > hasErrorr = true; > > } finally { > > sess.disconnect(); > > } > > > > return hasErrorr ? ERROR : SUCCESS; > > } > > > > } > > > > > > > > ------------------------------------------------------------------------ > > > > package com.zedshaw.mavforum.control; > > > > import org.infohazard.maverick.ctl.*; > > import org.infohazard.maverick.flow.*; > > import java.util.*; > > import org.apache.commons.beanutils.BeanUtils; > > import org.apache.commons.beanutils.MethodUtils; > > import javax.servlet.*; > > import javax.servlet.http.*; > > import org.formproc.*; > > import org.formproc.servlet.*; > > import org.apache.commons.logging.LogFactory; > > import org.apache.commons.logging.Log; > > import org.jdom.*; > > > > /** > > * Description of the Class > > * > > *@author zedshaw > > *@created December 16, 2002 > > */ > > public class SuperController implements ControllerSingleton { > > > > /** > > * Common name for the typical "success" view. > > */ > > public final static String SUCCESS = "success"; > > > > /** > > * Common name for the typical "error" view. > > */ > > public final static String ERROR = "error"; > > > > /** > > * Indicates that there is an error in the form submitted. > > */ > > > > public final static String FORM_ERROR = "form_error"; > > > > /** > > * This is the prefix for the methods, which the ACTION_KEY is > appended to > > */ > > public final static String PERFORM_PREFIX = "perform"; > > > > /** > > * A logger for printing out messages. > > */ > > private static Log log = > LogFactory.getLog(ControllerSingleton.class); > > > > /** > > * The form manager used by this controller to verify forms. > > */ > > protected FormManager formManager = null; > > > > /** > > * The name of the form to use when processing the input. > > */ > > protected String formName = null; > > > > /** > > * Determines whether to use an ExtendedHttpForm or not. > > */ > > protected boolean isFormExtended = false; > > > > /** > > * Determines whether the form errors should be passed through to > the > > * controller or if an error in the form should be rejected with > FORM_ERROR. A > > * value of true means to pass the errors on to the controlle, and > false means > > * to reject. > > */ > > protected boolean isFormPassed = false; > > > > /** > > * Description of the Field > > */ > > protected boolean hasForm = false; > > > > > > /** > > * Initializes the singleton with the configuration node. > > * > > *@param controllerNode Description of the Parameter > > *@exception ConfigException Description of the Exception > > */ > > public void init(org.jdom.Element controllerNode) throws > ConfigException { > > try { > > formManager = new FormManager(); > > } catch (Exception e) { > > log.error("Could not start the FormManager to process > forms:" + e); > > throw new ConfigException(e); > > } > > > > // process the <form> tags inside our controller statement > > List children = controllerNode.getChildren("form"); > > Iterator i = children.iterator(); > > > > // there should only be one form tag, so we just do one > hasNext() check > > if (i.hasNext()) { > > Element el = (Element) i.next(); > > log.info("Element: " + el + " " + > el.getAttribute("name") + " " + el.getAttribute("extended")); > > > > try { > > formName = el.getAttribute("name").getValue(); > > } catch (Exception e) { > > log.error("Could not read name attribute of > form"); > > } > > > > try { > > isFormExtended = > el.getAttribute("extended").getBooleanValue(); > > } catch (Exception e) { > > // this means that the extended attribute was not > set, so we default to isFormExtended=false > > } > > > > try { > > isFormPassed = > el.getAttribute("pass").getBooleanValue(); > > } catch (Exception e) { > > // this means that the attribute was not set, so > default to false > > } > > > > hasForm = true; > > > > } else { > > log.debug("Controller does not have a form, results will > be raw request input."); > > hasForm = false; > > } > > } > > > > > > /** > > * Sets up the servlet parameters and calls through to the > parameterless > > * rawPerform() method. Does not result in bean population. > > * > > *@param cctx Description of the Parameter > > *@return Description of the Return Value > > *@exception ServletException Description of the Exception > > *@see Controller#perform > > */ > > public final String go(ControllerContext cctx) throws > ServletException { > > Map processedModel = null; > > FormResult result = null; > > String performResult = null; > > > > // figure out if this controller has a form > > if (hasForm) { > > processedModel = new HashMap(); > > > > try { > > if (isFormExtended) { > > ExtendedHttpForm form = new > ExtendedHttpForm(formName, processedModel); > > formManager.configure(form); > > result = form.process(cctx.getRequest()); > > } else { > > HttpForm form = new HttpForm(formName, > processedModel); > > formManager.configure(form); > > result = form.process(cctx.getRequest()); > > } > > } catch (Exception e) { > > log.error("Problem processing form " + formName + > " because of: " + e); > > return FORM_ERROR; > > } > > > > // reject the submission to the FORM_ERROR view if the > form is not requested to be passed and > > // it is invalid. Otherwise, the goods are just passed > on to the perform method. > > if (!isFormPassed && !result.isValid()) { > > // looks like there were problems > > cctx.setModel(result); > > return FORM_ERROR; > > } > > } else { > > // since they don't have a form, then we just set the > processed model to the parameter map > > log.warn("no form specified"); > > processedModel = cctx.getRequest().getParameterMap(); > > } > > > > try { > > performResult = perform(cctx, result, processedModel); > > } catch (Exception e) { > > // TODO: add exception handling > > e.printStackTrace(); > > throw new ServletException(e); > > } > > > > return performResult; > > } > > > > > > /** > > * This is the base perform method which does nothing but return > success. > > * > > *@param ctx Description of the Parameter > > *@param formResult Description of the Parameter > > *@param formModel Description of the Parameter > > *@return Description of the Return Value > > *@exception Exception Description of the Exception > > */ > > public String perform(ControllerContext ctx, FormResult formResult, > Map formModel) throws Exception { > > log.error("Perform method called in SuperController, which > means it wasn't properly overridden."); > > return SUCCESS; > > } > > } > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > ----- > > Zed A. Shaw > > http://www.zedshaw.com/ > > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > [INVALID FOOTER] ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf [INVALID FOOTER]
