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!; }
}
concept FieldInObjectEntity > Entity {
new Ref> objectEntity;
S fieldName;
*(AbstractJavaObjectEntity objectEntity, S *fieldName) {
this.objectEntity.set(objectEntity);
}
toString { ret super.toString() + " " + fieldName + " in " + objectEntity; }
}