Example Person

The following is a simple sample program using multiplicities:

package orp.coc.test.codegeneration

import orp.coc._
import scala.collection.mutable.ListBuffer

class Person(val name: String) {

  override def toString = "Person(\"" + name + "\")"

  @any(classOf[ListBuffer[Person]]) var children: Person = _
  @one var father: Person = _
  @option var spouse: Person = _

  def childrenNames: List[String] = children.name
  // def childrenNamesWithoutType: List[Person] = children.name
  def childrenNamesNative = childrenContainer.asBare map (p => p.name)

}

A usage of that class could look like this:

object PersonApp extends App {
  val p = new Person("John")
  val lisa = new Person("Lisa")
  val dummy = new Person("Dummy")

  println("p.children.getClass() : " + p.children.getClass())
  println("classOf[List[Person]].isAssignableFrom(p.children.getClass()) : " +
  	classOf[List[Person]].isAssignableFrom(p.children.getClass()))

  p.children_+=(lisa)
  p.children_+=(dummy)
  println("p.children : " + p.children.asBare)

  println("remove (1) : " + p.childrenContainer(1))
  p.children_-=(p.children()(1))
  println("p.children : " + p.children.asBare)

  val ben = new Person("Ben")
  p.children_+=(ben)
  println("add (Ben) : " + p.children()(1))
  println("p.children = " + p.children.asBare)

  println("childrenNamesNative : " + p.childrenNamesNative)
  println("p.children.name : " + p.children.name)
  println("childrenNames : " + p.childrenNames)

  println("Select 1st Child")
  val child1 = p.children.apply(1)

  println("child 1 : " + child1)
  println("child 1's children : " + child1.children().asBare)

  println("p.children.children : " + p.children.children.asBare)
  println("p.children.children.names : " + p.children.children.name)

  println("adding to lisa")
  lisa.children_+=(new Person("LisaChild1"))
  lisa.children_+=(new Person("LisaChild2"))
  println("p.children.children : " + p.children.children.asBare)
  println("p.children.children.names : " + p.children.children.name)
  println("adding to dummy")
  ben.children_+=(new Person("BenChild1"))
  println("p.children.children : " + p.children.children.asBare)
  println("p.children.children.names : " + p.children.children.name)
  println("p.childrenContainer.map(x => x.childrenContainer) : " +
  	p.childrenContainer.map(x => x.childrenContainer))
  println("dummy.children : " + dummy.children().asBare)

  println("get first child of p - should be Ben")
  println("p.children()(1) " + p.children()(1))
  val pChild1 = p.children()(1)

}