@Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
if (!component.isRendered())
return;
MonthTable timetableView = (MonthTable) component;
Rendering.registerDateTimeFormatObject(timetableView.getLocale());
AjaxUtil.prepareComponentForAjax(context, timetableView);
ResponseWriter writer = context.getResponseWriter();
String clientId = timetableView.getClientId(context);
Styles.renderStyleClasses(context, timetableView);
writer.startElement("table", timetableView);
writer.writeAttribute("id", clientId, "id");
writer.writeAttribute("cellspacing", "0", null);
writer.writeAttribute("cellpadding", "0", null);
writer.writeAttribute("border", "0", null);
Timetable timetable = timetableView.getTimetable();
writer.writeAttribute("class", Styles.getCSSClass(context,
timetableView, timetableView.getStyle(),
timetable == null ? "o_timetableView" : "o_timetableView o_timetableView_embedded",
timetableView.getStyleClass()), null);
Rendering.writeStandardEvents(writer, timetableView);
writer.startElement("tbody", timetableView);
renderHeader(context, timetableView);
renderWeekdayHeadersRow(context, timetableView, clientId);
ValueExpression resourcesExpression = timetableView.getResourcesValueExpression();
List<TimetableResource> resources = resourcesExpression != null
? DataUtil.readDataModelExpressionAsList(context, resourcesExpression)
: Collections.<TimetableResource>emptyList();
writer.startElement("tr", timetableView);
writer.writeAttribute("class", "o_timetableView_tableRow", null);
writer.startElement("td", timetableView);
writer.writeAttribute("style", "height: 100%", null);
renderContentTable(context, timetableView, clientId, resources);
encodeEventEditor(context, timetableView, resources);
encodeActionBar(context, timetableView);
writer.endElement("td");
writer.endElement("tr");
renderFooter(context, timetableView);
writer.endElement("tbody");
writer.endElement("table");
timetableView.getExpandedDayViewFooter();
}