xpend ecore::EJavaObjet nach Integer oder String

shining

Mitglied
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
 
G

Gast2

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

Code:
«DEFINE xyz FOR MyDsl::zzz»
 

shining

Mitglied
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?

Java:
...
«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.
 
G

Gast2

Gast
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

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

«ENDDEFINE»

Aufruf

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

shining

Mitglied
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
 

shining

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

Im Mom sieht es so aus
Java:
«DEFINE Outcome FOR ActivityEdge»
«EXPAND DoMonitoring FOREACH this.getAppliedStereotypes().typeSelect(Monitored)»
....
«ENDDEFINE»

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

Gast2

Gast
Ja auch nicht verwenden...

hast du keine methode AllAttributes() oder was willst du den auswerten? Musst du eventuell nur this übergeben?
Code:
«EXPAND DoMonitoring FOR this»
 

shining

Mitglied
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
 
G

Gast2

Gast
Und was war mit der Lösung

Code:
«EXPAND DoMonitoring FOR this»

Code:
«DEFINE DoMonitoring FOR DeinSterotyp» 
this.maxDuration
 

shining

Mitglied
Hallo,

das mit

Code:
«EXPAND DoMonitoring FOR this»

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

Ähnliche Java Themen


Oben