Skip to content

Commit

Permalink
refactor: improve Trigger type hierarchy
Browse files Browse the repository at this point in the history
  • Loading branch information
anitvam committed Oct 22, 2024
1 parent aedf868 commit 7829713
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package it.unibo.jakta.beliefs
import it.unibo.jakta.beliefs.BeliefBase.Update

/** A BDI Agent's collection of [Belief]s */
interface BeliefBase<Query : Any, Belief, SelfType : BeliefBase<Query, Belief, SelfType>> : Collection<Belief> {
interface BeliefBase<in Query : Any, out Belief, SelfType : BeliefBase<Query, Belief, SelfType>> : Collection<Belief> {

/**
* Performs unification between [B] and values in this [BeliefBase]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@ import it.unibo.jakta.plans.PlanLibrary
/**
* The Context is the actual state of a BDI Agent's structures.
*/
interface AgentContext<B : Belief<*>, C : BeliefBase<B, C>, T : Trigger<*>> {
interface AgentContext<Query, Belief, BB, T> where
Query : Any,
BB : BeliefBase<Query, Belief, BB>,
T : Trigger<*> {

/** [BeliefBase] of the BDI Agent */
val beliefBase: C
val beliefBase: BB

/**
* The collection of [Event] that the BDI Agent reacts on.
Expand Down
65 changes: 32 additions & 33 deletions jakta-api/src/main/kotlin/it/unibo/jakta/events/Trigger.kt
Original file line number Diff line number Diff line change
@@ -1,52 +1,51 @@
package it.unibo.jakta.events

import it.unibo.jakta.beliefs.Belief
import it.unibo.jakta.beliefs.BeliefBase

/** [Trigger] denotes the change that took place for the [Event] generation. */
sealed interface Trigger<out X> {
val value: X
sealed interface Trigger<out Query> {
val value: Query
}

/** [Trigger] generated after a [Belief] addition (or removal) from the [BeliefBase]. */
interface BeliefBaseRevision<out X : Belief<*>> : Trigger<X>
sealed interface BeliefBaseRevision<out Query> : Trigger<Query> {
/** [Trigger] generated after a Belief addition to agent's [BeliefBase]. */
data class BeliefBaseAddition<out Query>(override val value: Query) : BeliefBaseRevision<Query> {
override fun toString(): String = "BeliefBaseAddition(value=$value)"
}

/** [Trigger] generated after a [Belief] addition to agent's [BeliefBase]. */
class BeliefBaseAddition<X : Belief<*>>(override val value: X) : BeliefBaseRevision<X> {
override fun toString(): String = "BeliefBaseAddition(value=$value)"
}

/** [Trigger] generated after a [Belief] removal from agent's [BeliefBase]. */
data class BeliefBaseRemoval<X : Belief<*>>(override val value: X) : BeliefBaseRevision<X> {
override fun toString(): String = "BeliefBaseRemoval(value=$value)"
}
/** [Trigger] generated after a Belief removal from agent's [BeliefBase]. */
data class BeliefBaseRemoval<out Query>(override val value: Query) : BeliefBaseRevision<Query> {
override fun toString(): String = "BeliefBaseRemoval(value=$value)"
}

data class BeliefBaseUpdate<X : Belief<*>>(override val value: X) : BeliefBaseRevision<X> {
override fun toString(): String = "BeliefBaseUpdate(value=$value)"
data class BeliefBaseUpdate<out Query>(override val value: Query) : BeliefBaseRevision<Query> {
override fun toString(): String = "BeliefBaseUpdate(value=$value)"
}
}

/** [Trigger] of an event made by a [Test] Goal. */
interface TestGoalTrigger<out X> : Trigger<X>
sealed interface TestGoalTrigger<out Query> : Trigger<Query> {
/** [Trigger] generated after an invocation of a [Test] Goal. */
data class TestGoalInvocation<out Query>(override val value: Query) : TestGoalTrigger<Query> {
override fun toString(): String = "TestGoalInvocation(value=$value)"
}

/** [Trigger] generated after an invocation of a [Test] Goal. */
data class TestGoalInvocation<X>(override val value: X) : TestGoalTrigger<X> {
override fun toString(): String = "TestGoalInvocation(value=$value)"
}

/** [Trigger] generated after a failure of a [Test] Goal. */
data class TestGoalFailure<X>(override val value: X) : TestGoalTrigger<X> {
override fun toString(): String = "TestGoalFailure(value=$value)"
/** [Trigger] generated after a failure of a [Test] Goal. */
data class TestGoalFailure<out Query>(override val value: Query) : TestGoalTrigger<Query> {
override fun toString(): String = "TestGoalFailure(value=$value)"
}
}

/** [Trigger] of an event made by a [Achieve] Goal. */
interface AchievementGoalTrigger<out X> : Trigger<X>
sealed interface AchievementGoalTrigger<out Query> : Trigger<Query> {

/** [Trigger] generated after the invocation of a [Achieve] Goal. */
data class AchievementGoalInvocation<X>(override val value: X) : AchievementGoalTrigger<X> {
override fun toString(): String = "AchievementGoalInvocation(value=$value)"
}
/** [Trigger] generated after the invocation of a [Achieve] Goal. */
data class AchievementGoalInvocation<out Query>(override val value: Query) : AchievementGoalTrigger<Query> {
override fun toString(): String = "AchievementGoalInvocation(value=$value)"
}

/** [Trigger] generated after the failure of a [Achieve] Goal. */
data class AchievementGoalFailure<X>(override val value: X) : AchievementGoalTrigger<X> {
override fun toString(): String = "AchievementGoalFailure(value=$value)"
/** [Trigger] generated after the failure of a [Achieve] Goal. */
data class AchievementGoalFailure<out Query>(override val value: Query) : AchievementGoalTrigger<Query> {
override fun toString(): String = "AchievementGoalFailure(value=$value)"
}
}

0 comments on commit 7829713

Please sign in to comment.