package com.aggrepoint.winlet.jsp.taglib;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.DynamicAttributes;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* @author Jiangming Yang (yangjm@gmail.com)
*/
public class DialogTag extends BodyTagSupport implements DynamicAttributes {
private static final long serialVersionUID = 1L;
HashMap<String, String> attributes = new HashMap<String, String>();
ArrayList<HashMap<String, String>> buttons;
void addButton(HashMap<String, String> button) {
buttons.add(button);
}
@Override
public int doStartTag() {
buttons = new ArrayList<HashMap<String, String>>();
return EVAL_BODY_BUFFERED;
}
@Override
public int doAfterBody() {
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspTagException {
HashMap<String, Object> obj = new HashMap<String, Object>();
for (String key : attributes.keySet())
obj.put(key, attributes.get(key));
if (buttons.size() > 0)
obj.put("buttons", buttons);
Writer out = pageContext.getOut();
try {
out.write("<div id=\"winlet_dialog\" style=\"display:none\">");
out.write(new ObjectMapper().writeValueAsString(obj));
out.write("</div>");
} catch (IOException e) {
throw new JspTagException(e.getMessage());
}
if (getBodyContent() != null)
getBodyContent().clearBody();
attributes = new HashMap<String, String>();
return EVAL_PAGE;
}
@Override
public void setDynamicAttribute(String uri, String localName, Object value)
throws JspException {
attributes.put(localName, value.toString());
}
}