Skip to content

Commit 42910d2

Browse files
authored
Updated mobile app synthesis
1 parent 4fc7f9e commit 42910d2

13 files changed

+404
-81
lines changed

ASTBasicTerm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ else if (tok.equals(value))
173173

174174
Vector ents = new Vector();
175175

176-
if (r.satisfiesConditions(eargs,ents))
176+
if (r.satisfiesConditions(eargs,ents,cgs))
177177
{ System.out.println(">>>> Applying basic term " + tag + " rule " + r + " for " + this);
178178
return r.applyRule(args,eargs,cgs);
179179
}

ASTCompositeTerm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ else if (obj instanceof Vector)
383383

384384
Vector ents = new Vector();
385385

386-
if (r.satisfiesConditions(eargs,ents))
386+
if (r.satisfiesConditions(eargs,ents,cgs))
387387
{ System.out.println(">>>> Applying " + tag + " rule " + r);
388388
return r.applyRule(args,eargs,cgs);
389389
}

Attribute.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
* *****************************/
1414
/* Package: Class Diagram */
1515

16+
/* NB: Please complete dbType and rawDecoder */
17+
1618
public class Attribute extends ModelElement
1719
{ private Type type;
1820
private Type elementType;
@@ -4981,7 +4983,8 @@ else if ("boolean".equals(tname))
49814983
{ return "VARCHAR(5)"; }
49824984
else
49834985
{ return tname; }
4984-
}
4986+
} // QUERY: isn't long "int64" in SQLite?
4987+
49854988

49864989
public String androidExtractOp(String ent)
49874990
{ String allcaps = name.toUpperCase();

CGCondition.java

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
/* Package: CSTL */
1010

1111
import java.util.Vector;
12+
import javax.swing.*;
1213

1314
public 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

Comments
 (0)