# Anfänger Fragen zu EMF



## manius (16. Sep 2010)

Servus
Habe ein paar Anfänger Fragen zu EMF, ecore….(bin sonst Eclipse, Java, UML blutiger Anfänger…)
Bin stark am lesen, aber vielleicht eine oder andere Frage kann schon mir jemand beantworten….
Vor allem die ganze UML-Zeugt wird sehr abstakt überall behandelt, ich will aber konkreten Code erzeugen 

1. sourcecode unterschied zwischen Association und Aggregation ?
Soweit ich verstanden habe, die Aggregation hat stärkere Bindung, der „beinhalter“  ist noch zusätzlich für das Erzeugen und Zerstören zuständig…. Was heisst das aber programtechnisch (für JAVA,EMF)
(den Konstruktor muss ich bestimmt sowieso selbst aufrufen? und mit der SetXXX-Function wird die Referenz abgespeichert? Oder ??? Falls nicht,  wann und wie viel der Objekte werden erzeugt?

2. eine Association/Aggregation kann Derived sein. D.h abgeleitet / schon vorhanden.
wie kann ich mir das vorstellen? (als Kopie der Objekt-Referenz-Liste, die schon vorhanden ist ?  wie sage ich dem ecore um welche Objekte sich handelt?)
(falls nicht, kann ich mir die Objekt-Referenz liste irgendwie noch mal spiegeln?)

3. die Einstellung „Resolve Proxis“? ich glaube nicht dass ich es brauche, aber wann mach das Sinn?, welcher code wird damit erzeugt?

4. was sind EKeys von Association/Aggregation ? da tauchen die Attribute auf von der referenzierter Klasse? Was mache ich damit? 

Für erstes reichts 

Danke im Voraus

P.S Erklärungen in C oder ev. im C++  wären nicht schlecht …..


----------



## Jango (17. Sep 2010)

Auch wenn du es noch so verpackst... 
Dazu nicht mal besonders clever...
Keine Hausaufgaben!


----------



## manius (17. Sep 2010)

:--) nee, ich muss schon lange keine Schulbank drücken!  
Ist ja nur für mein privates kleines Projekt, dem ich in meine Freizeit mache, da ich aber sehr  wenig Zeit zu Verfügung habe, muss ja etwas zugig vorangehen. Ich dachte die eine oder andere Unklarheit kann mir jemand hier kurz erklären…. (sonst habe ich nicht viel am Hut mit Java, Eclipse, UML, OOP, EMF, GEF, GMF …and Co.

Gruß


----------



## Wildcard (17. Sep 2010)

Also erstmal vorweg, die Sache wird einfacher verständlich wenn du den Baum Editor benutzt um ein Ecore zu erzeugen, die grafische Ansicht eignet sich dafür IMHO nur bedingt.


> 1. sourcecode unterschied zwischen Association und Aggregation ?
> Soweit ich verstanden habe, die Aggregation hat stärkere Bindung, der „beinhalter“ ist noch zusätzlich für das Erzeugen und Zerstören zuständig…. Was heisst das aber programtechnisch (für JAVA,EMF)
> (den Konstruktor muss ich bestimmt sowieso selbst aufrufen? und mit der SetXXX-Function wird die Referenz abgespeichert? Oder ??? Falls nicht, wann und wie viel der Objekte werden erzeugt?


Aggregation würdest du in EMF als Containment übersetzen. Wenn eine Referenz eine Aggregation, also ein Containment ist, dann ist das Objekt der Vater des Objekts das referenziert wird. Wenn du in XML denkst, dann ist das Kind innerhalb der Tags des Vaters. Eine Association ist eine normale Referenz, das Objekt ist also nicht der Parent des referenzierten Objekts. SetXXX Methoden sind, wie der Name vermuten lässt, einfache Java Setter Methoden.



> 2. eine Association/Aggregation kann Derived sein. D.h abgeleitet / schon vorhanden.
> wie kann ich mir das vorstellen? (als Kopie der Objekt-Referenz-Liste, die schon vorhanden ist ? wie sage ich dem ecore um welche Objekte sich handelt?)
> (falls nicht, kann ich mir die Objekt-Referenz liste irgendwie noch mal spiegeln?)


Derived tritt selten alleine auf, meistens in Kombination mit volatile=true und transient=true.
Zur Erklärung, derived bedeutet nur, der Wert dieses Features berechnet sich aus anderen Features. Eine direkte Auswirkung davon ist das beim Clonen des Objekts dieser Wert ignoriert wird.
Zu den anderen beiden:
transient=true -> der Wert wird nicht serialisiert
volatile=true -> Für dieses Feature wird kein Member in der Klasse angelegt.

Das ist auch der Grund warum derived meistens in Kombination mit volatile und transient auftritt. Wenn ein Wert berechnet werden kann, braucht man kein Feld dafür und man muss den Wert auch nicht serialisieren.



> 3. die Einstellung „Resolve Proxis“? ich glaube nicht dass ich es brauche, aber wann mach das Sinn?, welcher code wird damit erzeugt?


EMF kann sehr gut mit Cross References umgehen. Eine Cross Reference liegt zB vor wenn ein Objekt das in Datei A abgespeichert wurde ein Objekt aus Datei B referenziert.
EMF erlaubt dir nun A komplett zu laden, ohne das B geladen wird. Alle Cross References auf B liegen nun als Proxy Objekte vor, also Platzhalter für Objekte die noch nicht geladen wurden, also noch nicht existieren. Wenn "Resolve Proxies" aktiviert ist, dann ersetzt EMF die Proxy Referenz bei Bedarf automatisch durch die echte Referenz, ohne das du etwas davon mitbekommst.
Also als Beispiel:
Objekt a hat eine Referenz auf Objekt b das in einer anderen Resource liegt. Du lädst a und für die referenz auf b wird ein Proxy installiert ohne die zweite Resource zu laden. Wenn du nun a.getB() aufrufst, erkennt EMF das dort nur ein Proxy Objekt installiert ist und 'resolved' den 'Proxy'. Im Hintergrund wird nun also die Resource in der B liegt geladen und du bekommst bei a.getB() die echte Referenz auf b, anstatt des Proxy Objekts.
Es handelt sich also um einen transparenten Lazy Loading Mechanismus.


> 4. was sind EKeys von Association/Aggregation ? da tauchen die Attribute auf von der referenzierter Klasse? Was mache ich damit?


EKeys spielen vor allem bei besagten Cross References eine Rolle. Wenn keine Keys Vorhanden sind (also eine Möglichkeit ein Objekt eindeutig per Attribut zu identifizieren), muss EMF referenzierte Objekte anhand ihrer Position identifizieren. Bei Modellen im speicher spielt das keine Rolle, sondern nur wenn du Objekte in anderen Dateien referenzierst (also zB das dritte Foo Objekt in Datei A).


----------



## manius (18. Sep 2010)

Hi Wildcard
Vielen Dank für deine Antwort!

Einige Unklarheiten wurden beseitigt aber bei der Aggregation bin immer noch nicht viel schlauer )

Zu. 1
Ich habe dein Text weitgehend verstanden trotzdem es fehlt mir da was…..

Vielleicht verschiedene Aussagen die ich nicht zusammenführen kann.

-  aus UML Kurzreferenzbuch 3.3: (zu Assoziation und Aggregation)
„Achtung Placebo: Assoziation und Aggregation sind semantisch gleichwertig, so sind sie auch im resultierenden Programmcode nicht unbedingt zu unterscheiden“ “Unterschied hat lediglich Kommentarcharakter “ ...

-  aus UML Kurzreferenzbuch 3.3: (zu Aggregation und Komposition)
„In C++ führt die Unterscheidung von Aggregation und Komposition zu einer entsprechenden Implementierung (Zeiger oder Wert). Smalltalk und Java kennen diese Unterscheidung nicht, da es dort keine Zeiger o.Ä. gibt, es sind grundsätzlich Referenzen“…..
(wenn in ecore statt einer  Aggregation eine Komposition gemeint  wäre, würde das eventuell auch deine Aussage decken….)

- wenn Assoziation und Aggregation semantisch gleichwertig sind UND  im JAVA Aggregation und Komposition auf die gleiche Art (über Referenzen) realisiert wird, ist doch alles Jacke wie Hose was ich nutze??? (führt zum gleichen code????)

habe mir ein kleines Beispiel gemacht und ein Model generiert

Kann auf den Ersten Blick kein Unterschied finden? Beide Listen werden mit 
protected EList<KlassA> myListeAg; und protected EList<KlassA> myListeAss;  angelegt. 
Andere Funkionen sind ja auch gleich….Muss aber sagen da sind einige Konstrukte die ich noch nicht verstehe…. 
Irgendwie vermisse ich da stelle wo ich die Listen füllen kann…. ?

Unterschied fand ich im *.genmodel! bei der Aggregation werden Edit-Properties Children,create Child, Notify auf true gesetzt? Was das auch genau heißen mag? Vielleicht nur relevant für den Edit/Editor Code?

Vermutung: Vielleicht ist die Aggregation oder Association für das Model-Code ohne Relevanz aber vielleicht steuert „nur“ das logische „Editor“-Verhalten ? das würde vielleicht Sinn machen :applaus:


Zu.3 
Lazy Loading Mechanismus kenne ich bei Modulen die bei bedarf nachgeaden werden(OSGi eigenschaft). Ist das hiermit gemeint?
d.H: Anklicken wenn referenziert wird auf module mit „Lazy Loading“ ?

Gruß


----------



## Wildcard (18. Sep 2010)

Wir reden hier nicht von UML. EMF spricht wie gesagt von Containment und non-containment. Containment = Parent/Child Beziehung


> Lazy Loading Mechanismus kenne ich bei Modulen die bei bedarf nachgeaden werden(OSGi eigenschaft). Ist das hiermit gemeint?
> d.H: Anklicken wenn referenziert wird auf module mit „Lazy Loading“ ?


Nein, Lazy Loading zwischen EMF Resourcen, nicht Modulen


----------



## manius (22. Sep 2010)

Danke für Deine Antwort
Ok, viel zu kompliziert und vor allem um drei ecken gedacht …. 

Habe noch zwei Probleme! für Tipps wäre ich dankbar.
1. Ich habe eine Klasse „Event_Server“ der auf die Referenzen schon irgendwo erzeugter Containments „Action“ und „Signale“ zugreifen kann. Ich möchte jetzt editierbar eine sozusagen doppelte Liste wo ich die „Action“ zu „Signalen“ zuordnen kann. Ein gewisser Action auf ein gewisses Signal mappen….. ? wie kann ich so was realisieren ?
Ich habe mich gedanklich etwas festgebissen dass es mit EMap zu realisieren wäre? (vielleicht falscher Ansatz) Habe aber in der FAQ gesehen das die referenzen cantainment sein sollen/müssen?? (und so auch verhält sich der Editor….)
Geht das damit? ein Tipp für mich ?

2.   Eine Unschönheit: ein „Signal“ beinhaltet EINE DataTyp-Referenz   (Containment) von verschiedenen Daten Typen (Typ_U8, Typ_U32, Typ_Float usw…) dies habe ich über abstracte Klasse realisiert,  funktioniert… aber ist irgendwie unschön,  die verschiedenen Typen hätte ich gerne über ein Attribut auswählen wollen. (d.H. ein DataTyp zufügen und mit Attribut von Signal den jeweiligen Typ auswählen?) 
Es scheint mir EFeatureMapEntry dafür geeignet zu sein?  (soweit ich dies richtig verstanden habe…) aber ich kriege nix zum laufen! (da kommen EAnnotationen die ich nicht verstehe……und das model will jetzt welcher xml-resourcen ?)
Frage: ist das das richte für mich? falls ja, ein Link mit ein Sample von EFeatureMapEntry! oder kann jemand ein zwei Zeiler schreiben??? Ich bin zu blöd!

Vielen Dank voraus!!!


----------



## Wildcard (22. Sep 2010)

1. Du möchtest eine Map, also Key/Value Paare? Ja, in dem Fall ist eine EMap das richtige.



> 2. Eine Unschönheit: ein „Signal“ beinhaltet EINE DataTyp-Referenz (Containment) von verschiedenen Daten Typen (Typ_U8, Typ_U32, Typ_Float usw…) dies habe ich über abstracte Klasse realisiert, funktioniert… aber ist irgendwie unschön, die verschiedenen Typen hätte ich gerne über ein Attribut auswählen wollen. (d.H. ein DataTyp zufügen und mit Attribut von Signal den jeweiligen Typ auswählen?)
> Es scheint mir EFeatureMapEntry dafür geeignet zu sein? (soweit ich dies richtig verstanden habe…) aber ich kriege nix zum laufen! (da kommen EAnnotationen die ich nicht verstehe……und das model will jetzt welcher xml-resourcen ?)
> Frage: ist das das richte für mich? falls ja, ein Link mit ein Sample von EFeatureMapEntry! oder kann jemand ein zwei Zeiler schreiben??? Ich bin zu blöd!


Ich habe ehrlich gesagt Schwierigkeiten deiner Beschreibung zu folgen. 
Du hast ein Signal das verschiedene 'Typen' beeinhalten kann?
Dein Problem ist nun das du auf den konkreten Typ casten musst, weil du mit den Methoden der abstrakten Oberklasse nicht viel anfangen kannst?
Falls ich das soweit richtig verstanden habe, wären Generics vielleicht das richtige für dich (EMF unterstützt das)?
Falls nein, versuch es bitte etwas verständlicher zu beschreiben, ich kenne weder dein Modell, noch deine Domain, daher wirst du etwas weiter ausholen müssen um mich abzuholen.


----------



## manius (23. Sep 2010)

Hi Wildcard,
langsam bin ich dir was schuldig! Wenn Du über 16 bist schick ich dir Flasche Whisky? 

Zu.1


> 1. Du möchtest eine Map, also Key/Value Paare? Ja, in dem Fall ist eine EMap das richtige.



Ich weiß nicht so recht (vielleicht doch, bin aber net sicher) was du mit Key/Value Parre meinst, wenn aber das gleiche ist, funktioniert EMap auch auf reine Referenzen? 

Ich versuche etwas rauszuholen um zu bestätigen wg. Key/Value Parre:

Ich habe ein Baum mit verschiedenen Elementen, wo manches Element ein „Action“ beinhaltet, andere sind eben ein „Signal“ …. Ist aber Wurscht…
An einer anderen Stelle eben in meinem „Event_Server“ möchte ich Verknüpfungen herstellen können von „Action-Refernzen“ und „Signalen-Referenzen“ die irgendwo im Baum erzeugt sind…. Also wenn du so willst möchte ich eben paare bilden von Action-Referenzen zu Signal-Referenzen……..Referenzen zu Referenzen Paaren? 

Zu 2.


> Du hast ein Signal das verschiedene 'Typen' beeinhalten kann?


Ja



> Dein Problem ist nun das du auf den konkreten Typ casten musst, weil du mit den Methoden der abstrakten Oberklasse nicht viel anfangen kannst?


Ja

Was sind Generics ? (wo soll ich nachschlagen java, emf  ?)
Mit FeatureMapEntry geht das nicht? 

Gruß


----------



## Wildcard (23. Sep 2010)

> langsam bin ich dir was schuldig! Wenn Du über 16 bist schick ich dir Flasche Whisky?


Die 16 hab ich leider schon eine ganze Weile hinter mir 



Zu 1)
Ja, das hört sich schwer nach einer EMap an. Klar, Referenz auf Referenz ist auch möglich, eine EMap funktioniert wie eine normale Hashmap. Intern ist es eigentlich eine Liste mit Map Entries, aber diese Liste implementiert gleichzeitig das Map Interface.



