blob: 1c5580b2dcc3ee9e0be8b4b4537325d633fe7aae [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* E.D.Willink - initial implementation
*******************************************************************************/
import ecoreMM : 'http://www.eclipse.org/emf/2002/Ecore';
import pivotMM : 'http://www.eclipse.org/ocl/2015/Pivot';
--import pivotMM : 'platform:/resource/org.eclipse.ocl.pivot/model/Pivot.ecore'::pivot;
package org::eclipse::ocl::pivot2::ecore2pivot {
/**
* Transform an Ecore metamodel to a Pivot metamodel
*/
transformation Ecore2Pivot(ecore:ecoreMM, as:pivotMM)
{
/**
* ecore::EAttribute <=> pivot::Property
*/
top relation mapEAttribute {
eClass : ecoreMM::EClass;
asClass : pivotMM::Class;
name : String;
/*enforce*/ domain ecore eAttribute : EAttribute {
eContainingClass = eClass,
name = name
};
enforce domain as asProperty : Property {
owningClass = asClass,
name = name
};
when {
mapEClass(eClass, asClass);
}
}
/**
* ecore::EClass <=> pivot::Class
*/
top relation mapEClass {
ePackage : ecoreMM::EPackage;
asPackage : pivotMM::Package;
name : String;
isAbstract : Boolean;
isInterface : Boolean;
/*enforce*/ domain ecore eClass : EClass {
ePackage = ePackage,
name = name,
abstract = isAbstract,
interface = isInterface
};
enforce domain as asClass : Class {
owningPackage = asPackage,
name = name,
isAbstract = isAbstract,
isInterface = isInterface
};
when {
mapEPackage(ePackage, asPackage);
}
}
/**
* ecore::EPackage <=> pivot::Package
*/
top relation mapEPackage {
name : String;
nsPrefix : String;
nsURI : String;
/*enforce*/ domain ecore ePackage : EPackage {
name = name,
nsPrefix = nsPrefix,
nsURI = nsURI
};
enforce domain as asPackage : Package {
name = name,
nsPrefix = nsPrefix,
URI = nsURI
};
}
/**
* ecore::EReference <=> pivot::Property
*/
top relation mapEReference {
eClass : ecoreMM::EClass;
asClass : pivotMM::Class;
name : String;
/*enforce*/ domain ecore eReference : EReference {
eContainingClass = eClass,
name = name
};
enforce domain as asProperty : Property {
owningClass = asClass,
name = name
};
when {
mapEClass(eClass, asClass);
}
}
}
}