diff options
Diffstat (limited to 'umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt')
-rw-r--r-- | umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt b/umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt new file mode 100644 index 0000000..31b5fd4 --- /dev/null +++ b/umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt @@ -0,0 +1,33 @@ +package moe.yuuta.umlgen + +/** + * Indicate an associate relationship, from one class to another, with lower / upper bonds and whether it is a partOf + * relation. + */ +@JvmRecord +data class AssociateRelation(val from: String, + val to: String, + val lower: Int, + val upper: Int, + val partOf: Boolean) { + /** + * Destruct the params. + */ + constructor(from: String, to: String, params: AssocAnnotationParams): + this(from, to, params.lower, params.upper, params.partOf) + + /** + * Return the label to be put at arrow head. + * For lower == upper == 1, just returns "" because it's the default association. + * For upper == infinity (-1), return lower..* + * Otherwise, return lower..upper. + */ + fun head(): String = + if (lower == upper && upper == 1) { + "" + } else if (upper == -1) { + "${lower}..*" + } else { + "${lower}..${upper}" + } +} |