CVS: TapestryBook/examples/src/examples ToppingsResult.java,NONE,1.1 Login.java,NONE,1.1 ToDo.java,NONE,1.1 TextField1.java,NONE,1.1 Toppings.java,NONE,1.1 ToDoItem.java,NONE,1.1

Howard Lewis Ship <[email protected]> Thu, 20 Feb 2003 07:13:48 -0800
Newsgroups gmane.comp.java.tapestry.cvs
Message-ID <[email protected]>
Update of /cvsroot/tapestry/TapestryBook/examples/src/examples
In directory sc8-pr-cvs1:/tmp/cvs-serv16370/examples/src/examples

Added Files:
	ToppingsResult.java Login.java ToDo.java TextField1.java 
	Toppings.java ToDoItem.java 
Log Message:
Checkpoint.

--- NEW FILE: ToppingsResult.java ---
package examples;

import net.sf.tapestry.html.BasePage;

public abstract class ToppingsResult extends BasePage
{
	public abstract void setToppings(String toppings);
}

--- NEW FILE: Login.java ---
package examples;

import net.sf.tapestry.IRequestCycle;
import net.sf.tapestry.html.BasePage;

/**
 *  Demonstration of very simple form support.
 *
 *  @author Howard Lewis Ship
 *  @version $Id: Login.java,v 1.1 2003/02/20 15:13:44 hship Exp $
 *
 **/

public abstract class Login extends BasePage
{
    // Abstract accessors provided by Tapestry in enhanced
    // subclass.  We only declare the accessors we need in code,
    // but the properties are always read/write.

    public abstract String getUserName();
    public abstract String getPassword();
    public abstract void setMessage(String message);

    public void login(IRequestCycle cycle)
    {
        if (isValidLogin(getUserName(), getPassword()))
        {
            cycle.setPage("Main");
            return;
        }

        setMessage("Invalid user name or password.");
    }

    private boolean isValidLogin(String userName, String password)
    {
        return "tapestry".equalsIgnoreCase(userName);
    }

}

--- NEW FILE: ToDo.java ---
package examples;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

import net.sf.tapestry.IMarkupWriter;
import net.sf.tapestry.IRequestCycle;
import net.sf.tapestry.RequestCycleException;
import net.sf.tapestry.html.BasePage;

public abstract class ToDo extends BasePage
{
    public abstract List getToDoList();
    public abstract void setToDoList(List toDoList);

    public abstract ToDoItem getItem();

    public abstract ToDoItem getMoveUpItem();
    public abstract void setMoveUpItem(ToDoItem moveUpItem);

    public abstract ToDoItem getMoveDownItem();
    public abstract void setMoveDownItem(ToDoItem moveDownItem);

    // Remember which item to move up until after the form finishes
    // rewinding.

    public void moveUp(IRequestCycle cycle)
    {
        setMoveUpItem(getItem());
    }

    public void moveDown(IRequestCycle cycle)
    {
        setMoveDownItem(getItem());
    }

    public void addTodoItem(IRequestCycle cycle)
    {
        getToDoList().add(new ToDoItem("New Item"));
    }

    // The Submit for this is after the main loop, so its safe to
    // actually edit the list.

    public void deleteCompleted(IRequestCycle cycle)
    {
        ListIterator i = getToDoList().listIterator();

        while (i.hasNext())
        {
            ToDoItem item = (ToDoItem) i.next();

            if (item.isCompleted())
                i.remove();
        }
    }

    public void formSubmit(IRequestCycle cycle)
    {
        List list = getToDoList();

        int count = list.size();

        for (int i = 0; i < count; i++)
        {
            ToDoItem item = (ToDoItem) list.get(i);

            if (item == getMoveUpItem())
            {
                if (i > 0)
                {
                    list.remove(i);
                    list.add(i - 1, item);
                }

                break;
            }

            if (item == getMoveDownItem())
            {
                if (i + 1 < count)
                {
                    list.remove(i);
                    list.add(i + 1, item);
                }

                break;
            }
        }

        // Always important to set peristent properties; otherwise changes
        // made in this request cycle will be lost.  The framework
        // makes a copy of the list.

        setToDoList(list);
    }

