iCal4j и использование простых лиц p.schedule - PullRequest
0 голосов
/ 30 августа 2018

Я сейчас пытаюсь использовать ical4j и p: schedule

Я генерирую события ical4j, как показано ниже:

public void createEvent(BookingDate bookingDate, Mandatory mandatory, Employee employee)
        throws FileNotFoundException, IOException, ParserException, ConstraintViolationException {

    // Create a TimeZone
    System.setProperty("net.fortuna.ical4j.timezone.cache.impl", MapTimeZoneCache.class.getName());

    TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
    TimeZone timezone = registry.getTimeZone("Europe/Berlin");
    VTimeZone tz = timezone.getVTimeZone();

    String pathMandatoryFile = null;
    String pathEmployeeFile = null;

    // Reading the file and creating the calendar

    Calendar icsCalendar = null;


    if (bookingDate.isCreateCalendarMandatoryEntry()) {
        // timezone = registry.getTimeZone(mandatory.getTimeZone());

        pathMandatoryFile = mandatory.getDirectoryRootFolder();
        pathMandatoryFile = pathMandatoryFile + File.separator + ConstantsStorage.CALENDAR_FOLDER + File.separator
                + "calendar.ics";

        try {
            FileInputStream fin = new FileInputStream(pathMandatoryFile);
            CalendarBuilder builder = new CalendarBuilder();
            icsCalendar = builder.build(fin);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // Wenn noch kein Kalender vorhanden, dann erstellen
        if (icsCalendar == null) {
            icsCalendar = createNewCalender(pathMandatoryFile);
        }
    }

    // Creating an event
    java.util.Calendar startCal = java.util.Calendar.getInstance(timezone);
    startCal.set(java.util.Calendar.YEAR, bookingDate.getStartDate().getYear());
    startCal.set(java.util.Calendar.MONTH, bookingDate.getStartDate().getMonth());
    startCal.set(java.util.Calendar.DAY_OF_MONTH, bookingDate.getStartDate().getDate());
    startCal.set(java.util.Calendar.HOUR_OF_DAY, bookingDate.getStartDate().getHours());
    startCal.set(java.util.Calendar.MINUTE, bookingDate.getStartDate().getMinutes());
    startCal.set(java.util.Calendar.SECOND, bookingDate.getStartDate().getSeconds());

    java.util.Calendar endCal = java.util.Calendar.getInstance(timezone);
    endCal.set(java.util.Calendar.YEAR, bookingDate.getEndDate().getYear());
    endCal.set(java.util.Calendar.MONTH, bookingDate.getEndDate().getMonth());
    endCal.set(java.util.Calendar.DAY_OF_MONTH, bookingDate.getEndDate().getDate());
    endCal.set(java.util.Calendar.HOUR_OF_DAY, bookingDate.getEndDate().getHours());
    endCal.set(java.util.Calendar.MINUTE, bookingDate.getEndDate().getMinutes());
    endCal.set(java.util.Calendar.SECOND, bookingDate.getEndDate().getSeconds());

    net.fortuna.ical4j.model.DateTime dtStart = new DateTime(startCal.getTime());
    dtStart.setTimeZone(timezone);


    net.fortuna.ical4j.model.DateTime dtEnd = new DateTime(endCal.getTime());
    dtEnd.setTimeZone(timezone);


    String eventName = bookingDate.getName();
    VEvent meeting = new VEvent(dtStart, dtEnd, eventName);

    // add timezone info..
    meeting.getProperties().add(tz.getTimeZoneId());
    String uidValue = bookingDate.getIdHash();
    meeting.getProperties().add(new Uid(uidValue));

    // Add the event and print
    icsCalendar.getComponents().add(meeting);

    CalendarOutputter outputter = new CalendarOutputter();
    FileOutputStream fout = new FileOutputStream(pathMandatoryFile);
    outputter.output(icsCalendar, fout);

}

Мой вывод в .cal - Файл:

BEGIN:VCALENDAR

PRODID: - // Бен Фортуна // iCal4j 1.0 // RU VERSION: 2,0 CALSCALE: GREGORIAN НАЧАТЬ: VEVENT DTSTAMP: 20180830T200603Z DTSTART; TZID = Europe / Berlin: 01180808T000000 DTEND; TZID = Europe / Berlin: 01180808T000000 РЕЗЮМЕ: Megatest TZID: Европа / Берлин UID: 1535659563533-b091a66c-5a0e-4730-bba2-cf94e6763514 END: VEVENT НАЧАТЬ: VEVENT DTSTAMP: 20180830T202034Z DTSTART; TZID = Europe / Berlin: 01180806T000000 DTEND; TZID = Europe / Berlin: 01180806T000000 Сущность изобретения: даша TZID: Европа / Берлин UID: 1535660434464-3db07bd9-eff0-4c28-9178-5cca1be89e23 END: VEVENT НАЧАТЬ: VEVENT DTSTAMP: 20180830T202245Z DTSTART; TZID = Europe / Berlin: 01180830T230000 DTEND; TZID = Europe / Berlin: 01180830T231000 РЕЗЮМЕ: Тест TZID: Европа / Берлин UID: 1535660565611-a9341234-5186-469e-9ad6-5b9c754221e7 END: VEVENT END: VCALENDAR

Сейчас я пытаюсь использовать p: schedule, чтобы отобразить его в расписании, но он не работает (наверное, из-за неправильного формата даты для расписания p:, потому что список включает мои события ... )

Вот мой код для Primefaces p: schedule:

public void loadAllEvents() {
    lazyEventModel = new LazyScheduleModel() {

        @Override
        public void loadEvents(Date start, Date end) {
            try {

                CalendarExtern calendarExtern = new CalendarExtern();
                calendarExtern.setSelectedForView(true);
                readFromFile(calendarExtern);


                SimpleDateFormat SDF = new SimpleDateFormat("yyyyMMdd'T'HHmmss");

                net.fortuna.ical4j.model.Calendar calendar = null;

                if (calendarExtern.getUrl() == null) {
                    calendar = bookingCalendarService.readCalenderFromFile(calendarExtern);
                }

                else {
                    calendar = bookingCalendarService.readCalenderFromUrl(calendarExtern);
                }

                for (Iterator i = calendar.getComponents().iterator(); i.hasNext();) {
                    Component component = (Component) i.next();
                    // new event

                    // Date start = SDF.parse(component.getProperty("DTSTART").getValue());
                    // Date end = SDF.parse(component.getProperty("DTEND").getValue());

                    String startTime = component.getProperty(Property.DTSTART).getValue();
                    Date startDate = SDF.parse(startTime);

                    String endTime = component.getProperty(Property.DTEND).getValue();
                    Date endDate = SDF.parse(endTime);


                    String summary = component.getProperty("SUMMARY").getValue();

                    addEvent(new DefaultScheduleEvent(summary, startDate, endDate));


            } catch (Exception e) {

            }
        }
    };
}

Что я должен изменить, чтобы решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...