concept Entity > NamedConcept {
}
abstract concept AbstractJavaObjectEntity > Entity {
abstract A object();
toString {
S s = super.toString();
O o = object();
if (o != null)
s += " " + str_pcall(o);
ret s;
}
}
concept TransientJavaObjectEntity > AbstractJavaObjectEntity {
gettable transient A object;
}
concept PersistentJavaObjectEntity > AbstractJavaObjectEntity {
gettable A object;
}
concept ConceptEntity extends AbstractJavaObjectEntity {
new Ref concept;
*(A concept) { this.concept.set(concept); }
A object() { ret concept!; }
}