Something better than ZClasses (was: Re: [Zope-dev] Re: Zcatalog bloat problem (berkeleydb is a solution?))

Stephan Richter srichter@cbu.edu
Tue, 26 Jun 2001 21:30:35 -0500


--=====================_21885678==_
Content-Type: text/plain; charset="us-ascii"; format=flowed


> > I will upload the documents tomorrow though, since it is late here and
> > I have to do some work still.
>
>Ok.  I'll begin thinking about all the stuff I dreamt of making mk-zprod
>into.

Okay, okay...I stayed up and typed it down pretty quick (2 hours). I 
attached it to this mail. It is plain text, since I was too lazy to do it 
in HTML. It might be a little unstructured, but I am too tired to fix that now.

Regards,
Stephan

--
Stephan Richter
CBU - Physics and Chemistry Student
Web2k - Web Design/Development & Technical Project Management
--=====================_21885678==_
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: attachment; filename="WizardProposal.txt"

SmartWizards - A framework to generate the Every-Day-Wizard
===========================================================
by Stephan Richter in June 2001

Version 0.1


The following parts of a *default* WizardPage are defined:

+-------------+------------------------------------------------------+
|             |                                                      |
|    Logo     |           Header and Long Description                |
|             |                                                      |
+-------------+------------------------------------------------------+
|             |                                                      |
|  Wizard     |                    Wizard                            |
|             |                                                      |
|  Overview   |                     Main                             |
|             |                                                      |
|             |                    Window                            |
|             |                                                      |
|             |                                                      |
|             |                                                      |
|             |                                                      |
|             |                                                      |
+-------------+------------------------------------------------------+
|                      Status Messages                               |
+--------------------------------------------------------------------+
|              Navigation Bar (buttons to move)                      |
+--------------------------------------------------------------------+


Therefore there are the following standard methods defined in a wizard:

wizardHeader                        wizardStatus
wizardFooter                        wizardNavigationBar
wizardOverview                      wizardMainWindow
wizardDescription


Functionalities of these methods:
=================================

wizardOverview:
---------------
  - should display a list of all pages (display short description/title)
  - needs to know about the active page to highlight it

  Default Output: A numbered list of all the pages with the active one 
                  highlighted.


wizardDescription:
------------------
  - shows the 'long' description of the active page
  - there might be also a static part, depending on the application


wizardStatus:
-------------
  - status messages/information
      o Errors by form validation
      o administrative messages (required fields, ...)
      o wizard information (page x out of y)


wizardNavigation:
-----------------
  - there should be only buttons here!
  - maybe we should define where the buttons are, since grouping some
    of them will be necessary


wizardMainWindow:
-----------------
  - here goes the real page information
  - there can be: forms, other actions, information and everything mixed



Classes
=======

SmartWizard --> Folder
----------------------
	
  - we are going to use Sessions (CoreSessionTracking) and Versions to keep track of the
    user's status.
  - Since it will be too hard to give all information first and then commit everything 
    at the end, we decided to use versions, which we can always not commit, if a roll-
    back is requested.
  - All the other info is saved in the session, since several people at once could use
    the wizard at once.
  - Also, we will keep track of the active page by simply storing the index of the page 
    inside the Pages folder; since it is an OrderedFolder we can do this safely.

  - methods: wizardHeader 
             wizardFooter
	     wizardCSS
             wizardStatus
             wizardNavigationBar
             wizardOverview
             wizardMainWindow
             wizardDescription
	     wizardSession - Contains all the session data information
                             Object is of type SessionDataManager.       
             Versions  - Folder that contains versions of the people which use the wizard.
                         Object is of type Folder.
             Pages     - The container of all the WizardPages that being displayed during 
                         the Wizard.
                         Object is of type OrderedFolder (see Zope.org).

  - attributes: activePageIndex - specific value is stored in the session (because of 
                                  multiple users)
                wizardWidth - Width of the Wizard Window in the browser.
                wizardHeight - Same for height.


WizardPage --> OrderedFolder
----------------------------
  - WizardPages are the objects that are responsible for one Wizard Page/Screen. 
  - methods: shortDescription
             longDescription
             content
             action
             status
             ActionButtons - Contains all the ActionButton instances for the navigation
                             bar. I am still thinking about the grouping.


ActionButton --> SimpleItem, PropertyManager
--------------------------------------------
  - Simple class to represent an action object
  - Later this should maybe support graphical submits as well.
  - methods: render - return the information of the class in a valid HTML input tag
  - attributes: title - Text that is displayed on the button
                action - the method to call, when the button is pressed.


WizardPageTemplates --> WizardPage
----------------------------------
  o FormPageTemplate - contains a Formulator Form and automatically knows how to render
                       it. This is easy, since I have done that before.
  o SectionPageTemplate - This will contain a SmartSection instance. SmartSections are 
                          a way for the non-programmer to quickly create Web-Sites. The
                          initial development is not yet done, but will be completed 
                          soon.
  o TreePageTemplate - Select an object or other value from an OFS Tree. 

  - These templates only have a factory (meaning a constructorForm, constructor) and no 
    class, since they are only making some adjustments to the WizardPage, but do not 
    enhance its functionality.


Notes:
------
  - The framework is very flexible, since all the methods are prefilled, but can be 
    overwritten.
  - All the Use Cases I came up with can be implemented using this framework.
  - I think that the product has a potential for all the applications that have to get
    a lot of info from the non-technical user. Some projects I think that could profit 
    are Squishdot, proiektor, kontentor, ZopeGUM, mk-prod and many others.
  - The proiektor installer provides a nice prototype of how generated Wizards should 
    look and behave like. 
   

Done:
-----
  - Classes are created with inital attributes and methods.
  - HTML code for the Wizard
  - Initial Setup for all the Wizard methods
  

ToDo:
-----
  - Create versions and sessions for the user.
  - Fill-in basic actions and functionality.
  - Implementation of WizardPageTemplates
  - A nice Wizard CSS (since this product is for the end user)
  - A cute SmartWizard Logo ;)
  - ...


Issues:
-------
  - None so far. The project is fairky easily to have an overview over.


If you are interested in co-developing this new Product with iuveno AG, please
contact Stephan Richter at srichter@iuveno-net.de. I will be happy to send you
the current code.
--=====================_21885678==_--