    // Last chance to set persistent properties before a render.  This is where
    // we detect the uninitialized ToDo list and set its initial
    // contents.

    public void beginResponse(IMarkupWriter writer, IRequestCycle cycle)
        throws RequestCycleException
    {
        List list = getToDoList();

        if (list == null)
        {
            list = new ArrayList();
            list.add(new ToDoItem("Finish reading Tapestry Book"));
            list.add(new ToDoItem("Download latest version of Tapestry"));

            setToDoList(list);
        }
    }

}

--- NEW FILE: TextField1.java ---
package examples;

import net.sf.tapestry.html.BasePage;

public abstract class TextField1 extends BasePage
{
    public abstract int getRealProperty();
    public abstract void setRealProperty(int realProperty);
    public abstract void setErrorMessage(String errorMessage);

    public void setStringProperty(String stringProperty)
    {
        try
        {
            int value = Integer.parseInt(stringProperty);
            setRealProperty(value);
        }
        catch (NumberFormatException ex)
        {
            setErrorMessage("Invalid integer value.");
        }
    }

    public String getStringProperty()
    {
        return Integer.toString(getRealProperty());
    }

}

--- NEW FILE: Toppings.java ---
package examples;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import net.sf.tapestry.IRequestCycle;
import net.sf.tapestry.html.BasePage;

public abstract class Toppings extends BasePage
{
    private static String[] TOPPINGS =
        { "Lettuce", "Tomato", "Cheese", "Onions", "Pickles", "Relish", "Mustard", "Ketchup" };

    private Set _selectedToppings;

    public void initialize()
    {
        _selectedToppings = new HashSet();
    }

    public String[] getToppings()
    {
        return TOPPINGS;
    }

    public abstract void setTopping(String topping);

    public abstract String getTopping();

    public boolean isToppingSelected()
    {
        return _selectedToppings.contains(getTopping());
    }

    public void setToppingSelected(boolean toppingSelected)
    {
        if (toppingSelected)
            _selectedToppings.add(getTopping());
        else
            _selectedToppings.remove(getTopping());
    }

    public void selectToppings(IRequestCycle cycle)
    {
        String toppings = getToppingsList();

        ToppingsResult page = (ToppingsResult) cycle.getPage("ToppingsResult");
        page.setToppings(toppings);
        cycle.setPage(page);
    }

    private String getToppingsList()
    {
        if (_selectedToppings.isEmpty())
            return "No toppings.";

        StringBuffer buffer = new StringBuffer();

        int count = _selectedToppings.size();

        int x = 0;
        Iterator i = _selectedToppings.iterator();

        while (i.hasNext())
        {
            if (++x > 1)
            {
                if (x == count)
                    buffer.append(" and ");
                else
                    buffer.append(", ");
            }

            String topping = (String) i.next();

            buffer.append(topping);
        }

        buffer.append(".");

        return buffer.toString();
    }

}

--- NEW FILE: ToDoItem.java ---
package examples;

public class ToDoItem
{
	private boolean _completed;
	private String _title;
	
	public ToDoItem()
	{
	}
	
	public ToDoItem(String title)
	{
		_title = title;
	}
	
    public boolean isCompleted()
    {
        return _completed;
    }

    public String getTitle()
    {
        return _title;
    }

    public void setCompleted(boolean completed)
    {
        _completed = completed;
    }

    public void setTitle(String title)
    {
        _title = title;
    }

}



-------------------------------------------------------
This SF.net email is sponsored by: SlickEdit Inc. Develop an edge.
The most comprehensive and flexible code editor you can use.
Code faster. C/C++, C#, Java, HTML, XML, many more. FREE 30-Day Trial.
www.slickedit.com/sourceforge