Menu

Example in this link is not working

2022-05-24
2022-05-24
  • Saran Vinaiyak

    Saran Vinaiyak - 2022-05-24

    Link: https://www.ical4j.org/examples/model/#creating-a-meeting-of-four-hour-duration

    I have corrected the compilation errors in the above example and yet when I run it. This is my output. Please help.

    BEGIN:VCALENDAR
    END:VCALENDAR
    

    I am getting this error when I call Calendar#validate :

    net.fortuna.ical4j.validate.ValidationException: Content [PRODID] must be specified once
        at net.fortuna.ical4j.validate.Validator.assertFalse(Validator.java:53)
    

    Here is my code:

    import net.fortuna.ical4j.data.CalendarOutputter
    import net.fortuna.ical4j.model.DateTime
    import net.fortuna.ical4j.model.TimeZoneRegistry
    import net.fortuna.ical4j.model.TimeZoneRegistryFactory
    import net.fortuna.ical4j.model.component.VEvent
    import net.fortuna.ical4j.model.component.VTimeZone
    import net.fortuna.ical4j.model.parameter.Cn
    import net.fortuna.ical4j.model.parameter.Role
    import net.fortuna.ical4j.model.property.Attendee
    import net.fortuna.ical4j.model.property.CalScale
    import net.fortuna.ical4j.model.property.ProdId
    import net.fortuna.ical4j.model.property.Uid
    import net.fortuna.ical4j.model.property.Version
    import net.fortuna.ical4j.util.Calendars
    import net.fortuna.ical4j.util.MapTimeZoneCache
    import net.fortuna.ical4j.util.RandomUidGenerator
    import net.fortuna.ical4j.util.UidGenerator
    
    import java.time.LocalDateTime
    import java.time.Month
    import java.time.ZoneId
    
    System.setProperty("net.fortuna.ical4j.timezone.cache.impl", MapTimeZoneCache.class.getName());
    // Create a TimeZone
    TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
    TimeZone timezone = registry.getTimeZone("America/Mexico_City");
    VTimeZone tz = timezone.getVTimeZone();
    
    // Start Date is on: April 1, 2008, 9:00 am
    java.util.Calendar startDate = new GregorianCalendar();
    startDate.setTimeZone(timezone);
    startDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
    startDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
    startDate.set(java.util.Calendar.YEAR, 2008);
    startDate.set(java.util.Calendar.HOUR_OF_DAY, 9);
    startDate.set(java.util.Calendar.MINUTE, 0);
    startDate.set(java.util.Calendar.SECOND, 0);
    
    // End Date is on: April 1, 2008, 13:00
    java.util.Calendar endDate = new GregorianCalendar();
    endDate.setTimeZone(timezone);
    endDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
    endDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
    endDate.set(java.util.Calendar.YEAR, 2008);
    endDate.set(java.util.Calendar.HOUR_OF_DAY, 13);
    endDate.set(java.util.Calendar.MINUTE, 0);
    endDate.set(java.util.Calendar.SECOND, 0);
    
    // Create the event
    String eventName = "Progress Meeting";
    LocalDateTime start = LocalDateTime.of(2023, Month.APRIL, 30, 12, 00)
    LocalDateTime end = LocalDateTime.of(2023, Month.APRIL, 30, 12, 30)
    VEvent meeting = new VEvent(start, end, eventName);
    
    // add timezone info..
    meeting.getProperties().add(tz.getTimeZoneId().get());
    
    // generate unique identifier..
    UidGenerator ug = new RandomUidGenerator();
    Uid uid = ug.generateUid();
    meeting.getProperties().add(uid);
    
    // add attendees..
    Attendee dev1 = new Attendee(URI.create("mailto:dev1@mycompany.com"));
    dev1.getParameters().add(Role.REQ_PARTICIPANT);
    dev1.getParameters().add(new Cn("Developer 1"));
    meeting.getProperties().add(dev1);
    
    Attendee dev2 = new Attendee(URI.create("mailto:dev2@mycompany.com"));
    dev2.getParameters().add(Role.OPT_PARTICIPANT);
    dev2.getParameters().add(new Cn("Developer 2"));
    meeting.getProperties().add(dev2);
    
    // Create a calendar
    net.fortuna.ical4j.model.Calendar icsCalendar = new net.fortuna.ical4j.model.Calendar();
    icsCalendar.getProperties().add(Version.VERSION_2_0);
    icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
    
    icsCalendar.getProperties().add(CalScale.GREGORIAN);
    
    
    
    // Add the event and print
    icsCalendar.getComponents().add(meeting);
    System.out.println(icsCalendar.validate());
    
    OutputStream byteOutputStream = new ByteArrayOutputStream();
    CalendarOutputter calendarOutputter = new CalendarOutputter(false)
    calendarOutputter.output(icsCalendar, byteOutputStream)
    
    println new String(byteOutputStream.toByteArray())
    
     

    Last edit: Saran Vinaiyak 2022-05-24
    • Saran Vinaiyak

      Saran Vinaiyak - 2022-05-24

      I figured it out. I was using 4.0.0-alpha version. However, when I switched it to the version: 3.2.2 it worked fine.

       

Log in to post a comment.

MongoDB Logo MongoDB