blob: 383318d55c1db5539f8e716cf2400795583f9cad [file]
modeltype older 'strict' uses 'http://www.eclipse.org/2008/requirements';
modeltype newer 'strict' uses 'http://www.eclipse.org/2008a/requirements';
transformation migrate(in oldModel : older, out newModel : newer);
main() {
oldModel.rootObjects()[Model]->map toNew();
}
mapping older::Model::toNew() : newer::Model {
title := self.title;
elements += self.groups.map toGroup();
}
mapping older::RequirementGroup::toGroup() : newer::RequirementGroup {
name := self.name;
id := self.id;
description := self.description;
children += self.children.map toGroup();
children += self.requirements.map toRequirement();
}
mapping older::Requirement::toRequirement() : newer::Requirement {
id := self.id;
name := self.title;
description := self.description;
type := self.type.toType();
children += self.children.map toRequirement();
priority := self.priority.toPriority();
author := self.author;
created := self.created;
comments += self.comments.map toComment();
-- try clone here, rather than invoke a mapping
version := self.version.clone()->oclAsType(newer::Version)->any(true);
-- version := self.version.map toVersion();
dependencies += self.dependencies.late resolve(newer::Requirement);
scenario := self.scenario;
state := self.state.toState();
resolution := self.resolution.toResolution();
}
mapping older::Comment::toComment() : newer::Comment {
subject := self.subject;
body := self.body;
author := self.author;
created := self.created;
children += self.children.map toComment();
}
mapping older::Version::toVersion() : newer::Version {
major := self.major;
minor := self.minor;
service := self.service;
}
query older::State::toState() : newer::State {
var state : newer::State := null;
switch {
case (self = older::State::NEW) state := newer::State::NEW;
case (self = older::State::REVIEWED) state := newer::State::REVIEWED;
case (self = older::State::APPROVED) state := newer::State::APPROVED;
case (self = older::State::RESOLVED) state := newer::State::RESOLVED;
-- else assert fatal (false) with log('State unsupported', self);
};
return state;
}
query older::Type::toType() : newer::Type {
var type : newer::Type := null;
switch {
case (self = older::Type::FUNCTIONAL) type := newer::Type::FUNCTIONAL;
case (self = older::Type::NONFUNCTIONAL) type := newer::Type::NONFUNCTIONAL;
-- else assert fatal (false) with log('Type unsupported', self);
};
return type;
}
query older::Priority::toPriority() : newer::Priority {
var priority : newer::Priority := null;
switch {
case (self = older::Priority::HIGH) priority := newer::Priority::HIGH;
case (self = older::Priority::MEDIUM) priority := newer::Priority::MEDIUM;
case (self = older::Priority::LOW) priority := newer::Priority::LOW;
-- else assert fatal (false) with log('Priority unsupported', self);
};
return priority;
}
query older::Resolution::toResolution() : newer::Resolution {
var resolution : newer::Resolution := null;
switch {
case (self = older::Resolution::INVALID) resolution := newer::Resolution::INVALID;
case (self = older::Resolution::ACCEPTED) resolution := newer::Resolution::ACCEPTED;
case (self = older::Resolution::IMPLEMENTED) resolution := newer::Resolution::IMPLEMENTED;
case (self = older::Resolution::LATER) resolution := newer::Resolution::LATER;
-- else assert fatal (false) with log('Resolution unsupported', self);
};
return resolution;
}