# xpend ecore::EJavaObjet nach Integer oder String



## shining (19. Aug 2011)

Hallo,

ich versuche gerade aus meinem Modell Text zu generieren, dabei bin ich auf folgendes Problem
gestoßen:

Ich möchte einen Wert eines Stereotpys auswerten. An den eigentlichen Wert komm ich schon ran mit:

getValue(this.getAppliedStereotype(Monitored.toString()),"maxDuration")

Allerdings lieftert getValue ein ecore::EJavaObject zurück, dass kann ich leider mit keiner Zahl oder
einem String vergleichen. Wie kann ich das Objekt in einen anderen Typen umwandeln? Mit (Integer) bzw. (String) davor geht es leider nicht 

Danke schon mal für eure Hilfe

Grüße

Stefan


----------



## Gast2 (20. Aug 2011)

Mach doch ein neues define dann kannst du gleich auf den wert zugreifen.


```
«DEFINE xyz FOR MyDsl::zzz»
```


----------



## shining (20. Aug 2011)

Danke für die schnelle Antwort. 
Leider bin ich noch nicht so gut vertraut mit Xpand, deshalb kann ich
mir nicht vorstellen wie das konkret aus zu sehen hat?


```
...
«EXPAND xyz(getValue(this.getAppliedStereotype(Monitoring.String), "maxDuration"))»
...
«DEFINE xyz FOR ecore::EJavaObject»
«If xyz == 0»
// hier kommt der Code hin
«ENDIF»
«ENDDEFINE»
```

So klappt es jedenfalls nicht.

Besten Dank schon mal im Voraus.


----------



## Gast2 (23. Aug 2011)

He versteh nicht ganz was du machst du hast doch ein Stereotyp, das ist dann quasi wie casten darum brauchst du ein neues define in dem define kannst du dann auf alle values deines types zugreifen

Dann machst du einfach


```
«DEFINE MyStereotyp FOR DeineDSL::Monitoring(oder dein Stereotyp)»
//hier kannst du nun auf deinen value zugreifen «maxDuration» 

«ENDDEFINE»
```

Aufruf


```
«EXPAND MyStereotyp FOREACH xyz.typeSelect(DeineDSL::Monitoring)»
```


----------



## shining (23. Aug 2011)

Danke für deine Hilfe, jetzt bin ich schon ein Stück weiter.

Allerdings hab ich leider noch ein kleines Problem:

Das typeSelect funktioniert nicht.

Der Ausdruck
«this.getApplicableStereotypes()»
liefert 

[org.eclipse.uml2.uml.internal.impl.StereotypeImpl@19658fe (name: Monitoring, visibility: <unset>) (isLeaf: false, visibility: public, isAbstract: false) (isActive: false, isAbstract: false)]

Wenn ich ein folgendes schreibe
«this.getApplicableStereotypes().typeSelect(Monitoring)»
bekomme ich ein leere Liste.
Das Paket, dass Monitoring enthält wurde importiert und Monitoringwurde beim Define auch erkannt.

Woran könnte das liegen?

Grüße 

Stefan


----------



## Gast2 (23. Aug 2011)

shining hat gesagt.:


> Woran könnte das liegen?



Das liegt daran dass du «this.getApplicableStereotypes()» gar nicht verwenden sollst!!!


Zeig mal dein Define und dein Expand wo das verwenden willst... Du brauchst halt eine funktion wie AllAttributes().typeSelect oder sowas


----------



## shining (23. Aug 2011)

Sry meinte natürlich «this.getAppliedStereotypes()».

Im Mom sieht es so aus

```
«DEFINE Outcome FOR ActivityEdge»
«EXPAND DoMonitoring FOREACH this.getAppliedStereotypes().typeSelect(Monitored)»
....
«ENDDEFINE»

«DEFINE DoMonitoring FOR Monitored» 
//test
«ENDDEFINE»
```


----------



## Gast2 (23. Aug 2011)

Ja auch nicht verwenden...

hast du keine methode AllAttributes() oder was willst du den auswerten? Musst du eventuell nur this übergeben?

```
«EXPAND DoMonitoring FOR this»
```


----------



## shining (2. Sep 2011)

Also ich habe eine ActivityEdge die besitzt manchmal einen Stereotyp Monitored. Dieser Stereotyp hat manchmal Wert z.B. maxDuration. Zu schauen ob das Stereotyp und der Wert vorhanden ist klappt schon. Jetzt möchte ich noch den Wert von maxDuration ein Integer im UML-Diagramm mit einer anderen Zahl vergleichen.

AllAttributes() gibt es nur bei Stereotypen. 
Bei 
«EXPAND DoMonitoring FOREACH this.getAppliedStereotype(Monitored.toString())»
bekomme ich nur ein Stereotyp zurück und nicht das Stereotype Monitored. Casten kann ich auch nicht mit (Monitored) davor. Da heißt es cannot cast Stereotype to Monitored.

Bei
«EXPAND DoMonitoring FOREACH this.getAppliedStereotypes().typeSelect(Monitored)»
bekomme ich eine List zurück.

Danke für deine Hilfe


----------



## Gast2 (2. Sep 2011)

Und was war mit der Lösung


```
«EXPAND DoMonitoring FOR this»
```


```
«DEFINE DoMonitoring FOR DeinSterotyp» 
this.maxDuration
```


----------



## shining (5. Sep 2011)

Hallo,

das mit


```
«EXPAND DoMonitoring FOR this»
```

geht leider nicht: couldn't find definition DoMonitoring for type ActivityEdge.


----------



## Gast2 (6. Sep 2011)

Mehr kann ich dir nicht sagen bei mir funktioniert es so. Keine Ahnung was du machst...


----------

