protected void encodeMessage(FacesContext facesContext, UIComponent component, Object msg)
     throws IOException {
   // TODO fix generator to properly detect iteration variable type
   MessageForRender message = (MessageForRender) msg;
   String summary = message.getSummary();
   String detail = message.getDetail();
   boolean showSummary = true;
   boolean showDetail = false;
   boolean isMessages = false;
   if (isComponentMessage(component)) {
     UIMessage uiMessage = (UIMessage) component;
     showSummary = uiMessage.isShowSummary();
     showDetail = uiMessage.isShowDetail();
   } else if (isComponentMessages(component)) {
     UIMessages uiMessages = (UIMessages) component;
     showSummary = uiMessages.isShowSummary();
     showDetail = uiMessages.isShowDetail();
     isMessages = true;
   }
   ResponseWriter responseWriter = facesContext.getResponseWriter();
   // Message id
   responseWriter.writeAttribute(
       "id", component.getClientId() + ':' + message.getSourceId(), null);
   // tooltip
   boolean wroteTooltip = RendererUtils.getInstance().isBooleanAttribute(component, "tooltip");
   if (wroteTooltip && !Strings.isNullOrEmpty(summary)) {
     responseWriter.writeAttribute("title", summary, null);
   }
   if (!wroteTooltip && showSummary) {
     writeMessageLabel(responseWriter, summary, isMessages ? "rf-msgs-sum" : "rf-msg-sum");
   }
   if (showDetail) {
     writeMessageLabel(responseWriter, detail, isMessages ? "rf-msgs-det" : "rf-msg-det");
   }
   message.rendered();
 }