EN · DE · RU · FR · ES

#1095: ICalGenerator.kt

projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt Класс Kotlin, projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt 118 строк · 71 код · 33 комментария · 14 пустых
Назначение: Исходный файл: business/teamcal/ical/ICalGenerator.kt. ICalGenerator.kt является частью приложения управления проектами с открытым исходным кодом ProjectForge.

Исходный код (первые 100 строк)

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge распространяется по двойной лицензии.
//
// Эта версия для сообщества является бесплатным программным обеспечением; вы можете распространять и/или
// изменять её в соответствии с условиями Стандартной общественной лицензии GNU (GNU General Public License) в том виде,
// в каком она опубликована Фондом свободного программного обеспечения; версия 3 Лицензии.
//
// Эта версия для сообщества распространяется в надежде, что она будет полезной,
// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
// КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. См. Стандартную общественную лицензию GNU
// для получения более подробной информации.
//
// Вы должны были получить копию Стандартной общественной лицензии GNU вместе
// с этой программой; если нет, см. http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.business.teamcal.ical

import mu.KotlinLogging
import net.fortuna.ical4j.data.CalendarOutputter
import net.fortuna.ical4j.model.Calendar
import net.fortuna.ical4j.model.component.VEvent
import org.projectforge.ProjectForgeVersion
import org.projectforge.business.calendar.event.model.ICalendarEvent
import org.projectforge.business.teamcal.event.model.TeamEventDO
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.io.OutputStream
import java.time.LocalDate
import java.util.*

private val log = KotlinLogging.logger {}

/**
 * Записывает события в формате ics.
 */
class ICalGenerator @JvmOverloads constructor(val exportVAlarms: Boolean = true, val editable: Boolean = false) {
    var empty: Boolean = true
        private set

    // Создание объекта календаря
    private val calendar = Calendar()
        .withProdId("-//${ProjectForgeVersion.APP_ID} ${ProjectForgeVersion.VERSION_NUMBER}//iCal Generator//EN")
        .withDefaults() // add(GREGORIAN).add(VERSION_2_0)

    /**
     * Гарантирует наличие хотя бы одного события настройки.
     */
    fun ensureNotEmpty() {
        if (empty) {
            calendar.withComponent(VEventUtils.createSetupEvent())
        }
    }

    fun add(events: List<TeamEventDO>) {
        // Преобразование TeamEventDO в VEvent и добавление в календарь
        events.forEach { event ->
            add(event)
        }
    }

    fun add(event: ICalendarEvent) {
        val vEvent = VEventUtils.convertToVEvent(event)
        // Добавление события в календарь
        calendar.withComponent(vEvent)
        empty = false
    }

    fun addAllDayEvent(startDay: LocalDate, endDay: LocalDate?, title: String, uid: String): VEvent {
        val vEvent = VEventUtils.createAllDayEvent(startDay, endDay ?: startDay, title, uid)
        // Добавление события в календарь
        calendar.withComponent(vEvent)
        empty = false
        return vEvent
    }

    fun addEvent(startDate: Date, endDate: Date, title: String, uid: String): VEvent {
        val vEvent = VEventUtils.createEvent(startDate, endDate, title, uid)
        // Добавление события в календарь
        calendar.withComponent(vEvent)
        empty = false
        return vEvent
    }

    val asByteArray: ByteArray?
        get() {
            try {
                ByteArrayOutputStream().use { stream ->
                    val outputter = CalendarOutputter()
                    outputter.output(this.calendar.fluentTarget, stream)
                    return stream.toByteArray()
                }
            } catch (ex: IOException) {

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
c193e8288 Ical4j: миграционные материалы... (все тесты пройдены)

868d6abb7

2025 -> 2026
868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
index 7692ab96d..88113b38c 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

63081666f

Заголовки исходных файлов: 2024-> 2025.
63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
index e7df854e5..7692ab96d 100644
--- a/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
@@ -3,7 +3,7 @@
 // Project ProjectForge Community Edition
 //         www.projectforge.org
 //
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
 //
 // ProjectForge is dual-licensed.
 //

c193e8288

Ical4j: миграционные материалы... (все тесты пройдены)
c193e8288c03be35a08171e2319957a6080381b9
diff --git a/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
new file mode 100644
index 000000000..e7df854e5
--- /dev/null
+++ b/projectforge-business/src/main/kotlin/org/projectforge/business/teamcal/ical/ICalGenerator.kt
@@ -0,0 +1,118 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// Project ProjectForge Community Edition
+//         www.projectforge.org
+//
+// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+//
+// ProjectForge распространяется по двойной лицензии.
+//
+// Эта версия для сообщества является бесплатным программным обеспечением; вы можете распространять и/или
+// изменять её в соответствии с условиями Стандартной общественной лицензии GNU (GNU General Public License) в том виде,
+// в каком она опубликована Фондом свободного программного обеспечения; версия 3 Лицензии.
+//
+// Эта версия для сообщества распространяется в надежде, что она будет полезной,
+// но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
+// КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. См. Стандартную общественную лицензию GNU
+// для получения более подробной информации.
+//
+// Вы должны были получить копию Стандартной общественной лицензии GNU вместе
+// с этой программой; если нет, см. http://www.gnu.org/licenses/.
+//
+/////////////////////////////////////////////////////////////////////////////
+
+package org.projectforge.business.teamcal.ical
+
+import mu.KotlinLogging
+import net.fortuna.ical4j.data.CalendarOutputter
+import net.fortuna.ical4j.model.Calendar
+import net.fortuna.ical4j.model.component.VEvent
+import org.projectforge.ProjectForgeVersion
+import org.projectforge.business.calendar.event.model.ICalendarEvent
+import org.projectforge.business.teamcal.event.model.TeamEventDO
+import java.io.ByteArrayOutputStream
+import java.io.IOException
+import java.io.OutputStream
+import java.time.LocalDate
+import java.util.*
+
+private val log = KotlinLogging.logger {}
+
+/**
+ * Записывает события в формате ics.
+ */
+class ICalGenerator @JvmOverloads constructor(val exportVAlarms: Boolean = true, val editable: Boolean = false) {
+    var empty: Boolean = true
+        private set
+
+    // Создание объекта календаря
+    private val calendar = Calendar()
+        .withProdId("-//${ProjectForgeVersion.APP_ID} ${ProjectForgeVersion.VERSION_NUMBER}//iCal Generator//EN")
+        .withDefaults() // add(GREGORIAN).add(VERSION_2_0)
+
+    /**