wizard CreateOneToManyAssociation { | |
guard : self.isKindOf(Collection) and self.size() = 2 | |
and self.forAll(c|c.isKindOf(Class)) | |
title : 'Create 1 (' + self.at(0).name + ') .. * (' + self.at(1).name + ') association' | |
do { | |
var c1 : Class := self.at(0); | |
var c2 : Class := self.at(1); | |
var assoc := new Association; | |
c1.owner.packagedElement.add(assoc); | |
assoc.createProperty(c1, false); | |
assoc.createProperty(c2, true); | |
} | |
} | |
wizard CreateFactory { | |
guard : self.isKindOf(Class) | |
title : 'Create factory' | |
do { | |
var factory : new Class; | |
self.owner.packagedElement.add(factory); | |
factory.name := self.name + 'Factory'; | |
var createOperation : new Operation; | |
createOperation.name := 'create' + self.name; | |
factory.ownedOperation.add(createOperation); | |
var returnParameter : new Parameter; | |
--var paramSet : new ParameterSet; | |
--createOperation.ownedParameterSet.add(paramSet); | |
--paramSet.parameter.add(returnParameter); | |
--returnParameter.type := self; | |
--returnParameter.direction := ParameterDirectionKind#"return"; | |
--createOperation.templateParameter.add(returnParameter); | |
var d : new Dependency; | |
self.owner.packagedElement.add(d); | |
d.name := 'creates'; | |
d.supplier.add(self); | |
d.client.add(factory); | |
} | |
} | |
wizard ExtractInterface { | |
guard : self.isKindOf(Class) | |
title : 'Extract interface' | |
do { | |
var i : new Interface; | |
self.owner.packagedElement.add(i); | |
i.name := 'I' + self.name; | |
var g : new Generalization; | |
self.generalization.add(g); | |
g.general := i; | |
for (p : Property in Property.allInstances.select(p|p.type = self)) { | |
p.type := i; | |
} | |
for (o : Operation in self.ownedOperation.clone()) { | |
i.ownedOperation.add(o); | |
} | |
} | |
} | |
operation Association createProperty(type : Class, many : Boolean) : Property { | |
var p := new Property; | |
p.type := type; | |
p.name := type.name.firstToLowerCase(); | |
if (many) { | |
p.name := p.name + 's'; | |
} | |
var lv := new LiteralInteger; | |
var uv; | |
if (many) { | |
uv := new LiteralUnlimitedNatural; | |
} | |
else { | |
uv := new LiteralInteger; | |
} | |
uv.value := 1; | |
lv.value := 1; | |
p.lowerValue := lv; | |
p.upperValue := uv; | |
self.ownedEnd.add(p); | |
return p; | |
} |