@DomainNode(topLevelQueryName = "trackables", searchQueryName = "searchTrackables")
@AggregatedNodeRelationship(name = "assignedUsers", description = "The set of Users assigned to any issue", property = "issues", path = [AggregationEntry(property = "assignments"), AggregationEntry(property = "user")])
@AggregatedNodeRelationship(name = "usedIssueTemplates", description = "The set of IssueTemplates used by any issue", property = "issues", path = [AggregationEntry(property = "template")])
@AggregatedNodeRelationship(name = "usedIssueTypes", description = "The set of IssueTypes used by any issue", property = "issues", path = [AggregationEntry(property = "type")])
@AggregatedNodeRelationship(name = "usedIssueStates", description = "The set of IssueStates used by any issue", property = "issues", path = [AggregationEntry(property = "state")])
@AggregatedNodeRelationship(name = "usedIssuePriorities", description = "The set of IssuePriorities used by any issue", property = "issues", path = [AggregationEntry(property = "priority")])
@AggregatedNodeRelationship(name = "usedLabels", description = "The set of Labels used by any issue (including Labels not on this Trackable)", property = "issues", path = [AggregationEntry(property = "labels")])
@AggregatedNodeRelationship(name = "affectedEntities", description = "The set of entities affected by any Issue", property = "issues", path = [AggregationEntry(property = "affects")])
@Authorization(name = "READ", allow = [Rule(beanRef = "relatedToNodePermissionRule")])
@Authorization(name = "ADMIN", allow = [Rule(beanRef = "relatedToNodePermissionRule")])
@Authorization(name = "MANAGE_IMS", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "CREATE_ISSUES", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN", "MANAGE_ISSUES", "MODERATOR"])])
@Authorization(name = "MODERATOR", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "COMMENT", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN", "MANAGE_ISSUES", "MODERATOR"])])
@Authorization(name = "MANAGE_LABELS", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "MANAGE_ARTEFACTS", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "MANAGE_ISSUES", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "EXPORT_ISSUES", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "EXPORT_LABELS", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
@Authorization(name = "AFFECT_ENTITIES_WITH_ISSUES", allow = [Rule(beanRef = "relatedToNodePermissionRule", options = ["ADMIN"])])
abstract class Trackable(name: String, description: String, var repositoryURL: URI?) : NamedAffectedByIssue

An entity which can have Issues, Labels and Artefacts. Has pinned issues. Can be synced to an IMS by creating an IMSProject. Can be affected by Issues.

Inheritors

Constructors

Link copied to clipboard
constructor(name: String, description: String, repositoryURL: URI?)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
@NodeRelationship(type = "AFFECTS", direction = Direction.INCOMING)
@FilterProperty
val affectingIssues: LazyLoadingDelegate<Issue, NodeSetPropertyDelegate.NodeSetProperty>

The issues which affect this entity

Link copied to clipboard
@NodeRelationship(type = "ARTEFACT", direction = Direction.OUTGOING)
@FilterProperty
val artefacts: LazyLoadingDelegate<Artefact, NodeSetPropertyDelegate.NodeSetProperty>

Artefacts of this trackable, typically some kind of file.

Link copied to clipboard
@FilterProperty
@SearchProperty
open override var description: String

The description of this entity.

Link copied to clipboard
internal var fieldCache: MutableMap<String, Any?>
Link copied to clipboard
val graphQLId: ID

The unique id of this node

Link copied to clipboard
@Id
@GeneratedValue(generatorRef = "nodeIdGenerator")
internal var id: String?
Link copied to clipboard
Link copied to clipboard
internal var isSaved: Boolean
Link copied to clipboard
@NodeRelationship(type = "ISSUE", direction = Direction.OUTGOING)
@FilterProperty
val issues: LazyLoadingDelegate<Issue, NodeSetPropertyDelegate.NodeSetProperty>

The set of Issues which are part of this Trackable. An Issue has to be part of a Trackable to use the Labels and Artefacts defined by the Trackable.

Link copied to clipboard
@NodeRelationship(type = "LABEL", direction = Direction.OUTGOING)
@FilterProperty
val labels: LazyLoadingDelegate<Label, NodeSetPropertyDelegate.NodeSetProperty>

The set of Labels which can be added to issues of this trackable.

Link copied to clipboard
@ConvertWith(converter = LazyLoadingContextConverter::class)
internal var lazyLoadingContext: LazyLoadingContext?
Link copied to clipboard
@FilterProperty
@OrderProperty
@SearchProperty
open override var name: String

The name of this entity.

Link copied to clipboard
@Version
private var nodeVersion: Long

Version used for optimistic locking

Link copied to clipboard
internal var orderFields: MutableMap<String, Any?>?
Link copied to clipboard
@NodeRelationship(type = "PINNED_ON", direction = Direction.INCOMING)
@FilterProperty
val pinnedIssues: LazyLoadingDelegate<Issue, NodeSetPropertyDelegate.NodeSetProperty>

Issues which are pinned to this trackable, subset of `issues`.

Link copied to clipboard
internal val propertyLookup: MutableMap<String, PropertyDelegate<*>>
Link copied to clipboard
Link copied to clipboard
@FilterProperty
var repositoryURL: URI?

If existing, the URL of the repository (e.g. a GitHub repository).

Link copied to clipboard
@NodeRelationship(type = "SYNCS_TO", direction = Direction.OUTGOING)
@FilterProperty
val syncsTo: LazyLoadingDelegate<IMSProject, NodeSetPropertyDelegate.NodeSetProperty>

IMSProjects this Trackable is synced to and from.

Functions

Link copied to clipboard
operator override fun equals(other: Any?): Boolean
Link copied to clipboard
internal suspend fun getFromGraphQL(@Autowired nodeQueryParser: NodeQueryParser, dataFetchingEnvironment: DataFetchingEnvironment): Any?
Link copied to clipboard
internal fun <T : PropertyDelegate<*>> getProperty(property: KProperty1<*, *>): T
Link copied to clipboard
override fun hashCode(): Int
Link copied to clipboard
internal suspend fun <T : Node?> loadNodesOfRelationship(property: KProperty1<*, *>, loader: LazyLoadingSubqueryGenerator<T>.() -> Unit?)
Link copied to clipboard
protected fun <T : Node?> NodeProperty(): PropertyDelegateProvider<Node, NodePropertyDelegate<T>>
Link copied to clipboard
protected fun <T : Node> NodeSetProperty(): PropertyDelegateProvider<Node, NodeSetPropertyDelegate<T>>
Link copied to clipboard
internal fun registerQueryResult(entry: NodeQueryEntry<*>, queryResult: Any?)
Link copied to clipboard
open override fun toString(): String