> Was sind Generics ? (wo soll ich nachschlagen java, emf ?)



Hmm, normale Java Generics, du weißt schon,  
	
	
	
	





```
List<String> stringList = new ArrayList<String>();
```
, diese Art von Generics. EMF Klassen können mit Generic Type Parametern versehen werden. Wenn bei dir also schon zur Compilezeit klar sein kann um welchen Typ es sich handelt (das Problem also mit Java Generics gelöst werden kann), dann würde ich diesen Weg gehen.



> Mit FeatureMapEntry geht das nicht?


Nun, es hängt davon ab.
FeatureMaps sind etwas schwierig zu erklären. Im Prinzip geht es darum unterschiedliche Sichten auf das gleiche Feature zu erlauben, also ist gut möglich das du damit dein Problem elegant lösen kannst.
Dieses PDF sollte hinreichend erklären wofür FeatureMaps gedacht sind und wie man sie einsetzt. Wenn du etwas nicht verstehst, frag einfach nach.
http://www.eclipse.org/modeling/emf/docs/overviews/FeatureMap.pdf

so wie ich es verstehe gibt es mindestens 3 Varianten die dir helfen können:
1. Generics
2. FeatureMap
3. Transient + Derived + Volatile Features mit den verschiedenen Ausprägungen.

Beispiel für 3:

