blob: 324fb48dacb2ef4af5ab581cd605468ef5523fc2 [file]
modeltype mindmap uses 'http://www.eclipse.org/2008/mindmap';
modeltype requirements uses 'http://www.eclipse.org/2008/requirements';
transformation mindmap2requirements(in inModel : mindmap, out outModel : requirements);
property dependencies : Set(Relationship) = null;
property reqCtr : Integer = 1;
property grpCtr : Integer = 1;
main() {
inModel.rootObjects()[Map]->map toRequirementsModel();
}
mapping mindmap::Map::toRequirementsModel() : requirements::Model {
init {
this.dependencies := self.dependencies();
}
title := self.title;
groups += self.rootTopics.map toRequirementGroup()->asOrderedSet();
}
mapping mindmap::Topic::toRequirementGroup() : requirements::RequirementGroup {
name := self.name;
id := 'G0' + this.grpCtr.toString();
-- FIXME: why does this require result prefix now when it didn't used to?
result.requirements += self.subtopics.map toRequirement();
end {
this.grpCtr := grpCtr + 1;
}
}
mapping mindmap::Topic::toRequirement() : requirements::Requirement {
title := self.name;
children += self.subtopics.map toRequirement();
id := 'R0' + this.reqCtr.toString();
version := object requirements::Version {
major := 1;
};
dependencies += this.dependencies->select(source = self).target.late
resolveIn(mindmap::Topic::toRequirement, requirements::Requirement);
end {
this.reqCtr := reqCtr + 1;
}
}
query mindmap::Map::dependencies() : Set(mindmap::Relationship) {
return self.elements->select(oclIsTypeOf(mindmap::Relationship))
->select(c | c.oclAsType(mindmap::Relationship).type = mindmap::Type::DEPENDENCY)
->collect(oclAsType(mindmap::Relationship))->asSet();
}