blob: 6ac9792603490296982191e78c09599daf6c46ae [file] [log] [blame]
@namespace(uri="http://www.eclipse.org/gmt/epsilon/hutn", prefix="hutn")
package hutn;
import "platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore";
class Spec {
val NsUri[*] nsUris;
val PackageObject[*] objects;
attr ecore.EString modelFile;
attr String sourceFile;
}
class NsUri extends ModelElement {
attr String[1] value;
}
class ModelElement {
attr int line;
attr int col;
}
abstract class Object extends ModelElement {
attr String type;
attr String identifier;
}
class PackageObject extends Object {
op ecore.EClass[*] getAllEClasses();
ref ecore.EPackage[*] metamodel;
val ClassObject[*] classObjects;
}
class ClassObject extends Object {
op Slot<?> findSlot(String feature);
op PackageObject[1] getPackageObject();
op ecore.EClass getEClass();
op boolean[1] hasEClass();
op boolean[1] typeCompatibleWith(ecore.EClass[1] eClass);
op AttributeSlot findOrCreateAttributeSlot(String feature);
op ReferenceSlot findOrCreateReferenceSlot(String feature);
op ContainmentSlot findOrCreateContainmentSlot(String feature);
val Slot<?>[*]#owner slots;
}
abstract class Slot <T> extends ModelElement {
op boolean[1] typeCompatibleWith(ecore.EStructuralFeature[1] eStructuralFeature);
op boolean[1] multiplicityCompatibleWith(ecore.EStructuralFeature[1] eStructuralFeature);
op boolean[1] compatibleWith(ecore.EStructuralFeature[1] eStructuralFeature);
op ecore.EStructuralFeature getEStructuralFeature();
op boolean[1] hasEStructuralFeature();
attr String feature;
ref ClassObject[1]#slots owner;
!unique readonly attr T[*] values;
op void setValues(T[*] values);
}
class AttributeSlot extends Slot<EJavaObject> {
}
abstract class ClassObjectSlot <T> extends Slot<T> {
op ClassObject[*] getClassObjects();
op void setClassObjects(ClassObject[*] classObjects);
op void addClassObject(ClassObject classObject);
}
class ContainmentSlot extends ClassObjectSlot<ClassObject> {
val ClassObject[*] classObjects;
}
class ReferenceSlot extends ClassObjectSlot<String> {
}