package com.extjs.gxt.samples.server; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.extjs.gxt.samples.resources.client.TestData; import com.extjs.gxt.samples.resources.client.model.Folder; import com.extjs.gxt.ui.client.data.ModelData; public class XmlTreeServlet extends HttpServlet { private Folder root = TestData.getTreeModel(); private Map<Integer, Folder> folders = new HashMap<Integer, Folder>(); public XmlTreeServlet() { processFolder(root); } private void processFolder(Folder folder) { folders.put(folder.getId(), folder); for (ModelData model : folder.getChildren()) { if (model instanceof Folder) { Folder child = (Folder) model; processFolder(child); } } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); Folder folder = null; if (id != null) { Integer iid = Integer.parseInt(id); folder = folders.get(iid); } else { folder = root; } String xml = generateXml(folder); resp.setContentType("text/xml"); PrintWriter out = resp.getWriter(); out.println(xml); out.flush(); } private String generateXml(Folder folder) { StringBuffer sb = new StringBuffer(); sb.append("<items>"); for (ModelData child : folder.getChildren()) { sb.append("<item folder=\"" + (child instanceof Folder ? "true" : "false") + "\" name=\"" + child.get("name") + "\" id=\"" + child.get("id") + "\">"); sb.append("</item>"); } sb.append("</items>"); return sb.toString(); } }