Christoph Kurrat
Generierte FeatureModel/Config und CompletionFeatureModel - Editoren
Basis
- basieren auf RSA-Modellen (RSA Version 7.5)
- Generiert aus Eclipse-3.5 "PCM-Edition" heraus
- Zusätzlich verwendete ecore-Modelle (in RSA und in Eclipse)
- In Plugin QVTModels enthalten
- EMOF
- EssentialOCL
- QVTBase
- QVTRelation
- QVTTemplate
- Jeweils in einem eigenen Plugin enthalten
- CopyException
- Identifier
- FeatureConfig
- FeatureModel
- CompletionFeatureModel
- In Plugin QVTModels enthalten
- Beispielprojekt des CompletionFeatureModel und FeatureConfig - Plugins
- im SVN unter code\Palladio.FeatureModelling\trunk\edu.kit.ipd.sdq.completionfeaturemodel\example
Vorgehen
- Aus RSA als UML-Modell exportieren
- Genmodel in Eclipse mit Reload aktualisieren
- evtl. manuelle Änderungen an genmodel und ecore-Datei vornehmen
- Code neu generieren
- evtl. manuell erzeugten Code updaten
Änderungen in den Modellen
- Attribut-Klassen erben von NamedElement, um ID und Namen zu erhalten. Betroffen:
- Feature Config: AttributeValue
- FeatureModel: Attribute
- Klassen mit derived Attribute erhalten eine mit OCL beschriebene Methode, die den Wert der Attribute berechnet. Die Attribute selbst können nicht mit OCL beschrieben werden.
- FeatureConfig: FeatureConfig::showFeatureConfigState()
- FeatureModel: DefaultValue::showType()
- CompletionFeatureModel: CompletionFeature::showFeatureState()
manuelle Änderungen an Genmodel/Ecore-Dateien
- teilweise werden im generierten Editor Elemente nur als Referenz eingetragen und können nicht über Rechtsklick=>new child neu erstellt werden. Um das zu beheben
- im Genmodel in den Properties des zu erstellenden Elements die Edit-Eigenschaften
Children
,CreateChildren
undNotify
auftrue
stellen. Angewendet bei:- FeatureConfig
- ConfigNode
- AttributeValue
- FeatureModel
- copyException
- Feature=>Relation
- DisambiguationRule=>OperationCallExp
- FeatureConfig
- damit die so erstellten Elemente auch gespeichert werden, muss im Ecore-Model die Eigenschaft
Containment
auftrue
setzen. Alternativ kann im Model die Assoziation eine Komposition sein. Angewendet bei:- FeatureConfig
- ConfigNode
- AttributeValue
- FeatureModel
- copyException
- Feature=>Relation
- DisambiguationRule=>OperationCallExp
- FeatureConfig
- im Genmodel in den Properties des zu erstellenden Elements die Edit-Eigenschaften
Stellen mit manuell erzeugtem Code
Alle diese derived Elements sind eigentlich ReadOnly, setzt man die Attribute in RSA auf readonly, treten im generierten Editor allerdings Fehler auf, da trotzdem versucht wird, in diese ReadOnly-Attribute zu speichern. Um dieses Verhalten zu verhindern, kann man vor der Codegenerierung die Attribute in der ecore-Datei auf transient setzen.
edu.kit.ipd.sdq.completionfeaturemodel.impl.CompletionFeatureImpl
public FeatureState getFeatureState()
: returns the result of showFeatureState(). showFeatureState() is defined by an OCL expression. The FeatureState of a CompletionFeature is MANDATORY, if the CompletionFeature is included in its simpleMandatory.mandatoryChildren. It is OPTIONAL, if it is included in its simpleOptional.optionalChildren. If neither of these conditions applies, the FeatureState is NOT_SET.
de.uka.ipd.sdq.featureconfig.impl.AttributeValueImpl
public String getValue()
: Return the features default attribute value if ConfigState of ConfigNode equals "DEFAULT" and the type of AttributeValue equals the type of the corresponding attribute
de.uka.ipd.sdq.featureconfig.impl.FeatureConfigImpl
public FeatureConfigState getFeatureConfigState()
: Returns the result of showFeatureConfigState(). showFeatureConfigState() is defined by an OCL expression. The FeatureConfigState of a FeatureConfig is DEFAULT, if the FeatureConfig equals its configurationDefault.defaultConfig. It is OVERRIDE, if it is included in its configurationOverrides.configOverrides. If neither of these conditions applies, the FeatureConfigState is NOT_SET.
de.uka.ipd.sdq.featureconfig.edit.ConfigNodeItemProvider
public String getText(Object object)
: the features name is shown, too.public void notifyChanged(Notification notification)
: additional update on change of origin-feature
TODO
: Tests der generierten Methoden und der manuell erzeugten Getter sind nicht vorhanden.