| @namespace(uri="OO", prefix="") |
| package OO; |
| |
| @exeed(classIcon="model") |
| class Model extends Package { |
| } |
| |
| @exeed(referenceLabel=" |
| var str : String;
|
| str = self.closure(pe:PackageableElement|pe.package).collect(p|p.name).invert().concat('.');
|
| if (self.package.isDefined()){
|
| str = str + '.';
|
| }
|
| str = str + self.name;
|
| return str; |
| ") |
| abstract class PackageableElement extends NamedElement { |
| !ordered ref Package[1]#contents ~package; |
| } |
| |
| abstract class AnnotatedElement { |
| !ordered val Annotation[*] annotations; |
| } |
| |
| @exeed(label="return self.key + ' -> ' + self.value;", classIcon="annotation") |
| class Annotation { |
| !unique !ordered attr String[1] key; |
| !unique !ordered attr String[1] value; |
| } |
| |
| @exeed(label="return self.name;") |
| abstract class NamedElement extends AnnotatedElement { |
| !unique !ordered attr String[1] name; |
| } |
| |
| @exeed(classIcon="package", label="return self.name;") |
| class Package extends PackageableElement { |
| !ordered val PackageableElement[*]#~package contents; |
| ref Package[*] uses; |
| } |
| |
| abstract class Classifier extends PackageableElement { |
| } |
| |
| class ExternalClass extends Class { |
| } |
| |
| @exeed(classIcon="class", label=" |
| var label : String;
|
| label = self.name;
|
| if (self.extends.isDefined()){
|
| label = label + ' extends ' + self.extends.name;
|
| }
|
| return label; |
| ") |
| class Class extends Classifier { |
| !ordered ref Class[1]#extendedBy ~extends; |
| !ordered ref Class[*]#~extends extendedBy; |
| !ordered val Feature[*]#owner features; |
| !unique !ordered attr Boolean[1] isAbstract; |
| } |
| |
| @exeed(classIcon="datatype") |
| class Datatype extends Classifier { |
| } |
| |
| abstract class Feature extends NamedElement { |
| !ordered ref Class[1]#features owner; |
| !ordered ref Classifier[1] type; |
| !unique !ordered attr VisibilityEnum[1] visibility; |
| } |
| |
| @exeed(label=" |
| var label : String;
|
| label = self.name;
|
| if (self.type.isDefined()){
|
| if (self.isMany) {
|
| label = label + ' [*]';
|
| }
|
| label = label + ' : ' + self.type.name;
|
| }
|
| return label;", |
| icon=" |
| if (self.visibility = VisibilityEnum#private) {
|
| return 'private';
|
| }
|
| else {
|
| return 'public';
|
| } |
| ") |
| abstract class StructuralFeature extends Feature { |
| !unique !ordered attr Boolean[1] isMany; |
| } |
| |
| @exeed(label=" |
| var label : String;
|
| label = self.name + ' (';
|
| for (p in self.parameters) {
|
| label = label + p.name;
|
| if (p.type.isDefined()) {
|
| label = label + ' : ' + p.type.name;
|
| }
|
| if (hasMore) {
|
| label = label + ', ';
|
| }
|
| }
|
| label = label + ')';
|
| if (self.type.isDefined()) {
|
| label = label + ' : ' + self.type.name;
|
| }
|
| return label; |
| ", classIcon="operation") |
| class Operation extends Feature { |
| !ordered val Parameter[*]#owner parameters; |
| } |
| |
| @exeed(label=" |
| var label : String;
|
| label = self.name;
|
| if (self.type.isDefined()){
|
| label = label + ' : ' + self.type.name;
|
| }
|
| return label; |
| ", classIcon="parameter") |
| class Parameter extends NamedElement { |
| !ordered ref Classifier[1] type; |
| !ordered ref Operation[1]#parameters owner; |
| } |
| |
| class Reference extends StructuralFeature { |
| } |
| |
| class Attribute extends StructuralFeature { |
| } |
| |
| enum VisibilityEnum { |
| public = 1; |
| private = 2; |
| } |
| |