Christoph Kurrat

Aus SDQ-Wiki

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
  • Beispielprojekt des CompletionFeatureModel und FeatureConfig - Plugins
    • im SVN unter code\Palladio.FeatureModelling\trunk\edu.kit.ipd.sdq.completionfeaturemodel\example

Vorgehen

  1. Aus RSA als UML-Modell exportieren
  2. Genmodel in Eclipse mit Reload aktualisieren
  3. evtl. manuelle Änderungen an genmodel und ecore-Datei vornehmen
  4. Code neu generieren
  5. 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 und Notify auf true stellen. Angewendet bei:
      • FeatureConfig
        • ConfigNode
        • AttributeValue
      • FeatureModel
        • copyException
        • Feature=>Relation
        • DisambiguationRule=>OperationCallExp
    • damit die so erstellten Elemente auch gespeichert werden, muss im Ecore-Model die Eigenschaft Containment auf true setzen. Alternativ kann im Model die Assoziation eine Komposition sein. Angewendet bei:
      • FeatureConfig
        • ConfigNode
        • AttributeValue
      • FeatureModel
        • copyException
        • Feature=>Relation
        • DisambiguationRule=>OperationCallExp

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.

Siehe auch