edu-format/src/com/jetbrains/edu/learning/json/mixins/RemoteEduCourseMixins.kt (114 lines of code) (raw):
@file:JvmName("RemoteEduCourseMixins")
@file:Suppress("unused")
package com.jetbrains.edu.learning.json.mixins
import com.fasterxml.jackson.annotation.JsonAutoDetect
import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.annotation.JsonPropertyOrder
import com.jetbrains.edu.learning.courseFormat.Vendor
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.ADDITIONAL_FILES
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.AUTHORS
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.COURSE_TYPE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.CUSTOM_NAME
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.DESCRIPTION_FORMAT
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.DESCRIPTION_TEXT
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.ENVIRONMENT
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.FEEDBACK_LINK
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.FILES
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.GENERATED_EDU_ID
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.ID
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.IS_PRIVATE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.IS_TEMPLATE_BASED
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.ITEMS
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.LANGUAGE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.MARKETPLACE_COURSE_VERSION
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.NAME
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.PLUGINS
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.PLUGIN_VERSION
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.PROGRAMMING_LANGUAGE_ID
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.PROGRAMMING_LANGUAGE_VERSION
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.SOLUTIONS_HIDDEN
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.SOLUTION_HIDDEN
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.SUMMARY
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.TAGS
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.TASK_LIST
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.TASK_TYPE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.TITLE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.TYPE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.UPDATE_DATE
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.VENDOR
import com.jetbrains.edu.learning.json.mixins.JsonMixinNames.VERSION
import java.util.*
/**
* If you need to change something in the marketplace course archive format, you should do the following:
* - Add description to the `educational-core/resources/marketplace/format_description.md`
* - Create a pull request to the `https://github.com/JetBrains/intellij-plugin-verifier/tree/master/intellij-plugin-structure/structure-edu`
* and wait for it to be accepted and deployed.
*/
@JsonAutoDetect(setterVisibility = JsonAutoDetect.Visibility.NONE)
@JsonPropertyOrder(
MARKETPLACE_COURSE_VERSION,
ENVIRONMENT,
SUMMARY,
TITLE,
PROGRAMMING_LANGUAGE_ID,
PROGRAMMING_LANGUAGE_VERSION,
LANGUAGE,
COURSE_TYPE,
PLUGIN_VERSION,
VENDOR,
FEEDBACK_LINK,
IS_PRIVATE,
SOLUTIONS_HIDDEN,
PLUGINS,
ITEMS,
AUTHORS,
TAGS,
ID,
GENERATED_EDU_ID,
UPDATE_DATE,
ADDITIONAL_FILES,
PLUGIN_VERSION,
VERSION
)
abstract class RemoteEduCourseMixin : LocalEduCourseMixin() {
@JsonProperty(VENDOR)
@JsonInclude(JsonInclude.Include.NON_NULL)
private val vendor: Vendor? = null
@JsonProperty(GENERATED_EDU_ID)
@JsonInclude(JsonInclude.Include.NON_NULL)
private val generatedEduId: String? = null
@JsonProperty(IS_PRIVATE)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
private val isMarketplacePrivate: Boolean = false
@JsonProperty(MARKETPLACE_COURSE_VERSION)
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = IntValueFilter::class)
private val marketplaceCourseVersion: Int = -1
@JsonProperty(ID)
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = IntValueFilter::class)
private var id: Int = 0
@JsonProperty(UPDATE_DATE)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
private lateinit var updateDate: Date
@JsonProperty(FEEDBACK_LINK)
@JsonInclude(JsonInclude.Include.NON_NULL)
private lateinit var feedbackLink: String
}
@JsonPropertyOrder(TITLE, CUSTOM_NAME, TAGS, TASK_LIST, IS_TEMPLATE_BASED, TYPE)
abstract class RemoteFrameworkLessonMixin : RemoteLessonMixin() {
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = TrueValueFilter::class)
@JsonProperty(IS_TEMPLATE_BASED)
private var isTemplateBased: Boolean = true
}
@JsonPropertyOrder(ID, TITLE, CUSTOM_NAME, TAGS, TASK_LIST, TYPE)
abstract class RemoteLessonMixin : LocalLessonMixin() {
@JsonProperty(ID)
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = IntValueFilter::class)
private var id: Int = 0
}
@JsonPropertyOrder(ID, NAME, CUSTOM_NAME, TAGS, FILES, DESCRIPTION_TEXT, DESCRIPTION_FORMAT, FEEDBACK_LINK, SOLUTION_HIDDEN, TASK_TYPE)
abstract class RemoteTaskMixin : LocalTaskMixin() {
@JsonProperty(ID)
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = IntValueFilter::class)
private var id: Int = 0
}
@JsonPropertyOrder(ID, TITLE, CUSTOM_NAME, TAGS, ITEMS, TYPE)
abstract class RemoteSectionMixin : LocalSectionMixin() {
@JsonProperty(ID)
@JsonInclude(JsonInclude.Include.CUSTOM, valueFilter = IntValueFilter::class)
private var id: Int = 0
}