Package org.apache.openmeetings.servlet.outputhandler

Source Code of org.apache.openmeetings.servlet.outputhandler.CalendarServlet

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") +  you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openmeetings.servlet.outputhandler;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.openmeetings.OpenmeetingsVariables;
import org.apache.openmeetings.data.basic.SessiondataDao;
import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
import org.apache.openmeetings.data.user.UserManager;
import org.apache.openmeetings.persistence.beans.calendar.Appointment;
import org.apache.openmeetings.persistence.beans.calendar.MeetingMember;
import org.apache.openmeetings.servlet.BaseHttpServlet;
import org.apache.openmeetings.servlet.ServerNotInitializedException;
import org.apache.openmeetings.utils.math.TimezoneUtil;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;

public class CalendarServlet extends BaseHttpServlet {
 
  private static final long serialVersionUID = 2192254610711799347L;
 
  private static final Logger log = Red5LoggerFactory.getLogger(
      Calendar.class, OpenmeetingsVariables.webAppRootKey);

  @Override
  protected void service(HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) throws ServletException,
      IOException {

    try {
      String sid = httpServletRequest.getParameter("sid");

      if (sid == null) {
        sid = "default";
      }
      log.debug("sid: " + sid);

      Long users_id = getBean(SessiondataDao.class).checkSession(sid);
      Long user_level = getBean(UserManager.class).getUserLevelByID(users_id);

      if (user_level != null && user_level > 0) {

        String timeZoneIdAsStr = httpServletRequest
            .getParameter("timeZoneId");

        if (timeZoneIdAsStr == null) {
          log.error("No timeZoneIdAsStr given, using default");
          timeZoneIdAsStr = "";
        }

        TimeZone timezone = getBean(TimezoneUtil.class)
            .getTimezoneByOmTimeZoneId(
                Long.valueOf(timeZoneIdAsStr).longValue());

        String yearStr = httpServletRequest.getParameter("year");
        String monthStr = httpServletRequest.getParameter("month");
        String userStr = httpServletRequest.getParameter("user");
        String contactUser = httpServletRequest
            .getParameter("contactUser");

        Calendar starttime = GregorianCalendar.getInstance(timezone);
        starttime.set(Calendar.DATE, 1);
        starttime.set(Calendar.MONTH, Integer.parseInt(monthStr) - 1);
        starttime.set(Calendar.MINUTE, 0);
        starttime.set(Calendar.SECOND, 0);
        starttime.set(Calendar.YEAR, Integer.parseInt(yearStr));

        Calendar endtime = GregorianCalendar.getInstance(timezone);
        endtime.set(Calendar.DATE, 1);
        endtime.set(Calendar.MONTH, Integer.parseInt(monthStr));
        endtime.set(Calendar.MINUTE, 0);
        endtime.set(Calendar.SECOND, 0);
        endtime.set(Calendar.YEAR, Integer.parseInt(yearStr));

        Long userToShowId = Long.parseLong(contactUser);
        if (userToShowId == 0) {
          userToShowId = Long.parseLong(userStr);
        }

        List<Appointment> appointements = getBean(AppointmentLogic.class)
            .getAppointmentByRange(userToShowId,
                new Date(starttime.getTimeInMillis()),
                new Date(endtime.getTimeInMillis()));

        Document document = DocumentHelper.createDocument();
        document.setXMLEncoding("UTF-8");
        document.addComment("###############################################\n"
            + getServletContext().getServletContextName()
            + " Calendar \n"
            + "###############################################");

        Element vcalendar = document.addElement("vcalendar");

        Element year = vcalendar.addElement("year" + yearStr);
        Element month = year.addElement("month" + monthStr);

        int previousDay = 0;
        Element day = null;

        for (Appointment appointment : appointements) {

          Calendar appStart = Calendar.getInstance(timezone);
          appStart.setTime(appointment.getAppointmentStarttime());

          int dayAsInt = appStart.get(Calendar.DATE);

          if (previousDay != dayAsInt) {

            day = month.addElement("day" + dayAsInt);

            previousDay = dayAsInt;

          }

          if (appStart.get(Calendar.MONTH) + 1 == Integer
              .parseInt(monthStr)) {

            Element event = day.addElement("event");

            Element appointementId = event
                .addElement("appointementId");
            appointementId.addAttribute("value",
                "" + appointment.getAppointmentId());

            Element isConnectedEvent = event
                .addElement("isConnectedEvent");
            isConnectedEvent.addAttribute("value",
                "" + appointment.getIsConnectedEvent());

            Element rooms_id = event.addElement("rooms_id");
            Element roomtype = event.addElement("roomtype");
            if (appointment.getRoom() != null) {
              rooms_id.addAttribute("value", ""
                  + appointment.getRoom().getRooms_id());
              roomtype.addAttribute("value", ""
                  + appointment.getRoom().getRoomtype()
                      .getRoomtypes_id());
            } else {
              rooms_id.addAttribute("value", "0");
              roomtype.addAttribute("value", "1");
            }
            Element remindType = event.addElement("remindtype");
            remindType.addAttribute("value", appointment
                .getRemind() != null ? ""
                + appointment.getRemind().getTypId() : "0");

            Element summary = event.addElement("summary");
            summary.addAttribute("value",
                appointment.getAppointmentName());

            Element comment = event.addElement("comment");
            comment.addAttribute("value",
                appointment.getAppointmentDescription());

            Element start = event.addElement("start");

            start.addAttribute("year",
                "" + appStart.get(Calendar.YEAR));
            start.addAttribute("month",
                "" + (appStart.get(Calendar.MONTH) + 1));
            start.addAttribute("day",
                "" + appStart.get(Calendar.DATE));
            start.addAttribute("hour",
                "" + appStart.get(Calendar.HOUR_OF_DAY));
            start.addAttribute("minute",
                "" + appStart.get(Calendar.MINUTE));

            Calendar appEnd = Calendar.getInstance(timezone);
            appEnd.setTime(appointment.getAppointmentEndtime());
            Element end = event.addElement("end");
            end.addAttribute("year", "" + appEnd.get(Calendar.YEAR));
            end.addAttribute("month",
                "" + (appEnd.get(Calendar.MONTH) + 1));
            end.addAttribute("day", "" + appEnd.get(Calendar.DATE));
            end.addAttribute("hour", "" + appEnd.get(Calendar.HOUR_OF_DAY));
            end.addAttribute("minute",
                "" + appEnd.get(Calendar.MINUTE));

            Element category = event.addElement("category");
            category.addAttribute("value", ""
                + appointment.getAppointmentCategory()
                    .getCategoryId());

            Element uid = event.addElement("uid");
            uid.addAttribute("value",
                "" + appointment.getAppointmentId());

            Element attendees = event.addElement("attendees");

            for (MeetingMember meetingMember : appointment
                .getMeetingMember()) {

              Element attendee = attendees.addElement("attendee");

              Element email = attendee.addElement("email");
              email.addAttribute("value",
                  meetingMember.getEmail());

              Element userId = attendee.addElement("userId");
              if (meetingMember.getUserid() != null) {
                userId.addAttribute("value", ""
                    + meetingMember.getUserid()
                        .getUser_id());
              } else {
                userId.addAttribute("value", "");
              }

              Element memberId = attendee.addElement("memberId");
              memberId.addAttribute("value",
                  "" + meetingMember.getMeetingMemberId());

              Element firstname = attendee
                  .addElement("firstname");
              memberId.addAttribute("value",
                  "" + meetingMember.getMeetingMemberId());
              firstname.addAttribute("value",
                  meetingMember.getFirstname());

              Element lastname = attendee.addElement("lastname");
              lastname.addAttribute("value",
                  meetingMember.getLastname());

              Element jNameTimeZoneMember = attendee
                  .addElement("jNameTimeZone");
              if (meetingMember.getOmTimeZone() != null) {
                jNameTimeZoneMember.addAttribute("value",
                    meetingMember.getOmTimeZone()
                        .getJname());
              } else {
                jNameTimeZoneMember.addAttribute("value", "");
              }

            }

          }

        }

        httpServletResponse.reset();
        httpServletResponse.resetBuffer();
        OutputStream out = httpServletResponse.getOutputStream();
        httpServletResponse.setContentType("text/xml");

        // httpServletResponse.setHeader("Content-Length", ""+
        // rf.length());

        OutputFormat outformat = OutputFormat.createPrettyPrint();
        outformat.setEncoding("UTF-8");
        XMLWriter writer = new XMLWriter(out, outformat);
        writer.write(document);
        writer.flush();

        out.flush();
        out.close();

      }
    } catch (ServerNotInitializedException e) {
      return;
    } catch (Exception er) {
      log.error("[Calendar :: service]", er);
    }
  }

}
TOP

Related Classes of org.apache.openmeetings.servlet.outputhandler.CalendarServlet

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.