Package org.opencustomer.webapp.taglib

Source Code of org.opencustomer.webapp.taglib.JsCalendarTag

package org.opencustomer.webapp.taglib;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.struts.taglib.TagUtils;
import org.opencustomer.framework.webapp.util.MessageUtil;
import org.opencustomer.util.configuration.UserConfiguration;
import org.opencustomer.webapp.Globals;

public final class JsCalendarTag extends TagSupport
{
    private static final long serialVersionUID = 428305407335964656L;
   
    private String input;
   
    private String button;
   
    private String formatKey;
   
    private boolean disabled;
   
    @Override
    public int doStartTag() throws JspException
    {
        UserConfiguration conf = (UserConfiguration)pageContext.getSession().getAttribute(Globals.CONFIGURATION_KEY);

        boolean isDisabled = disabled;
        if(pageContext.getAttribute("i_panel_editable") != null) {
            if(pageContext.getAttribute("i_panel_editable").equals(Boolean.FALSE))
                isDisabled = true;
        }
       
        if(!isDisabled) {
            StringBuilder builder = new StringBuilder();
           
            builder.append("<script type=\"text/javascript\">");
           
            if(pageContext.getAttribute("jsCalendar_isLocaleInitialized") == null) {
                initLocale(builder);
               
                pageContext.setAttribute("jsCalendar_isLocaleInitialized", Boolean.TRUE);
            }
           
            builder.append("Calendar.setup(");
            builder.append("{");
           
            builder.append("inputField : \""+input+"\",");
            builder.append("button : \""+button+"\",");
            if(formatKey != null) {
                String jsFormat = getJsFormat(formatKey);
                builder.append("ifFormat : \""+jsFormat+"\",");
   
                if(jsFormat.contains("%M")
                        ||jsFormat.contains("%H")
                        || jsFormat.contains("%k")
                        || jsFormat.contains("%I")
                        || jsFormat.contains("%l")) {
                    builder.append("showsTime : true,");
                    builder.append("singleClick : false,");
                }
   
                if(jsFormat.contains("%I")
                        || jsFormat.contains("%l")) {
                    builder.append("timeFormat : \"12\",");
                } else {
                    builder.append("timeFormat : \"24\",");
                }
            }
            builder.append("step : 5,");
            builder.append("firstDay : "+getJsFirstDayOfWeek(conf.getIntValue(UserConfiguration.Key.CALENDAR_FIRST_DAY_OF_WEEK)));
            builder.append("}");
            builder.append(");");
            builder.append("</script>");
           
            TagUtils.getInstance().write(pageContext, builder.toString());
        }
       
        return super.doStartTag();
    }
   
