1 20 package org.enhydra.barracuda.tutorials.comp; 21 22 import java.io.*; 23 import java.util.*; 24 import javax.servlet.*; 25 import javax.servlet.http.*; 26 27 import org.w3c.dom.*; 28 import org.enhydra.xml.xmlc.*; 29 30 import org.enhydra.barracuda.core.comp.*; 31 import org.enhydra.barracuda.core.comp.helper.*; 32 import org.enhydra.barracuda.core.util.dom.*; 33 import org.enhydra.barracuda.plankton.data.*; 34 import org.enhydra.barracuda.tutorials.xmlc.*; 35 36 40 public class HelloWorld3 extends ComponentGateway { 41 42 45 49 public Document handleDefault (BComponent root, ViewContext vc, HttpServletRequest req, HttpServletResponse resp) throws IOException { 50 String pageNo = req.getParameter("page"); 53 if (pageNo==null) pageNo = "1"; 54 boolean useIDTemplate = (!pageNo.equals("1")); 55 Class pageCl = HelloWorld3XML.class; 58 if (useIDTemplate) pageCl = HelloWorld3aXML.class; 59 60 64 Document page = DefaultDOMLoader.getGlobalInstance().getDOM(pageCl, vc.getViewCapabilities().getClientLocale()); 66 67 Node node = page.getDocumentElement(); 69 70 TemplateView tv = null; 72 if (useIDTemplate) { 73 String propFileName = "HelloWorld3a.properties"; 74 Properties props = new Properties(); 75 try { 76 props.load(this.getClass().getResourceAsStream(propFileName)); 77 tv = new DefaultTemplateView(node, "id", new MapStateMap(props)); 78 } catch (IOException e) { 79 System.out.println ("Fatal err loading properties file:"+e); 80 } 81 } else { 82 tv = new DefaultTemplateView(node, "tid", "tdir"); 83 } 84 85 BTemplate templateComp = new BTemplate(); 87 templateComp.setView(tv); 88 89 templateComp.addModel(new HelloWorldModel(useIDTemplate)); 91 String [] items = new String [] {"Cabbage", "Carrots", "Pickles", "Sugar", "Wheaties", "Flour", "Potatoes"}; 92 String [] qtys = new String [] {"3 heads", "1 bag", "1 jar", "5 lbs", "3 bxs", "50 lbs", "25 lbs"}; 93 templateComp.addModel(new GroceriesModel(items, qtys)); 94 95 root.addChild(templateComp); 97 98 return page; 100 } 101 102 106 class GroceriesModel extends AbstractTemplateModel implements IterativeModel { 107 108 String [] items = null; 109 String [] qtys = null; 110 int cntr = -1; 111 112 public GroceriesModel(String [] iitems, String [] iqtys) { 114 items = iitems; 115 qtys = iqtys; 116 } 117 118 public String getName() {return "Groceries";} 120 121 public Object getItem(String key) { 123 if (key.equals("Item")) return items[cntr]; 124 else if (key.equals("Qty")) return qtys[cntr]; 125 else return super.getItem(key); 126 } 127 128 public void preIterate() { 130 cntr = -1; 131 } 132 133 public boolean hasNext() { 135 return (cntr<(items.length-1)); 136 } 137 138 public void loadNext() { 140 cntr++; 141 } 142 143 public void postIterate() {} 145 } 146 147 151 class HelloWorldModel extends AbstractTemplateModel { 152 153 String source = null; 154 155 public HelloWorldModel(boolean useIDTemplate) { 156 if (useIDTemplate) source = "Here the template processing instructions are stored in a separate .properties file and just referenced using the tid attribute."; 157 else source = "Here the template processing instructions are actually stored in the template file as directives embedded in the tdir attributes."; 158 } 159 160 public String getName() { 162 return "HelloWorld"; 163 } 164 165 public Object getItem(String key) { 167 ViewContext vc = getViewContext(); 168 if (key.equals("Title")) return "Hello World 3 example"; 169 else if (key.equals("Descr")) return "This example shows BTemplate processing an XML template. "+source; 170 else if (key.equals("Hello")) return "Hello World! Hi Ma! Hi Pa!"; 171 else return super.getItem(key); 172 } 173 } 174 } 175 | Popular Tags |