Du hast besagte Typen: Typ_U8, Typ_U32, Typ_Float

Dein Signal hat nun folgende Methoden:

```
getType : AbstractType
getU8Type: : U8Type
getU32Type : U32Type
getFloatType : FloatType
```
Die Klasse hat nur ein einziges Feld das den abstract type hält. Die konkreten derived features casten diesen abstract type auf eine konkrete Ausprägung, oder geben null zurück.
Allerdings scheint mir das zuviel Aufwand nur um einen Cast zu vermeiden.

Generics sind vermutlich das eleganteste, aber das funktioniert eben nur wenn der Typ eines Signals schon zur Compile Zeit bekannt ist.


----------



## GerhardSchröder (24. Sep 2010)

manius hat gesagt.:


> Hi Wildcard,
> langsam bin ich dir was schuldig! Wenn Du über 16 bist schick ich dir Flasche Whisky?



Ohne etwas zum Thema beitragen zu können, müsste Wildcard schon mindestens 18 sein, damit du dir keinen Ärger einhandelst. :toll:


----------



## Jango (24. Sep 2010)

GerhardSchröder hat gesagt.:


> Ohne etwas zum Thema beitragen zu können, müsste Wildcard schon mindestens 18 sein, damit du dir keinen Ärger einhandelst. :toll:



