aboutsummaryrefslogtreecommitdiff
path: root/umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt
diff options
context:
space:
mode:
Diffstat (limited to 'umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt')
-rw-r--r--umlgen/src/main/java/moe/yuuta/umlgen/AssociateRelation.kt33
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}"
+ }
+}