99/* Package: CSTL */
1010
1111import java .util .Vector ;
12+ import javax .swing .*;
1213
1314public class CGCondition
1415{ String stereotype = "" ;
@@ -45,6 +46,9 @@ public CGCondition(Expression expr)
4546 public void setVariable (String v )
4647 { variable = v ; }
4748
49+ public void setVariableMetafeature (String mf )
50+ { variable = variable + "`" + mf ; }
51+
4852 public void setStereotype (String st )
4953 { stereotype = st ; }
5054
@@ -102,57 +106,69 @@ else if (obj instanceof ASTTerm)
102106 else
103107 { ast .removeStereotype (stereo ); }
104108 }
105- }
109+
106110
107- System .out .println (">>> Executed action " + variable + " (" + positive + ") " + stereo );
111+ System .out .println (">>> Executed action " + obj + " (" + positive + ") " + stereo );
112+ JOptionPane .showMessageDialog (null ,
113+ "Executed action " + obj + " (" + positive + ") " + stereo , "" ,
114+ JOptionPane .INFORMATION_MESSAGE );
115+ }
108116 }
109117
110- public static boolean conditionsSatisfied (Vector conditions , Vector args , Vector entities )
118+ public static boolean conditionsSatisfied (
119+ Vector conditions , Vector args ,
120+ Vector entities , CGSpec cgs )
111121 { boolean res = true ;
112122 for (int i = 0 ; i < args .size (); i ++)
113123 { Object m = args .get (i );
114124 String var = "_" + (i +1 );
115125
116126 for (int j = 0 ; j < conditions .size (); j ++)
117127 { CGCondition cond = (CGCondition ) conditions .get (j );
118- if (cond .variable != null && var .equals (cond .variable ))
119- { if (m instanceof Type &&
120- cond .conditionSatisfied ((Type ) m , entities ))
121- { }
122- else if (m instanceof Expression &&
123- cond .conditionSatisfied ((Expression ) m , entities ))
124- { }
125- else if (m instanceof Statement &&
126- cond .conditionSatisfied ((Statement ) m , entities ) )
127- { }
128- else if (m instanceof Attribute &&
129- cond .conditionSatisfied ((Attribute ) m , entities ) )
130- { }
131- else if (m instanceof ModelElement &&
132- cond .stereotypeConditionSatisfied ((ModelElement ) m , entities ))
133- { }
134- else if (m instanceof Vector &&
135- cond .conditionSatisfied ((Vector ) m , entities ))
136- { }
137- else if (m instanceof String &&
138- cond .conditionSatisfied ((String ) m , entities ))
139- { }
140- else if (m instanceof ASTTerm &&
141- cond .conditionSatisfied ((ASTTerm ) m , entities ))
142- { System .out .println ("||| ASTTerm condition " + cond + " satisfied by term " + m );
143- System .out .println ();
144- }
145- else
146- { return false ; }
128+ if (cond .variable != null )
129+ { int mfindex = cond .variable .indexOf ("`" );
130+ String cvar = cond .variable ;
131+ if (mfindex > 0 )
132+ { cvar = cvar .substring (0 ,mfindex ); }
133+ if (var .equals (cvar ))
134+ { if (m instanceof Type &&
135+ cond .conditionSatisfied ((Type ) m , entities ,cgs ))
136+ { }
137+ else if (m instanceof Expression &&
138+ cond .conditionSatisfied ((Expression ) m , entities ,cgs ))
139+ { }
140+ else if (m instanceof Statement &&
141+ cond .conditionSatisfied ((Statement ) m , entities ,cgs ) )
142+ { }
143+ else if (m instanceof Attribute &&
144+ cond .conditionSatisfied ((Attribute ) m , entities ,cgs ) )
145+ { }
146+ else if (m instanceof ModelElement &&
147+ cond .stereotypeConditionSatisfied ((ModelElement ) m , entities ,cgs ))
148+ { }
149+ else if (m instanceof Vector &&
150+ cond .conditionSatisfied ((Vector ) m , entities ,cgs ))
151+ { }
152+ else if (m instanceof String &&
153+ cond .conditionSatisfied ((String ) m , entities ,cgs ))
154+ { }
155+ else if (m instanceof ASTTerm &&
156+ cond .conditionSatisfied ((ASTTerm ) m , entities ,cgs ))
157+ { System .out .println ("||| ASTTerm condition " + cond + " satisfied by term " + m );
158+ System .out .println ();
159+ }
160+ else
161+ { return false ; }
147162
148- System .out .println ("||| Condition " + cond + " is satisfied by " + m );
163+ System .out .println ("||| Condition " + cond + " is satisfied by " + m );
164+ }
149165 }
150166 }
151167 }
152168 return res ;
153169 }
154170
155- public boolean stereotypeConditionSatisfied (ModelElement m , Vector entities )
171+ public boolean stereotypeConditionSatisfied (ModelElement m , Vector entities , CGSpec cgs )
156172 { if (m .hasStereotype (stereotype ))
157173 { return positive ; }
158174
@@ -162,7 +178,7 @@ public boolean stereotypeConditionSatisfied(ModelElement m, Vector entities)
162178 return false ;
163179 }
164180
165- public boolean conditionSatisfied (Type t , Vector entities )
181+ public boolean conditionSatisfied (Type t , Vector entities , CGSpec cgs )
166182 { System .out .println ("||| Checking type condition " + t + " " + stereotype );
167183 System .out .println ();
168184
@@ -269,7 +285,7 @@ public boolean conditionSatisfied(Type t, Vector entities)
269285 return false ;
270286 }
271287
272- public boolean conditionSatisfied (Attribute a , Vector entities )
288+ public boolean conditionSatisfied (Attribute a , Vector entities , CGSpec cgs )
273289 { if ("primary" .equals (stereotype .toLowerCase ()) && a .isPrimaryAttribute ())
274290 { return positive ; }
275291 if ("static" .equals (stereotype .toLowerCase ()) && a .isStatic ())
@@ -279,7 +295,7 @@ public boolean conditionSatisfied(Attribute a, Vector entities)
279295 return false ;
280296 }
281297
282- public boolean conditionSatisfied (Vector v , Vector entities )
298+ public boolean conditionSatisfied (Vector v , Vector entities , CGSpec cgs )
283299 { if ("empty" .equals (stereotype .toLowerCase ()) &&
284300 (v == null || v .size () == 0 ))
285301 { return positive ; }
@@ -347,7 +363,7 @@ public boolean conditionSatisfied(Vector v, Vector entities)
347363 return false ;
348364 }
349365
350- public boolean conditionSatisfied (Expression e , Vector entities )
366+ public boolean conditionSatisfied (Expression e , Vector entities , CGSpec cgs )
351367 { Type t = e .getType ();
352368 Type et = e .getElementType ();
353369
@@ -549,18 +565,42 @@ else if (edata.equals(stereotype))
549565 // return false;
550566 }
551567
552- public boolean conditionSatisfied (Statement e , Vector entities )
568+ public boolean conditionSatisfied (Statement e , Vector entities , CGSpec cgs )
553569 { if (e instanceof AssignStatement )
554570 { AssignStatement st = (AssignStatement ) e ;
555571 Expression left = st .getLeft ();
556- return conditionSatisfied (left ,entities );
572+ return conditionSatisfied (left ,entities , cgs );
557573 }
558574 return false ;
559575 } // and for other kinds of statement also
560576
561- public boolean conditionSatisfied (ASTTerm a , Vector entities )
577+ public boolean conditionSatisfied (ASTTerm a , Vector entities , CGSpec cgs )
562578 { String alit = a .literalForm ();
563579
580+ Vector metafs = CGRule .metafeatures (variable );
581+
582+ System .out .println ("*** Metafeatures of " + variable + " are: " + metafs );
583+
584+ if (metafs .size () > 0 )
585+ {
586+ // If the variable has a metafeature: _i`mf
587+ // evaluate _i`mf in cgs and test result against
588+ // stereotype
589+
590+ String mf = (String ) metafs .get (0 );
591+ int mfindex = mf .indexOf ("`" );
592+ String mfvar = mf .substring (0 ,mfindex );
593+ String mffeat = mf .substring (mfindex +1 ,mf .length ());
594+ String repl = CGRule .applyMetafeature (
595+ mffeat ,a ,cgs ,entities );
596+
597+ if (repl != null && repl .equals (stereotype ))
598+ { return positive ; }
599+ else
600+ { return !positive ; }
601+ }
602+
603+
564604 if (a instanceof ASTCompositeTerm )
565605 { ASTCompositeTerm ac = (ASTCompositeTerm ) a ;
566606
@@ -574,7 +614,7 @@ public boolean conditionSatisfied(ASTTerm a, Vector entities)
574614 "3ary" .equals (stereotype ) ||
575615 "4ary" .equals (stereotype ) ||
576616 "5ary" .equals (stereotype ))
577- { return conditionSatisfied (ac .getTerms (), entities ); }
617+ { return conditionSatisfied (ac .getTerms (), entities , cgs ); }
578618 }
579619 else if (a instanceof ASTBasicTerm )
580620 { ASTBasicTerm ac = (ASTBasicTerm ) a ;
@@ -615,7 +655,8 @@ else if (a instanceof ASTSymbolTerm)
615655 }
616656
617657 if ("Class" .equals (stereotype ))
618- { if (Type .isOclEntityType (alit ,entities ))
658+ { if (Type .isOclEntityType (alit ,entities ) ||
659+ a .hasStereotype ("Class" ))
619660 { return positive ; }
620661 else
621662 { return !positive ; }
@@ -644,7 +685,7 @@ else if (a instanceof ASTSymbolTerm)
644685 return false ;
645686 }
646687
647- public boolean conditionSatisfied (String e , Vector entities )
688+ public boolean conditionSatisfied (String e , Vector entities , CGSpec cgs )
648689 { if (e == null )
649690 { return !positive ; }
650691
0 commit comments