Package com.agiletec.plugins.jpcalendar.aps.tags.helper

Source Code of com.agiletec.plugins.jpcalendar.aps.tags.helper.CalendarTagHelper

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpcalendar.aps.tags.helper;

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import com.agiletec.aps.util.DateConverter;
import com.agiletec.plugins.jpcalendar.aps.tags.util.ApsCalendar;
import com.agiletec.plugins.jpcalendar.aps.tags.util.CellaCalendar;

/**
* Helper for Calendar Tag
*
* */
public class CalendarTagHelper {

  public Calendar getPrevMonth(Calendar cal) {
    Calendar prevCal = (Calendar) cal.clone();
    if (prevCal.get(Calendar.MONTH) == Calendar.JANUARY) {
      prevCal.set(Calendar.MONTH, Calendar.DECEMBER);
      prevCal.set(Calendar.YEAR, prevCal.get(Calendar.YEAR) - 1);
    } else {
      prevCal.set(Calendar.MONTH, prevCal.get(Calendar.MONTH) - 1);
    }
    return prevCal;
  }

  public Calendar getNextMonth(Calendar cal) {
    Calendar nextCal = (Calendar) cal.clone();
    if (nextCal.get(Calendar.MONTH) == Calendar.DECEMBER) {
      nextCal.set(Calendar.MONTH, Calendar.JANUARY);
      nextCal.set(Calendar.YEAR, nextCal.get(Calendar.YEAR) + 1);
    } else {
      nextCal.set(Calendar.MONTH, nextCal.get(Calendar.MONTH) + 1);
    }
    return nextCal;
  }

  public int[] getYears(int firstYear, int lastYear) {
    int lenght = (lastYear - firstYear + 2);
    int[] years = new int[lenght];
    for (int i = 0; i < years.length; i++) {
      years[i] = firstYear;
      firstYear++;
    }
    return years;
  }

  /**
   * Create the calendar for month and year required; if month and year are
   * not specified, it returns the calendar for the current month
   *
   * @param request
   *            the request
   * @return the required Calendar
   */
  public Calendar getRequiredCalendar(String monthString, String yearString, String selectedDate, String datePattern, Calendar lastRequiredCalendar) {
    Calendar cal = Calendar.getInstance(Locale.ENGLISH);
    cal.setTime(new Date());
    cal.set(Calendar.DAY_OF_MONTH, 1);
    if (null != monthString && null != yearString
        && monthString.length() > 0 && yearString.length() > 0) {
      int month = Integer.parseInt(monthString);
      int year = Integer.parseInt(yearString);
      cal.set(Calendar.MONTH, month);
      cal.set(Calendar.YEAR, year);
    } else if (null != selectedDate) {
      if (selectedDate != null && selectedDate.length() > 0) {
        Date date = DateConverter.parseDate(selectedDate, datePattern);
        if (date != null)
          cal.setTime(date);
        return cal;
      }
    } else {
//      Calendar lastRequiredCalendar = (Calendar) this.pageContext
//          .getSession().getAttribute(
//              LAST_REQUIRED_CALENDAR_SESSION_PARAM);
      if (lastRequiredCalendar != null)
        return lastRequiredCalendar;
    }
    return cal;
  }

  public ApsCalendar getCalendarioDelMese(Calendar cal, int[] array, String datePattern) {
    cal.set(Calendar.DAY_OF_MONTH, 1);
    int righe = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);

    int giornoSettimanaPrimoDelMese = cal.get(Calendar.DAY_OF_WEEK) - 2;
    // Sapendo che il calendario richiesto parte da 1
    if (giornoSettimanaPrimoDelMese < 0) {
      righe++;
    }

    cal.set(Calendar.DAY_OF_MONTH, cal
        .getActualMaximum(Calendar.DAY_OF_MONTH));
    int giornoSettimanaUltimoDelMese = cal.get(Calendar.DAY_OF_WEEK) - 2;
    if (giornoSettimanaUltimoDelMese < 0) {
      righe--;
    }

    cal.set(Calendar.DAY_OF_MONTH, 1);

    int colonne = 7;
    CellaCalendar[][] mese = new CellaCalendar[righe][colonne];
    ApsCalendar apsCalendar = new ApsCalendar();
    apsCalendar.setCalendario(mese);
    apsCalendar.setData(cal.getTime());
    apsCalendar.setSettimane(this.getNumeriSettimana(cal, righe));

    int settimanaCorrente = 0;
    int indiceGiornoSettimana = cal.get(Calendar.DAY_OF_WEEK) - 2;
    if (indiceGiornoSettimana < 0) {
      indiceGiornoSettimana = 7 + indiceGiornoSettimana;
    }
    int giornoMaxDelMese = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    for (int i = 1; i <= giornoMaxDelMese; i++) {
      cal.set(Calendar.DAY_OF_MONTH, i);
      CellaCalendar cella = new CellaCalendar();
      cella.setDay(i);
      cella.setFormattedDate(DateConverter.getFormattedDate(cal.getTime(), datePattern));
      int events = array[i - 1];
      cella.setHasEvents(events > 0);
      mese[settimanaCorrente][indiceGiornoSettimana] = cella;
      indiceGiornoSettimana++;
      if (indiceGiornoSettimana > 6) {
        ++settimanaCorrente;
        indiceGiornoSettimana = 0;
      }
    }
    return apsCalendar;
  }

  private int[] getNumeriSettimana(Calendar requiredCalendar, int righe) {
    int[] settimane = new int[righe];
    Calendar clone2 = Calendar.getInstance(Locale.ENGLISH);
    clone2.setTime(requiredCalendar.getTime());
    int j = 0;
    while ( j < righe) {
      int currentWeek = clone2.get(Calendar.WEEK_OF_YEAR);
      settimane[j++] = currentWeek;
      clone2.set(Calendar.WEEK_OF_YEAR, currentWeek+1);
    }
    return settimane;
  }

}
TOP

Related Classes of com.agiletec.plugins.jpcalendar.aps.tags.helper.CalendarTagHelper

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.