Hahahahahaha........
27 isser


----------



## manius (24. Sep 2010)

Hi 

@GerhardSchröder
Oooops 18! Da habe ich was verwechselt, dann 16 war mit poppen! 
Ich durfte saufen schon fast im Kindergarten aber poppen erst nach der Heirat 

@Jango
na dann! musst du nur noch sagen ob er so ein Zeug mag? 

@Wildcard
Vielen Dank für deine Antwort!

ich habe mir ein kleines Beispiel gemacht wo einerseits mein Model grob drin ist, anderseits wo ich versuche EMap und EFeatureMapEntry zu testen.

O waja ! EMap funktioniert  sowie ich mir das vorgestellt habe … (und es funktioniert  auch nur mit Referenzen so wie du gesagt hast, obwohl ich was anderes gelesen habe)

Es ist nicht so dass ich immer die beste Lösung suche, will aber vermeiden aus der Unwissenheit 
große Umwege zu machen…. 

Dein Beispiel für 3 muss ich mir noch etwas reifen lassen…..aber wenn du an Casts nicht schlimm findest….

Ich habe mich aber irgendwie auf EFeatureMapEntry verbissen, ich habe noch zwei andere Stellen wo ich ev. dies verwenden konnte, ........ich will die Scheiße verstehen........

Ein kleines Bild Ausschnitts meines Models:
siehe Link

