Package org.openfaces.renderkit.timetable

Source Code of org.openfaces.renderkit.timetable.WeekTableRenderer

/*
* OpenFaces - JSF Component Library 2.0
* Copyright (C) 2007-2012, TeamDev Ltd.
* licensing@openfaces.org
* Unless agreed in writing the contents of this file are subject to
* the GNU Lesser General Public License Version 2.1 (the "LGPL" License).
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Please visit http://openfaces.org/licensing/ for more details.
*/
package org.openfaces.renderkit.timetable;

import org.openfaces.component.timetable.TimeScaleTable;
import org.openfaces.component.timetable.WeekTable;
import org.openfaces.org.json.JSONObject;
import org.openfaces.renderkit.TableRenderer;
import org.openfaces.util.Rendering;
import org.openfaces.util.Styles;

import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;

/**
* @author Roman Porotnikov
*/
public class WeekTableRenderer extends TimeScaleTableRenderer {

    protected String getTagName() {
        return "<o:weekTable>";
    }

    protected String getComponentName() {
        return "WeekTable";
    }

    protected String getJsLibraryName() {
        return "timetable/weekTable.js";
    }

    protected String getJsInitFunctionName() {
        return "O$.WeekTable._init";
    }

    protected int getDayCount() {
        return 7;
    }

    protected Date getFirstDayForDefaultPeriod(TimeScaleTable timetableView, TimeZone timeZone) {
        GregorianCalendar c = new GregorianCalendar(timeZone);
        Date day = timetableView.getDay();
        c.setTime(day);
        c.set(Calendar.DAY_OF_WEEK, ((WeekTable) timetableView).getFirstDayOfWeek());
        return c.getTime();
    }

    protected Date getLastDayForDefaultPeriod(TimeScaleTable timetableView, TimeZone timeZone) {
        GregorianCalendar c = new GregorianCalendar(timeZone);
        Date day = timetableView.getDay();
        c.setTime(day);
        c.set(Calendar.DAY_OF_WEEK, ((WeekTable) timetableView).getFirstDayOfWeek() + 6);
        return c.getTime();
    }

    @Override
    protected void renderSpecificHeaders(FacesContext context, final TimeScaleTable timetableView, String clientId) throws IOException {
        renderWeekdayHeadersRow(context, timetableView, clientId);
    }

    @Override
    protected void addSpecificStylingParams(FacesContext context, TimeScaleTable timetableView, JSONObject stylingParams) {
        WeekTable weekTable = (WeekTable) timetableView;
        Rendering.addJsonParam(stylingParams, "weekdayColumnSeparator", weekTable.getWeekdayColumnSeparator());
        Rendering.addJsonParam(stylingParams, "weekdayHeadersRowSeparator", weekTable.getWeekdayHeadersRowSeparator());
        Rendering.addJsonParam(stylingParams, "weekdayPattern", weekTable.getWeekdayPattern());
        Styles.addStyleJsonParam(context, weekTable, stylingParams, "weekdayHeadersRowClass",
                weekTable.getWeekdayHeadersRowStyle(), weekTable.getWeekdayHeadersRowClass());
        Styles.addStyleJsonParam(context, weekTable, stylingParams, "weekdayClass",
                weekTable.getWeekdayStyle(), weekTable.getWeekdayClass());
    }

    @Override
    protected JSONObject getCalendarOptionsObj(TimeScaleTable timetableView) {
        WeekTable weekTable = (WeekTable) timetableView;

        JSONObject calendarOptionsObj = new JSONObject();

        int firstDayOfWeek = weekTable.getFirstDayOfWeek() - 1; // JS weekdays are 0-based while Java weekdays are 1-based
        Rendering.addJsonParam(calendarOptionsObj, "firstDayOfWeek", firstDayOfWeek);
        return calendarOptionsObj;
    }

    private void renderWeekdayHeadersRow(FacesContext context, final TimeScaleTable timetableView, String clientId) throws IOException {
        ResponseWriter writer = context.getResponseWriter();

        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(timetableView.getDay());
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        calendar.add(Calendar.DATE, 1 - dayOfWeek);

        writer.startElement("tr", timetableView);
        writer.startElement("td", timetableView);

        new TableRenderer(clientId + Rendering.CLIENT_ID_SUFFIX_SEPARATOR + "weekdayHeaders", 0, 0, 0, "o_weekdayHeadersTable")
                .render(timetableView, true, 1, 9);

        writer.endElement("td");
        writer.endElement("tr");
    }

}
TOP

Related Classes of org.openfaces.renderkit.timetable.WeekTableRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.