    private void initLocale(StringBuilder builder) {
        Locale locale = (Locale)pageContext.getSession().getAttribute(org.apache.struts.Globals.LOCALE_KEY);
       
        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();       
        //MessageUtil.message(request, formatKey);
       
        Calendar cal = GregorianCalendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("EEEE", locale);
       
        builder.append("\nCalendar._DN = new Array");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        builder.append("(\""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\");\n");

        sdf = new SimpleDateFormat("EE", locale);
       
        builder.append("Calendar._SDN = new Array");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        builder.append("(\""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\");\n");

        // set to first of month
        cal.set(Calendar.DAY_OF_MONTH, 1);

        sdf = new SimpleDateFormat("MMMM", locale);
       
        builder.append("Calendar._MN = new Array");
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        builder.append("(\""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.MARCH);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.APRIL);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.MAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.JUNE);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.JULY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.AUGUST);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.OCTOBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.NOVEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\");\n");

        sdf = new SimpleDateFormat("MMM", locale);
       
        builder.append("Calendar._SMN = new Array");
        cal.set(Calendar.MONTH, Calendar.JANUARY);
        builder.append("(\""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.FEBRUARY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.MARCH);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.APRIL);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.MAY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.JUNE);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.JULY);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.AUGUST);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.OCTOBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.NOVEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\",");
        cal.set(Calendar.MONTH, Calendar.DECEMBER);
        builder.append(" \""+sdf.format(cal.getTime())+"\");\n");

        builder.append("Calendar._TT = {};\n");
        builder.append("Calendar._TT[\"INFO\"] = \""+MessageUtil.message(request, "default.jscalendar.INFO")+"\";\n");

        builder.append("Calendar._TT[\"ABOUT\"] =");
        builder.append("\"DHTML Date/Time Selector\\n");
        builder.append("(c) dynarch.com 2002-2005 / Author: Mihai Bazon\\n");
        builder.append("For latest version visit: http://www.dynarch.com/projects/calendar/\\n");
        builder.append("Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details.");
        builder.append("\\n\\n");
        builder.append(MessageUtil.message(request, "default.jscalendar.ABOUT"));
        builder.append("\";");       
        builder.append("\nCalendar._TT[\"ABOUT_TIME\"] = \""+MessageUtil.message(request, "default.jscalendar.ABOUT_TIME")+"\";");

        builder.append("\nCalendar._TT[\"TOGGLE\"] = \""+MessageUtil.message(request, "default.jscalendar.TOGGLE")+"\";\n");
        builder.append("Calendar._TT[\"PREV_YEAR\"] = \""+MessageUtil.message(request, "default.jscalendar.PREV_YEAR")+"\";\n");
        builder.append("Calendar._TT[\"PREV_MONTH\"] = \""+MessageUtil.message(request, "default.jscalendar.PREV_MONTH")+"\";\n");
        builder.append("Calendar._TT[\"GO_TODAY\"] = \""+MessageUtil.message(request, "default.jscalendar.GO_TODAY")+"\";\n");
        builder.append("Calendar._TT[\"NEXT_MONTH\"] = \""+MessageUtil.message(request, "default.jscalendar.NEXT_MONTH")+"\";\n");
        builder.append("Calendar._TT[\"NEXT_YEAR\"] = \""+MessageUtil.message(request, "default.jscalendar.NEXT_YEAR")+"\";\n");
        builder.append("Calendar._TT[\"SEL_DATE\"] = \""+MessageUtil.message(request, "default.jscalendar.SEL_DATE")+"\";\n");
        builder.append("Calendar._TT[\"DRAG_TO_MOVE\"] = \""+MessageUtil.message(request, "default.jscalendar.DRAG_TO_MOVE")+"\";\n");
        builder.append("Calendar._TT[\"PART_TODAY\"] = \""+MessageUtil.message(request, "default.jscalendar.PART_TODAY")+"\";\n");

        builder.append("Calendar._TT[\"DAY_FIRST\"] = \""+MessageUtil.message(request, "default.jscalendar.DAY_FIRST")+"\";\n");

        builder.append("Calendar._TT[\"WEEKEND\"] = \"0,6\";\n");

        builder.append("Calendar._TT[\"CLOSE\"] = \""+MessageUtil.message(request, "default.jscalendar.CLOSE")+"\";\n");
        builder.append("Calendar._TT[\"TODAY\"] = \""+MessageUtil.message(request, "default.jscalendar.TODAY")+"\";\n");
        builder.append("Calendar._TT[\"TIME_PART\"] = \""+MessageUtil.message(request, "default.jscalendar.TIME_PART")+"\";\n");

        builder.append("Calendar._TT[\"DEF_DATE_FORMAT\"] = \"%d.%m.%Y\";\n");
        builder.append("Calendar._TT[\"TT_DATE_FORMAT\"] = \"%A (%d.%m.%Y)\";\n");

        builder.append("Calendar._TT[\"WK\"] = \""+MessageUtil.message(request, "default.jscalendar.WK")+"\";\n");
        builder.append("Calendar._TT[\"TIME\"] = \""+MessageUtil.message(request, "default.jscalendar.TIME")+"\";\n");
    }
   
    private int getJsFirstDayOfWeek(final int firstDayOfWeek) {
        int jsFirstDayOfWeek = 1;
       
        switch(firstDayOfWeek) {
            case Calendar.MONDAY:
                jsFirstDayOfWeek = 1;
                break;
            case Calendar.TUESDAY:
                jsFirstDayOfWeek = 2;
                break;
            case Calendar.WEDNESDAY:
                jsFirstDayOfWeek = 3;
                break;
            case Calendar.THURSDAY:
                jsFirstDayOfWeek = 4;
                break;
            case Calendar.FRIDAY:
                jsFirstDayOfWeek = 5;
                break;
            case Calendar.SATURDAY:
                jsFirstDayOfWeek = 6;
                break;
            case Calendar.SUNDAY:
                jsFirstDayOfWeek = 0;
                break;
        }
       
        return jsFirstDayOfWeek;
    }

    private String getJsFormat(String format) {
        HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();       
        String jsFormat = MessageUtil.message(request, formatKey);

        if(jsFormat.contains("HH"))
            jsFormat = jsFormat.replaceAll("HH", "%H");
        else if(jsFormat.contains("H"))
            jsFormat = jsFormat.replaceAll("H", "%k");
        else if(jsFormat.contains("hh"))
            jsFormat = jsFormat.replaceAll("hh", "%I");
        else if(jsFormat.contains("h"))
            jsFormat = jsFormat.replaceAll("h", "%l");
       
        if(jsFormat.contains("mm"))
            jsFormat = jsFormat.replaceAll("mm", "%M");
        else if(jsFormat.contains("m"))
            jsFormat = jsFormat.replaceAll("m", "%M");
       
        if(jsFormat.contains("yyyy"))
            jsFormat = jsFormat.replaceAll("yyyy", "%Y");
        else if(jsFormat.contains("yyy"))
            jsFormat = jsFormat.replaceAll("yyy", "%y");
        else if(jsFormat.contains("yy"))
            jsFormat = jsFormat.replaceAll("yy", "%Y");
        else if(jsFormat.contains("y"))
            jsFormat = jsFormat.replaceAll("y", "%Y");

        if(jsFormat.contains("MMMM"))
            jsFormat = jsFormat.replaceAll("MMMM", "%B");
        else if(jsFormat.contains("MMM"))
            jsFormat = jsFormat.replaceAll("MMM", "%b");
        else if(jsFormat.contains("MM"))
            jsFormat = jsFormat.replaceAll("MM", "%m");

        if(jsFormat.contains("dd"))
            jsFormat = jsFormat.replaceAll("dd", "%d");
        else if(jsFormat.contains("d"))
            jsFormat = jsFormat.replaceAll("d", "%e");
        else if(jsFormat.contains("d"))
            jsFormat = jsFormat.replaceAll("d", "%e");
       
        if(jsFormat.contains("DDD"))
            jsFormat = jsFormat.replaceAll("DDD", "%j");
        else if(jsFormat.contains("DD"))
            jsFormat = jsFormat.replaceAll("DD", "%j");
        else if(jsFormat.contains("D"))
            jsFormat = jsFormat.replaceAll("D", "%j");
       
        if(jsFormat.contains("'"))
            jsFormat = jsFormat.replaceAll("'", "");
       
        return jsFormat;
    }

    public final String getButton()
    {
        return button;
    }
   

    public final void setButton(String button)
    {
        this.button = button;
    }
   

    public final String getFormatKey()
    {
        return formatKey;
    }
   

    public final void setFormatKey(String formatKey)
    {
        this.formatKey = formatKey;
    }
   

    public final String getInput()
    {
        return input;
    }
   

    public final void setInput(String input)
    {
        this.input = input;
    }

    public boolean isDisabled()
    {
        return disabled;
    }

    public void setDisabled(boolean disabled)
    {
        this.disabled = disabled;
    }  
   
}
TOP

Related Classes of org.opencustomer.webapp.taglib.JsCalendarTag

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.