Hier ecore:

[XML]<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="model"
    nsURI="test" nsPrefix="costam.model">
  <eClassifiers xsi:type="ecore:EClass" name="RootDiagram">
    <eStructuralFeatures xsi:type="ecore:EReference" name="logikobjekte" upperBound="-1"
        eType="#//LogikObjekt" containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LogikObjekt" abstract="true">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Signal">
    <eOperations name="getMyData"/>
    <eOperations name="getMyTyp"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_before" eType="#//Action"
        volatile="true" transient="true" derived="true" containment="true">
      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
        <details key="group" value="#myaction"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_after" eType="#//Action"
        volatile="true" transient="true" derived="true" containment="true">
      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
        <details key="group" value="#myaction"/>
      </eAnnotations>
    </eStructuralFeatures>
    <eStructuralFeatures xsi:type="ecore:EReference" name="data" lowerBound="1" eType="#//MyDataTyp"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="myaction" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
        <details key="kind" value="group"/>
      </eAnnotations>
    </eStructuralFeatures>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TestObjekt1" eSuperTypes="#//LogikObjekt">
    <eStructuralFeatures xsi:type="ecore:EReference" name="signallist" upperBound="-1"
        eType="#//Signal" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_xmt" eType="#//Action"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_rcv" eType="#//Action"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_timer" eType="#//Action"
        containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_timeout" eType="#//Action"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="TestObjekt2" eSuperTypes="#//LogikObjekt">
    <eStructuralFeatures xsi:type="ecore:EReference" name="signallist" upperBound="-1"
        eType="#//Signal" containment="true"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="event_x" eType="#//Action"
        containment="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Action">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="obj" eType="#//TestObjekt1"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="obj2" eType="#//Signal"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="EventServer" instanceClassName="java.util.Map$Entry"
      eSuperTypes="#//LogikObjekt">
    <eStructuralFeatures xsi:type="ecore:EReference" name="key" upperBound="-1" eType="#//Action"/>
    <eStructuralFeatures xsi:type="ecore:EReference" name="value" upperBound="-1"
        eType="#//Signal"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Data_u32" eSuperTypes="#//MyDataTyp">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="data" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typ" eType="#//DATATYP"
        changeable="false" defaultValueLiteral="TYP_U32" unsettable="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Data_u8" eSuperTypes="#//MyDataTyp">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="data" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EByte"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typ" eType="#//DATATYP"
        changeable="false" defaultValueLiteral="TYP_U8" unsettable="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Data_float" eSuperTypes="#//MyDataTyp">
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="data" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typ" eType="#//DATATYP"
        changeable="false" defaultValueLiteral="TYP_FLOAT" unsettable="true"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="MyDataTyp" abstract="true"/>
  <eClassifiers xsi:type="ecore:EEnum" name="DATATYP">
    <eLiterals name="TYP_U8"/>
    <eLiterals name="TYP_U32" value="1"/>
    <eLiterals name="TYP_FLOAT" value="2"/>
  </eClassifiers>
