KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > barracuda > tutorials > comp > HelloWorld2b


1 package org.enhydra.barracuda.tutorials.comp;
2
3 import java.io.*;
4 import java.util.*;
5 import javax.servlet.*;
6 import javax.servlet.http.*;
7
8 import org.w3c.dom.*;
9 import org.enhydra.xml.xmlc.*;
10
11 import org.enhydra.barracuda.core.comp.*;
12 import org.enhydra.barracuda.core.comp.helper.*;
13 import org.enhydra.barracuda.core.util.dom.*;
14 import org.enhydra.barracuda.tutorials.xmlc.*;
15
16 /**
17  * Here's an example of HelloWorld using the BTemplate
18  * component
19  */

20 public class HelloWorld2b extends ComponentGateway {
21
22     //xmlc factory (ok as static because its threadsafe)
23
// private static XMLCFactory xmlcFactory = null;
24

25     //-------------------- ComponentGateway ----------------------
26
/**
27      * Handle the default HttpRequest.
28      */

29     public Document handleDefault (BComponent root, ViewContext vc, HttpServletRequest req, HttpServletResponse resp) throws IOException {
30         //figure out which page we're after by looking for an optional
31
//page parameter in the Req
32
String JavaDoc pageNo = req.getParameter("page");
33         if (pageNo==null) pageNo = "1";
34         Class JavaDoc pageCl = null;
35         try {
36             pageCl = Class.forName("org.enhydra.barracuda.tutorials.xmlc.HelloWorld2b"+pageNo+"HTML", true, Thread.currentThread().getContextClassLoader());
37         } catch (ClassNotFoundException JavaDoc e) {
38             pageNo = "1";
39             pageCl = HelloWorld2b1HTML.class;
40         }
41
42         //load the DOM object
43
// if (xmlcFactory==null) xmlcFactory = new XMLCStdFactory(this.getClass().getClassLoader(), new StreamXMLCLogger());
44
// XMLObject page = xmlcFactory.create(pageCl);
45

46         //load the localized DOM template
47
Document page = DefaultDOMLoader.getGlobalInstance().getDOM(pageCl, vc.getViewCapabilities().getClientLocale());
48
49         //create the component and bind it to the view
50
BTemplate templateComp = new BTemplate();
51         templateComp.setView(new DefaultTemplateView(page.getElementById("HelloWorld")));
52
53         //now specify the model
54
templateComp.addModel(new HelloWorldModel(pageNo));
55         String JavaDoc[] items = new String JavaDoc[] {"Cabbage", "Carrots", "Pickles", "Sugar", "Wheaties", "Flour", "Potatoes", "Frozen Pepperoni Pizzas", "Pineapples", "Honey-blanched Sardines", "Adobo", "Fresh Garlic cloves", "Milk", "Chardonnay", "Spam", "Pickled Pigs Feet", "Antacid"};
56         String JavaDoc[] qtys = new String JavaDoc[] {"3 heads", "1 bag", "1 jar", "5 lbs", "3 bxs", "50 lbs", "25 lbs", "17", "3", "6 cans", "2 jars", "20", "5 gallons", "3 bottles", "1 crate", "2 jars", "1 bottle"};
57         templateComp.addModel(new GroceriesModel(items, qtys));
58         
59         //add the component to the root
60
root.addChild(templateComp);
61     
62         //return the page
63
return page;
64     }
65
66     //--------------- GroceriesModel -------------------------
67
/**
68      * Groceries Model
69      */

70     class GroceriesModel extends AbstractTemplateModel implements IterativeModel {
71
72         String JavaDoc[] items = null;
73         String JavaDoc[] qtys = null;
74         int cntr = -1;
75
76         //constructor
77
public GroceriesModel(String JavaDoc[] iitems, String JavaDoc[] iqtys) {
78             items = iitems;
79             qtys = iqtys;
80         }
81
82         //register the model by name
83
public String JavaDoc getName() {return "Groceries";}
84
85         //provide items by key
86
public Object JavaDoc getItem(String JavaDoc key) {
87             ViewContext vc = getViewContext();
88             if (key.equals("Item")) return items[cntr];
89             else if (key.equals("Qty")) return qtys[cntr];
90             else if (key.equals("RowCntr")) return ""+(cntr+1);
91             else return super.getItem(key);
92         }
93
94         //prepare for iteration
95
public void preIterate() {
96             cntr = -1;
97         }
98         
99         //return true if there are more rows in the data model
100
public boolean hasNext() {
101             return (cntr<(items.length-1));
102         }
103         
104         //load the next row in the model
105
public void loadNext() {
106             cntr++;
107         }
108
109         //cleanup after iteration
110
public void postIterate() {}
111     }
112
113     //--------------- HelloWorldModel ------------------------
114
/**
115      * HelloWorldModel
116      */

117     class HelloWorldModel extends AbstractTemplateModel {
118         String JavaDoc pageNo = null;
119     
120         //constructor
121
public HelloWorldModel(String JavaDoc ipageNo) {
122             pageNo = ipageNo;
123         }
124
125         //register the model by name
126
public String JavaDoc getName() {
127             return "HelloWorld";
128         }
129         
130         //provide items by key
131
public Object JavaDoc getItem(String JavaDoc key) {
132             ViewContext vc = getViewContext();
133             if (key.equals("Title")) return "Hello World 2b example (ex "+pageNo+")";
134             else if (key.equals("Descr")) return "This example illustrates how using BTemplate allows us to drastically alter the look and feel of a page just by modifying the template; the developer doesn't need to make any changes to the components or the models in any of these examples. As you can see, this is quite flexible (we can shift between lists, tables, etc).";
135             else if (key.equals("Hello")) return "Hello World! Hi Ma! Hi Pa!";
136             else if (key.equals("Summary")) return "Shopping List Table";
137             else if (key.equals("Header")) return HelloWorld2bHeader.getNode(vc);
138             else if (key.equals("Footer")) return HelloWorld2Footer.getNode(vc);
139             else return super.getItem(key);
140         }
141     }
142 }
143
Popular Tags