package org.infoglue.calendar.servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringEscapeUtils; import org.apache.log4j.Logger; import org.hibernate.Session; import org.hibernate.Transaction; import org.infoglue.calendar.controllers.CalendarController; import org.infoglue.calendar.controllers.CategoryController; import org.infoglue.calendar.entities.Calendar; import org.infoglue.calendar.entities.Category; import org.infoglue.common.util.HibernateUtil; import org.infoglue.common.util.PropertyHelper; /** * Servlet implementation class CategoryServlet */ public class CategoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; private final static Logger logger = Logger.getLogger(CategoryServlet.class.getName()); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer sb = new StringBuffer(); try { Session session = HibernateUtil.currentSession(); Transaction tx = null; try { tx = session.beginTransaction(); String languageCode = "en"; String languageCodeParameter = request.getParameter("languageCode"); if(languageCodeParameter != null && !languageCodeParameter.equals("")) languageCode = languageCodeParameter; StringBuffer allCategoriesProperty = new StringBuffer(""); Category filterCategory = CategoryController.getController().getCategoryByPath(session, PropertyHelper.getProperty("filterCategoryPath")); Set<Category> categorySet = filterCategory.getChildren(); // Add all categories to a map (sorted) Map<String,Category> categoryMap = new TreeMap<String, Category>(); Iterator categoryIterator = categorySet.iterator(); while(categoryIterator.hasNext()) { Category category = (Category)categoryIterator.next(); categoryMap.put(category.getLocalizedName(languageCode, "en").toLowerCase(), category); } // Iterate the sorted map Iterator categorySetIterator = categoryMap.keySet().iterator(); while(categorySetIterator.hasNext()) { Category category = (Category)categoryMap.get(categorySetIterator.next()); sb.append(" <property name=\"" + category.getLocalizedName(languageCode, "en") + "\" value=\"" + category.getInternalName() + "\"/>"); if(allCategoriesProperty.length() > 0) allCategoriesProperty.append(","); allCategoriesProperty.append(category.getInternalName()); } // Original version /* Iterator categorySetIterator = categorySet.iterator(); while(categorySetIterator.hasNext()) { Category category = (Category)categorySetIterator.next(); sb.append(" <property name=\"" + category.getLocalizedName(languageCode, "en") + "\" value=\"" + category.getInternalName() + "\"/>"); if(allCategoriesProperty.length() > 0) allCategoriesProperty.append(","); allCategoriesProperty.append(category.getInternalName()); } */ sb.insert(0, "<?xml version=\"1.0\" encoding=\"UTF-8\"?><properties><property name=\"All\" value=\"" + allCategoriesProperty + "\"/>"); sb.append("</properties>"); tx.commit(); } catch (Exception e) { if (tx!=null) tx.rollback(); throw e; } finally { HibernateUtil.closeSession(); } } catch(Exception e) { logger.error("En error occurred when we tried to create a new contentVersion:" + e.getMessage(), e); } response.setContentType("text/xml"); PrintWriter pw = response.getWriter(); pw.println(sb.toString()); pw.flush(); pw.close(); } }