</ecore:EPackage>
[/XML]

ich schreibe, wie ich mir, was im Editor vorstelle, und wo ich ev. Probleme sehe, vielleicht sind ja aber keine Probleme…. oder wie du das lösen würdest…

1. Signal erzeugen und DataTyp z.B. per Attribut auswählen…
(momentan in rcp-editor muss ich noch jeweilige MyDataTyp zufügen,  würde aber gerne naher (GEF) die automatisch beim erzeugen von Signal miterzeugen und von der Abhängigkeit von einem Attribut jeweiligen Typ auswählen…..  (den End-User nicht zu viel klicken lassen…) auf die jeweiligen daten (MyDatatyp), sowie du sagst über Cast zugreifen…..
(kann bestimmt auf „change of value“ reagieren und alten löschen und neuen erzeugen..)

2. was mir noch nicht gefällt sind die Containments zw. TestObjekt1/Action und Signal/Action… 
Im Editor hätte ich gerne - ein TestObjekt1 erzeugen, - ein Action zufügen, - und per Attribut festlegen welcher Event,.. fertig… und von „Action” würde ich gerne aber noch auf das Objekt zugreifen was mich erzeugt hatte…

momentan sowie ich das gemahlt habe, muss beim erzeugen von Action immer auswählen welcher event_xxx … die Rückreferenzen (EOpposite) musste ich beim Action für jedes Containment halten, also im meinem Beispiel 6-mal obwohl nur ein Erzeuger existiert...

Ich bezweifle daß ich mich klar ausgedrückt habe???

Ich habe irgendwie den Eindruck da passen die EFeatureMapEntry dazu??? 
Habe auch versucht dies zu implementieren zw. Signal und Action, kann sogar rcp-editor durchkompilieren aber der Editor verhält sich etwas komisch…

Hi Wildcard, vergiss alle meine vorherigen Fragen, will deine Geduld mit mir nicht strapazieren, wäre es möglich dass du mein ecore modifizierst so dass ich ein EFeatureMapEntry Beispiel habe?
(das pdf hab schon gesehen, ich schau mir morgen noch genauer an…....) 
morgen kämpfe ich weiter….

Gruß


----------



## Wildcard (24. Sep 2010)

> Hi Wildcard, vergiss alle meine vorherigen Fragen, will deine Geduld mit mir nicht strapazieren, wäre es möglich dass du mein ecore modifizierst so dass ich ein EFeatureMapEntry Beispiel habe?


Wenn ich mir dein Modell so ansehe sehe ich nicht wie eine FeatureMap da reinpasst. FeatureMaps machen IMHO nur dann Sinn wenn du mit Listen arbeitest die unterschiedliche Ausprängungen von Objekten gleichzeitig enthalten kann, du aber auf die einzelnen Ausprägungen getrennt zugreifen willst.


----------



## Jango (25. Sep 2010)

manius hat gesagt.:


> @Jango
> na dann! musst du nur noch sagen ob er so ein Zeug mag?



Joe mag Bier...


----------



## manius (25. Sep 2010)

morgen!
ok, also für mein Model brauche dann kein FeatureMap!
kannst du dann dies so Ändern dass es Sinn macht und kleines Beispiel dazu? Eben für die Zukunft für Lernzwecke! Ich werde mich wohl hier nicht mehr trauen noch mal nach FeatureMap zu fragen ! 

Hätte man die einzelne Containments event_timeout, event_xmt, event_rcv …oder event_after, event_befor zu unbegrenzten Listen gemacht hätte doch gepasst? 

Schick mir mal deine Adresse über PN dann schicke ich dir ein keines „Danke Schön“
so „ein hartes Zeug“ magst du eher weniger? oder doch?

Gruß


----------

