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 20 public class HelloWorld2b extends ComponentGateway { 21 22 25 29 public Document handleDefault (BComponent root, ViewContext vc, HttpServletRequest req, HttpServletResponse resp) throws IOException { 30 String pageNo = req.getParameter("page"); 33 if (pageNo==null) pageNo = "1"; 34 Class pageCl = null; 35 try { 36 pageCl = Class.forName("org.enhydra.barracuda.tutorials.xmlc.HelloWorld2b"+pageNo+"HTML", true, Thread.currentThread().getContextClassLoader()); 37 } catch (ClassNotFoundException e) { 38 pageNo = "1"; 39 pageCl = HelloWorld2b1HTML.class; 40 } 41 42 46 Document page = DefaultDOMLoader.getGlobalInstance().getDOM(pageCl, vc.getViewCapabilities().getClientLocale()); 48 49 BTemplate templateComp = new BTemplate(); 51 templateComp.setView(new DefaultTemplateView(page.getElementById("HelloWorld"))); 52 53 templateComp.addModel(new HelloWorldModel(pageNo)); 55 String [] items = new String [] {"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 [] qtys = new String [] {"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 root.addChild(templateComp); 61 62 return page; 64 } 65 66 70 class GroceriesModel extends AbstractTemplateModel implements IterativeModel { 71 72 String [] items = null; 73 String [] qtys = null; 74 int cntr = -1; 75 76 public GroceriesModel(String [] iitems, String [] iqtys) { 78 items = iitems; 79 qtys = iqtys; 80 } 81 82 public String getName() {return "Groceries";} 84 85 public Object getItem(String 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 public void preIterate() { 96 cntr = -1; 97 } 98 99 public boolean hasNext() { 101 return (cntr<(items.length-1)); 102 } 103 104 public void loadNext() { 106 cntr++; 107 } 108 109 public void postIterate() {} 111 } 112 113 117 class HelloWorldModel extends AbstractTemplateModel { 118 String pageNo = null; 119 120 public HelloWorldModel(String ipageNo) { 122 pageNo = ipageNo; 123 } 124 125 public String getName() { 127 return "HelloWorld"; 128 } 129 130 public Object getItem(String 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 |