blob: 4c45735beb8db99d1007ae9e7d98f93212597f5e [file] [log] [blame]
/**
* Copyright (c) 2012 itemis GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Mark Broerkens - initial API and implementation
*
*/
modeltype ECORE uses 'http://www.eclipse.org/emf/2002/Ecore';
modeltype XSD uses 'http://www.eclipse.org/emf/2003/XMLType';
modeltype NAMESPACE uses 'http://www.w3.org/XML/1998/namespace';
transformation ReqIfModelCleaner(inout reqIfModel : ECORE);
main() {
reqIfModel.objectsOfType(ECORE::EModelElement)->map removeAnnotations();
reqIfModel.objectsOfType(ECORE::EStructuralFeature)->map makeUnsettable();
reqIfModel.objectsOfType(ECORE::EReference)->map setContainmentReferenceMetadata();
}
mapping inout ECORE::EModelElement :: removeAnnotations ()
{
self.eAnnotations.map removeElements();
}
mapping inout ECORE::EModelElement :: removeElements ()
{
self.allSubobjects()[ECORE::EModelElement]->map removeElement();
self->map removeElement();
}
mapping inout ECORE::EModelElement :: removeElement ()
{
reqIfModel.removeElement(self);
}
mapping inout ECORE::EStructuralFeature :: makeUnsettable() {
self.unsettable := true;
}
mapping inout ECORE::EReference :: setContainmentReferenceMetadata()
when {self.containment}
{
self.eAnnotations := self.getElementFeatureExtendedMetadata("element");
self.eAnnotations += self.getElementFeatureXMLMappingExtendedMetadata();
}
query ECORE::ENamedElement :: getElementFeatureExtendedMetadata(kind : String) : ECORE::EAnnotation {
return object ECORE::EAnnotation {
source := "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";
details += object ECORE::EStringToStringMapEntry {
key := "name";
value := self.name;
};
details += object ECORE::EStringToStringMapEntry {
key := "kind";
value := kind;
};
details += object ECORE::EStringToStringMapEntry {
key := "namespace";
value := "##targetNamespace";
};
}
}
query ECORE::EReference :: getElementFeatureXMLMappingExtendedMetadata() : ECORE::EAnnotation {
return object ECORE::EAnnotation {
source := "http:///org/eclipse/sphinx/emf/serialization/XMLPersistenceMappingExtendedMetaData";
details += object ECORE::EStringToStringMapEntry {
key := "wrapperName";
value := self.name;
};
details += object ECORE::EStringToStringMapEntry {
key := "featureWrapperElement";
value := "true";
};
details += object ECORE::EStringToStringMapEntry {
key := "featureElement";
value := "false";
};
details += object ECORE::EStringToStringMapEntry {
key := "classifierWrapperElement";
value := "false";
};
details += object ECORE::EStringToStringMapEntry {
key := "classifierElement";
value := "true";
};
}
}