Class Diagram

The diagram below shows a simplified version of Apache Causeway' internal metamodel.

hide empty members

skinparam class {
    BackgroundColor<<desc>> Cyan
    BackgroundColor<<ppt>> LightGreen
    BackgroundColor<<mi>> LightPink
    BackgroundColor<<role>> LightYellow
    BackgroundColor<<strategy>> White
    BackgroundColor<<api>> White
    BackgroundColor<<spi>> White
    BackgroundColor<<internal>> LightGrey
    BackgroundColor<<value>> White

    BackgroundColor<<entity>> LightGreen
    BackgroundColor<<viewmodel>> LightPink
    BackgroundColor<<mixin>> LightYellow
}

package metamodel {

    class LogicalType<<value>> {
        +type
    }

    class Object\nSpecification<<desc>> {
        +objectSpecId
        ....
        -fullyQualifiedClassName
    }

    class Object\nMember<<desc>> {

    }

    class Object\nAction<<desc>> {

    }

    class Object\nAssociation<<desc>> {

    }

    class OneToOne\nAssociation<<desc>> {

    }

    class OneToMany\nAssociation<<desc>> {

    }

    interface FacetHolder<<desc>> {
    }

    class Object\nActionParameter<<desc>> {
    }

    class OneToOne\nActionParameter<<desc>> {
    }

    interface Facet<<desc>> {
    }

    class OneToMany\nActionParameter<<desc>> {
    }
}

package runtime {
    class ManagedObject<<ppt>> {
        +getSpecification()
        +getPojo()
    }
    class Bookmark<<value>> {

    }
}



Object\nSpecification -up-> LogicalType
Object\nSpecification -down-> "*" Object\nMember
Object\nMember ^-down- Object\nAssociation
Object\nMember ^-down- Object\nAction
Object\nAssociation ^-down- OneToOne\nAssociation
Object\nAssociation ^-down- OneToMany\nAssociation
Object\nActionParameter ^-down- OneToOne\nActionParameter
Object\nActionParameter ^-down- OneToMany\nActionParameter
Object\nAction -left-> "*" Object\nActionParameter

FacetHolder ^-.left- Object\nSpecification
FacetHolder ^-.down- Object\nMember
FacetHolder ^-.down- Object\nActionParameter
FacetHolder -right-> "*" Facet


ManagedObject  -up-> Bookmark

Bookmark -right-> LogicalType

where in the metamodel package:

ObjectSpecification

is equivalent to java.lang.Class

LogicalType

is a value object equivalent to the @Named#value attribute

OneToOneAssociation

represents a scalar property

OneToManyAssociation

represents a collection

ObjectAction

represents an action (with multiple parameters, either scalar or list)

and in the runtime package:

Bookmark

is equivalent to a tuple of LogicalType and an Identifier, appears in URLs in the Wicket and Restful Objects viewers

ManagedObject

is equivalent to java.lang.Object